内核的编译和移植

本文详细介绍了如何在Linux内核中通过Kconfig配置GPIOLed支持并管理模块编译,包括配置文件分析、驱动状态设置、依赖关系和Makefile的编写过程。还涉及了如何在char目录下创建模块并将其编译进内核或作为模块使用。
摘要由CSDN通过智能技术生成

内核的编译和移植

前期准备

以下是Kconfig中的一段代码:

source "drivers/redied/Kconfig"
config LED_4412
	tristate "Led Support for GPIO Led"
	depends on LEDS_CLASS
	help
	  OProfile is a profiling system capable of profiling the
	  whole system, include the kernel, kernel modules, libraries,
	  and applications.
      if unsure,say N.

代码分析

片段一:

source "drivers/redied/Kconfig"

包含drivers/redied路径下的驱动文件(Kconfig

片段二:

config LED_4412

配置选项的名称,全程为CONFIG_LED_4412

片段三:

tristate "Led Support for GPIO Led"

tristate表示驱动状态,有三种状态 分别为:把驱动编译成模块,把驱动编译成内核,不编译

Led Support for GPIO Ledmake menuconfig显示的名字

image-20220929170617693

与之对应的有bool分别是编译到内核,不编译

片段四:

depends on LEDS_CLASS

例:A depends on B 表示只有在选择了B的情况下才能选择A。

select :反向依赖,该选项被选中时,后面的定义也会被选中。

片段五:

help
	  OProfile is a profiling system capable of profiling the
	  whole system, include the kernel, kernel modules, libraries,
	  and applications.
      if unsure,say N.

帮助信息

代码编写

**1.**在linux内核文件夹中drivers/char路径下创建hello文件夹

将之前写的helloworld.c文件放到hello中

**2.**编写Kconfig文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNJAignL-1664509406844)(C:\Users\ianei\AppData\Roaming\Typora\typora-user-images\image-20220929173405378.png)]

**3.**编写Makefile文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G8Ym9vex-1664509406846)(C:\Users\ianei\AppData\Roaming\Typora\typora-user-images\image-20220929173533115.png)]

​ Makedfile中obj-y表示编译到内核中,obj-m表示编译到模块

​ obj-$(xxx)相当于obj-y

​ 比如定义 CONFIG_TEST=y

​ $(CONFIG_TEST)就是y

​ obj-$(CONFIG_TEST) 就是 obj-y

**4.**char路径下的Kconfig文件编写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ah2tXeC5-1664509406847)(C:\Users\ianei\AppData\Roaming\Typora\typora-user-images\image-20220929180613364.png)]

修改char路径下的Makefile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxO8i05q-1664509406848)(C:\Users\ianei\AppData\Roaming\Typora\typora-user-images\image-20220929182558839.png)]

将hello文件夹下的Kconfig包含进来

**5.**返回到linux内核 路径下打开make menuconfig,从以下路径找到hello world

image-20220929180808845 image-20220929180825990 image-20220929180859265

按空格键选择将hello world 模块编译进内核,

可以在此目录下的.config中用/HELLO搜索到CONFIG_HELLO=y

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INwrinuq-1664509406849)(C:\Users\ianei\AppData\Roaming\Typora\typora-user-images\image-20220929181048868.png)]

文件修改

**1.**在内核根目录下的编译脚本(create.sh)中有如下代码

image-20220929182924649

此代码表示,在编译时他会自动去arch/arm路径下找imx_v7_defconfig,而不会找根目录下的.config

所以需要将根目录下的.config改为imx_v7_defconfig并放到相应的文件夹下(arch/arm/configs)

原因;

​ 在make menuconfig中修改的hello world 的编译方式保存在了.config中。

步骤:

​ 1.先将编译文件清除

​ 2.修改make menuconfig 中hello world 模块的编译规则

​ 3.将arch/arm/configs文件夹下的imx_v7_defconfig改为其他名字

​ 4.将根目录下生成的.config文件复制到arch/arm/configs文件夹下,并命名为imx_v7_defconfig

​ 5.编译linux内核,在根目录下执行./creat.sh

编译完成后,在hello文件夹下会生成相应的.o文件,arch/arm/boot路径下会存放生成的zimage镜像文件,如果没有说明之前写的东西有错误

g文件复制到arch/arm/configs文件夹下,并命名为imx_v7_defconfig

​ 5.编译linux内核,在根目录下执行./creat.sh

编译完成后,在hello文件夹下会生成相应的.o文件,arch/arm/boot路径下会存放生成的zimage镜像文件,如果没有说明之前写的东西有错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值