OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3853|回复: 2

笔记二 --如何将自己添加的源码编译进内核

[复制链接]

12

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2015-9-15
在线时间
49 小时
发表于 2021-7-30 13:49:44 | 显示全部楼层 |阅读模式
首先找到你项目的驱动源码位置

一般各大半导体厂商驱动源码的位置都处于根目录/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时是编译成模块,这个我们一般项目开发都不会用到,都是直接编译进内核。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1882
金钱
1882
注册时间
2021-4-16
在线时间
480 小时
发表于 2021-7-30 15:00:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

4

主题

831

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3601
金钱
3601
注册时间
2019-9-4
在线时间
841 小时
发表于 2021-7-30 15:18:59 | 显示全部楼层

谢谢分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 08:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表