如何将驱动添加进内核

如何将驱动添加进内核,第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)+=bq27501.o 此时,构建系统运行就将会进入 bq27501/ 目录下,并且将bq27501.c 编译为 bq27501.o 3. 在/bq27501下面新建Kconfig文件。添加代码: menu "bq27501 driver" config BQ27501 tristate"BQ27501" default y ---help--- Say 'Y' here, it will be compiled into thekernelIf you choose 'M', it will be compiled into a module named asbq27501.ko. 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"

如何把设备驱动文件添加到Linux内核编译选项配置的menuconfig中:

【目的】

把一个字符设备驱动文件,添加到内核中,希望编译成模块,而非build-in。

【具体步骤】

1.首先保证已经有驱动源文件了:as352x_afe_charger.c

放在和其他你所要添加的模块放在一个目录下,此处是drivers\i2c\chips下。

2.在drivers\i2c\chips\makefile中,添加:

obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_charger.o

3.在drivers\i2c\chips\Kconfig

中,添加如下内容:

---------------------无敌分割线-------------------------

config AS352X_AFE_CHG

tristate "AS352X AFE Charger Driver"

depends on I2C_AS352X &&AS352X_AFE

help

If you say yes here you get support for AS352X AFE Charger.

This driver can also be built as a module. If so, the module

will be called AS352X AFE Charger.

---------------------无敌分割线-------------------------

解释如下:

(1)AS352X_AFE_CHG是自己定义的名字,当然要尽量保证有意义。

同时,你会注意到,在上面的makefile中添加的

obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_charger.o

中的CONFIG_AS352X_AFE_CHG,是CONFIG_加上我们在kconfig下写的config变量。

这两个要匹配,才能实现你在menconfig定义的结果,传递到makefile中,

以便决定编译的时候是如何编译:不编译/编译进内核/编译成模块

(2)tristate 表示我此处添加的模块,可以

在make ARCH=arm menuconfig中看到的,选择之后:

* 编译到内核中

M 编译成模块,即生成XXX.ko

不选中,就不编译该文件

(3)depends on I2C_AS352X &&AS352X_AFE

是前面自己找到的,表示此编译选项只有当I2C_AS352X 和AS352X_AFE都选中,才会出现。

当然,如果此模块不依赖于其他模块,则不需要加上这个depends on了。

【附录】

1.如果设置成M,module模式,则要用

make ARCH=arm

编译出as352x_afe_charger.ko

make ARCH=arm uImage

只能编译内核,而不编译模块。


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

原文地址: https://outofmemory.cn/bake/11628185.html

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

发表评论

登录后才能评论

评论列表(0条)

保存