将自己的驱动加到内核

驱动直接编译进内核uImage (用户自己定制的驱动程序添加方法)程序编写方式和模块编写一样。
A 修改Kconfig
B 修改Makefile
注:此处修改的Kconfig和Makefile都是相应功能文件下的文件!
以vk32xx.c为例
1、把写好的驱动根据功能首先cp到相应的位置,比如vk32xx.c就是个SPI驱动,就把它cp到/drivers/spi/下面
这里写图片描述
2、配置Kconfig 进入到当前目录,就是/drivers/spi/下面, 通过修改kconfig来添加vk32xx选项,修改的选项可通过make menuconfig /device drivers/spi devices/查看,
选中的选项可通过.config查看。
配置Kconfig
命令:vi drivers/spi/Kconfig(在内核跟目录下) 在 spi configuration里面 按照相应规则添加配置选项,
此处添加内容就是在配置菜单里面显示的选项:
将自己的驱动加到内核_第1张图片
此处配置成
规则:(可以按照Kconfig里面已经有的选项规则来)
config HELLO_WORLD //驱动名字,这个名字会在.config体现和Makefile里面用此名字。
bool ’’hello_world_test” //此处的bool选项为两态,要么为y(选择),或者为n(不 选),或者可以是三态:tristate,或者为模块。这个地方名字会在配置菜单里面体现。
depends on 。。。。。 //所依赖的一些必须支持的上层选项,比如usb摄像头依 赖USB总线一样
default y //默认值为选中
将自己的驱动加到内核_第2张图片
3、 查看配置结果 make menuconfig 状态就是默认值y,选中!

ARCH=arm
再看.config vi .config
这里写图片描述
注意书写规则,CONFIG_xxx=y,xxx就是在Kconfig里面的驱动名字

4、修改Makefile 命令:vi drivers/spi/Makefile(在内核的根目录下)
此处规则:obj-$(CONFIG_XXXX) +=源程序名字.o
这个地方xxx用Kconfig里面的驱动名字,和.config里面保持一致,后面如果源文件是vk32xx.c,此处就为vk32xx.o。
这里写图片描述
5、 重新编译内核,下载到开发板,查看开机启动过程,通过超级终端把数据抓下来可以看 到;

        初始化成功。 

注意:如果驱动程序被作为模块进行编写,所有编写进内核的驱动程序在系统启动的时候MODULE_INIT宏指定的函数会都被放在初始化调用段,
内核启动的时候初始化调用段的所有函数都会被调用,且只会被调用一次,然后所占的内存被清空,如果被编译进内核的模块即使导出了也不能再被其他模块调用,
调用会出现异常。如果没有编译进内核的话是可以调用的。

你可能感兴趣的:(linux,Linux驱动)