如何将驱动添加进内核

如何将驱动添加进内核,第1张

一、 驱动程序编译进内核的步骤 在 linux 内核中增加程序需要完成以下三项工作: 1 将编写的源代码复制到 Linux 内核源代码的相应目录; 2 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项; 3 在目录的 Makefile 文件中增加对新源代码的编译条目。 bq27501驱动编译到内核中具体步骤如下: 1 先将驱动代码bq27501文件夹复制到 ti-davinci/drivers/ 目录下。 确定bq27501驱动模块应在内核源代码树中处于何处。 设备驱动程序存放在内核源码树根目录 drivers/ 的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。 a 字符设备存在于 drivers/char/ 目录下 b 块设备存放在 drivers/block/ 目录下 c USB 设备则存放在 drivers/usb/ 目录下。 注意: (1) 此处的文件组织规则并非绝对不变,例如: USB 设备也属于字符设备,也可以存放在 drivers/usb/ 目录下。 (2) 在 drivers/char/ 目录下,在该目录下同时存在大量的 C 源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。 (3) bq27501的驱动是属于字符设备驱动类别,虽然驱动相关的文件只有两个,但是为了方面查看,将相关文件放在了bq27501的文件夹中。在drivers/char/目录下增加新的设备过程比较简单,但是在drivers/下直接添加新的设备稍微复杂点。所以下面首先给出在drivers/下添加bq27501驱动的过程,然后再简单说明在drivers/char/目录下添加的过程。 2 在/bq27501下面新建一个Makefile文件。向里面添加代码: obj-$(CONFIG_BQ27501)+=bq27501o 此时,构建系统运行就将会进入 bq27501/ 目录下,并且将bq27501c 编译为 bq27501o 3 在/bq27501下面新建Kconfig文件。添加代码: menu "bq27501 driver" config BQ27501 tristate"BQ27501" default y ---help--- Say 'Y' here, it will be compiled into thekernel; If you choose 'M', it will be compiled into a module named asbq27501ko endmenu 注意:help中的文字不能加回车符,否则make menuconfig编译的时候会报错。 4 修改/drivers目录下的Kconfig文件,在endmenu之前添加一条语句‘source drivers/bq27501/Kconfig’ 对于驱动程序,Kconfig 通常和源代码处于同一目录。 若建立了一个新的目录,而且也希望 Kconfig 文件存在于该目录中的话,那么就必须在一个已存在的 Kconfig 文件中将它引入,需要用上面的语句将其挂接在 drivers 目录中的Kconfig 中。 5 修改/drivers目下Makefile文件,添加‘obj-$(CONFIG_BQ27501) +=bq27501/’。这行编译指令告诉模块构建系统在编译模块时需要进入 bq27501/ 子目录中。此时的驱动程序的编译取决于一个特殊配置 CONFIG_BQ27501 配置选项。 6 修改arch/arm目录下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加语句 source "drivers/bq27501/Kconfig"

一、手工加载测试

1、insmod

/key_testko

加载驱动模块到内核

2、cat

/proc/modules

|grep

key_test

查看key_test模块在内核中的地址,不加过滤器可以看到全部加载的模块。

3、lsmod

显示模块,这时可以看到所有的模块名字,后面跟的是主设备号和次设备号。

4、rmmod

key_test

把模块从内核里卸载。

二、动态加载

1、把key_testc源代码放到内核源代码的/drives/char/下,因为这是属字符型驱动,放在这编译到zImage中。

2、这时我们make

menuconfig

编译内核是看不到key_test这个选项的。我们把这个选项写到菜单里面才行。在内核源代码的/drives/char/下有一个Kconfig文件,打开

(1)

vi

Kconfig

加几行到里面:

config

ConFig_key_test

bool

"key

test"

//前面那个bool换成tristate就是支持模块化编译

上面句是在make

menuconfig时会出现key

test这个选项在drive/char子菜单下,bool前面是TAB键

------help----------

这句是出现在菜单选项下面的

This

key

test

help

这句是你的驱动的说明会出现在help里面

(2)在/drivers/char目录下的Makefile文件里加上一句:

obj-$(CONFIG_key_test)

+=

key_testo

上面这句是让Make时把key_test编译到内核中

(3)

make

menuconfig

把key_test选项选取上

(4)

make

zImage

生成zImage文件,重启动加载这个新编的内核。

3、lsmod就能看到key_test了,但是还不能用,没有接口,也就是/dev下面没有

4、mknod

/dev/key_test

c

121

0

这是创建设备到/dev下,使普通程序可以调用了,121是在源代码里定义的它的主设备号,0是次设备号。

5、cat

/dev/key_test

这是相当于open这个设备了,或者写一个程序直接调用open、write等函数。

fd=("/dev/key_test",ORW);

linux

编译安装驱动有两种,动态加载与静态加载

动态加载

一,编译,在指点内核树下编译,生成o文件或ko文件

二,将生成的o或ko文件拷到相应目录,一般是/lib/module/kernel下面

三,用insmod命令加载,用rmmod命令卸载

静态加载

静态加载主要就是编译内核。就是将编写好的驱动放进内核相应的目录下面。然后编译内核。然后运行编译好的内核。

以上就是关于如何将驱动添加进内核全部的内容,包括:如何将驱动添加进内核、高手进阶:Linux *** 作系统驱动编译与运行、linux下怎么编译安装驱动等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10050445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存