自己写驱动直接编译进内核

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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宏指定的函数会都被放在初始化调用段,内核启动的时候初始化调用段的所有函数都会被调用,且只会被调用一次,然后所占的内存被清空,如果被编译进内核的模块即使导出了也不能再被其他模块调用,调用会出现异常。如果没有编译进内核的话是可以调用的。

相关文档
最新文档