千家信息网

Linux 嵌入式驱动开发hello world的示例分析

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,Linux 嵌入式驱动开发hello world的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、代码编写,只
千家信息网最后更新 2024年11月24日Linux 嵌入式驱动开发hello world的示例分析

Linux 嵌入式驱动开发hello world的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1、代码编写,只有一个文件,内容如下

文件名为:mini2440_hello_module.c

#include #include static int __init mini2440_hello_module_init(void){    printk("Hello, Mini2440 module is installed !\n");    return 0;}static void __exit mini2440_hello_module_cleanup(void){    printk("Good-bye, Mini2440 module was removed!\n");}module_init(mini2440_hello_module_init);module_exit(mini2440_hello_module_cleanup);MODULE_LICENSE("GPL");

注解:

A、两个头文件是必须的,不要问为什么

B、mini2440_hello_module_init() 驱动加载函数,也是必须的

C、mini2440_hello_module_cleanup()驱动卸载函数,也是必须的

D、module_init(mini2440_hello_module_init) 你想让你的驱动运行起来,就必须有这个

E、module_exit(mini2440_hello_module_cleanup) 和 module_init 的意义刚好相反

B、MODULE_LICENSE("GPL"); 用于声明模块的许可证

2、驱动安装

驱动程序的安装有两种方式,第一种是模块方式,第二种是直接编译进内核

这里我就讲讲如何修改相应的配置文件,增加内核的配置菜单选项吧。这里涉及到两个文件一个是makefile和kconfig,makefile的作用就是编译,具体的来说就是写好一个程序你就必须写好它的makefile文件。kconfig的作用就是使得写好的驱动能增加到图形配置菜单中,简单来说,就是你想在内核配置菜单中看到你的内核选项,你就必须修改kconfig文件。

,下面我们就来讲讲如何修改makefile文件以及kconfig文件吧。假如我们写好了一个驱动程序,然后呢放在了drivers/char目录下,而且文件名为mini2440_hello_module.c。首先,我们先修改同目录下的makefile文件吧,如何修改呢?很多时候一打开一看怎么密密麻麻的呢,其实没关系的,你没看到吗?大部分的格式其实是一摸一样的,这就简单了,我们也依葫芦画瓢吧,我们加这一句: obj-$(CONFIG_MINI2440_HELLO) += mini2440_hello_module.o

对于这个语句是什么意思,我也不想在这里说的太详细了,最右边那个是我们的驱动文件的文件名,至于右边那个CONFIG是必须的,而那个MINI2440_HELLO呢,是我们等一下在Kconfig文件中要用到的。接着我们修改同目录下的Kconfig文件,找到menu"Character devices"在这下面开始添加吧,添加的内容如下:

config MINI2440_HELLO        tristate "MINI2440 BOARD HELLO TEST"        depends on ARCH_S3C2440        default m if ARCH_S3C2440        help          MINI2440 Board First module test.

在这里我也简单讲解一下上面这几条语句吧,最上面的config是必须的,这是它的格式这样说吧。下面一句呢,是它在内核配置单上显示的文字了,下面的那句是它的依赖,也就是说只有ARCH_S3C2440配置好了,我们才能配置这一驱动。最后的是它的帮助信息,以后你按照它的格式照着写就好了。懂了吧!

接着就是照着之前讲的如何编译内核编译一下内核了。输入:make menuconfig,将刚刚的模块选择为M吧,然后编译内核,把内核镜像烧进开发板。最后使用命令make SUBDIR=drivers/char/

modules再编译。得到mini2440_hello_module.ko这个就是我们要的驱动模块了,我们把它加到开发板,加载的方式有很多种,我一般是用串口加进开发板的。在开发板的lib目录下输入rz即可下载了。

ok,假如你已经成功下载驱动模块到开发板了,这时候你需要做的是加载驱动模块了,为了形象生动点,我就截图了吧:

注意:在执行make menuconfig,图形化界面中

Device Drivers -->....Character devices -->

下可能不会出现

MINI2440 BOARD HELLO TEST

选项,

需要进行以下动作,则会出现此选项

#make menuconfig命令进入内核配置界面,进入到"System Type"选项配置菜单,将S3C2440 Machines选项下做如下选择:只选择SMDK2440和SMDK2440 withS3C2440 CPU module两个选项。

Linux操作系统中模块操作相关命令解释
lsmod 查看已经安装好的模块, 也可以查看/proc/modules文件的内容. 实际上,lsmod读命令就是通过查看/proc/modules的内容来显示模块信息的.
modinfo 显示模块信息
modprobe 不需要指定路径,它会到默认路径下寻找模块。模块也存在依赖性问题: 比如你要加载msdos.ko, 需要先加载fat.ko. modprobe查看/lib/module/version/modules.dep得知模块的依赖关系
rmmod 卸载模块,但是内核会认为卸载模块不安全,可以添加命令强制卸载。
depmod 检查系统中模块之间的依赖关系,并把依赖关系信息存于/lib/modules/2.6.18-1.2798/modules.dep中。 一般加载模块后,要命令行下先执行 depmod -a后,在系统加载模块时候会查看modules.dep中模块依赖及路径信息,这样子才可以成功加载需要模块。
insmod 加载模块,需要指定完整的路径和模块名字。

注:本人遇到的问题

模块需要上传到:

/lib/modules/2.6.32.2

下,rmmod命令才会起作用,【2.6.32.2】为linux kernel版本号

如图

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

模块 文件 驱动 内核 配置 命令 就是 开发 编译 信息 内容 目录 菜单 路径 两个 作用 方式 格式 程序 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网站服务器管理员日志 中文字符数据库 网络安全保护个人隐私宣传动画 上海海加网络安全信息有限公司 java监控服务器端口是否存在 南京网络安全专业 数据库压缩技术的性能 曙光服务器虚拟化费用 河南北斗卫星时钟服务器云主机 做公众号要租服务器吗 辽宁电脑服务器机箱定做虚拟主机 数据库中的各种实现分析 华为h58m服务器u盘启动 如何查看连接到云服务器的ip 怎么能快速做出大型服务器 人口基础数据库是什么 福建3d相机软件开发 无线网络技术导论第三版试卷 怎么开设自己的我的世界服务器 丝路传说大唐盛世服务器 服务器和显示器连接显示无信号 互联网科技小分队 安卓软件开发教程张雪梅 网络安全与养成教育 网络安全系统的引言 午夜猎魂为什么老被踢出服务器 做软件开发的工资如何 东南大学研究生网络安全 网络安全机制包括和 程瑜琦 中国网络安全
0