自己写驱动直接编译进内核
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
驱动直接编译进内核zImage (用户自己定制的驱动程序添加方法)程序编写方式和模块编写一样。
A 修改Kconfig
B 修改Makefile
注:此处修改的Kconfig和Makefile都是相应功能文件下的文件!
以hello.c为例
1、把写好的驱动根据功能首先cp到相应的位置,比如hello.c就是个字符设备
驱动,就把它cp到/drivers/char/下面
2、配置Kconfig 进入到当前目录,就是drivers/char/下面,
通过修改kconfig来添加helloworld选项,修改的选项可通过
/device drivers/character devices/查看,选中的选项可通过.config查看。配置Kconfig 命令:vi drivers/char/Kconfig(在内核跟目录下)
在 character device configuration里面
按照相应规则添加配置选项,此处添加内容就是在配置菜单里面显示的选项:此处配置成
规则:(可以按照Kconfig里面已经有的选项规则来)
config HELLO_WORLD //驱动名字,这个名字会在.config体现和Makefile里面用此名字。
bool ’’hello_world_test” //此处的bool选项为两态,要么为y(选择),或者为n(不
选),或者可以是三态:tristate,或者为模块。这个地方
名字会在配置菜单里面体现。
depends on 。。。。。//所依赖的一些必须支持的上层选项,比如usb摄像头依
赖USB总线一样
default y //默认值为选中
3、查看配置结果make menuconfig ARCH=arm
状态就是默认值y,选中!
再看.config vi .config
注意书写规则,CONFIG_xxx=y,xxx就是在Kconfig里面的驱动名字
4、修改Makefile 命令:vi drivers/char/Makefile(在内核的根目录下)
此处规则:obj-$(CONFIG_XXXX) +=源程序名字.o
这个地方xxx用Kconfig里面的驱动名字,和.config里面保持一致,后面如果源文件是hello.c,此处就为hello.o。
5、重新编译内核,下载到开发板,查看开机启动过程,通过超级终端把数据抓下来可以看
到;
初始化成功。
注意:如果驱动程序被作为模块进行编写,所有编写进内核的驱动程序在系统启动的时候MODULE_INIT宏指定的函数会都被放在初始化调用段,内核启动的时候初始化调用段的所有函数都会被调用,且只会被调用一次,然后所占的内存被清空,如果被编译进内核的模块即使导出了也不能再被其他模块调用,调用会出现异常。如果没有编译进内核的话是可以调用的。