中级会员
- 积分
- 422
- 金钱
- 422
- 注册时间
- 2015-9-15
- 在线时间
- 49 小时
|
首先找到你项目的驱动源码位置
一般各大半导体厂商驱动源码的位置都处于根目录/kernel/driver下,不同厂商可能有一些差别,不过总体区别不大,大不了全局搜driver这个目录,这里以Rockchip厂商的3326芯片为例。
驱动源码位置在/kernel/driver
先清楚你添加的驱动属于什么类型
这里我以添加一个温湿度传感器驱动为例讲解怎么添加驱动源码,传感器属于输入设备,所以应该放在driver/input目录下,一般我们直接在input目录下直接创建一个温湿度传感器的目录就可以了,如果你发现input目录下还有一个sensors目录,说明半导体厂商这里还做了分类、汇总,把传感器类型的输入设备都放在了这下面,那我们就得在sensors目录下添加温湿度传感器目录,如下:
Kconfig
makefile
tmp_ms5607.c
创建tmp_ms5607c Makefile Kconfig
这里的.h文件可有可无,如果你的驱动内容简单,需要声明的很少,直接放在.c文件也是可以的,另外三个文件是必须的。首先你要清楚,你添加的源码能编译进内核,就是为了你添加的.c文件能被编译到,分以下三个步骤:
1.在temperature目录下的Kconfig文件中增加新源代码对应项目的编译配置选项
如下为Kconfig中的内容
# SPDX-License-Identifier: GPL-2.0
#
# temperature sensor drivers configuration//参考其他驱动的Kconfig文件,只需要改动这一句说明
#
menuconfig TEMPERATURE_DEVICE//menuconfig对应的是一个目录是否被使能,这里即我们添加的temperature
bool "temperature sensor device support"//这个字符串是在make menuconfig中的说明,见上图所见
default n //默认不使能
if TEMPERATURE_DEVICE //如果该文件所处的目录被使能,则进入
config TMP_MS5607 //该宏决定tmp_ms5607.c是否被编译
bool "temperature sensor ms5607"//此字符串为make menuconfig中的说明,见下图
default n //默认不使能
endif
2.在你新添加的temperature目录的同级目录中,对Kconfig和Makefile做修改Kconfig中添加
source “drivers/input/sensors/temperature/Kconfig”
Makefile中添加
obj-$(CONFIG_TEMPERATURE_DEVICE) += temperature/
添加完这两句,然后把CONFIG_TEMPERATURE_DEVICE这个宏配置为y,你的temperature目录才会被编译到
具体怎么配置呢,有两种方法:
1.直接找到你项目所用的config文件,直接手动写
具体在哪个文件中配置CONFIG_TEMPERATURE_DEVICE为y呢,找不到的话,直接问你的同事,或者半导体厂商,不要在这种步骤上花费过多无用的时间。我这里的路径为/kernel/arch/arm/rockchip_linux_defconfig
CONFIG_TEMPERATURE_DEVICE=y
[color=rgba(0, 0, 0, 0.75)]2.在kernel目录下输入make menuconfig ,输入/,然后输入CONFIG_TEMPERATURE_DEVICE搜索
输入y,然后保存退出就可以了
这里建议用第一种方法,因为你make menuconfig设置的config文件可能并不是你项目编译时所用的config文件
到此,你新添加的temperature目录就可以被编译到了
3.在temperature目录下的Makefile文件中增加对新源代码的编译条目
如下为Makefile中的内容
# SPDX-License-Identifier: GPL-2.0
#
# temperature sensor drivers configuration//参考其他驱动Makefile内容,修改此句说明即可
#
obj-$(CONFIG_TMP_MS5607) += tmp_ms5607.o //这个宏便是上诉操作的目录
可以看到当CONFIG_TMP_MS5607为y时,即可编译tmp_ms5607.c,
也是有两种方法:
a.和配置CONFIG_TEMPERATURE_DEVICE一样,直接在config文件中添加,/kernel/arch/arm/rockchip_linux_defconfig
b.在kernel目录下输入make menuconfig,然后输入 /TMP_MS5607 可直接查询到这个宏的位置
总结:
上诉两个关键操作就是配置了TEMPERATURE_DEVICE和TMP_MS5607这两个宏为y,TEMPERATURE_DEVICE对应的就是temperature目录是否使能,TMP_MS5607对应的就是temperature目录下的驱动文件是否使能。另外配置的时候不止有y和n,还有一个值m,当输入m时是编译成模块,这个我们一般项目开发都不会用到,都是直接编译进内核。
|
|