前言
Kconfig文件:存放生成基于图形化界面内容
学习原因:Kconfig是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config
语法
1.概念:
主菜单:可以子菜单和菜单选项
子菜单:可以子子菜单和菜单选项
子子菜单:可以子子子菜单和菜单选项
菜单选项:只有选择执行内容
2.在linux内核源码目录下,打开Kconfig文件
1)关键字:mainmenu ==========> 主菜单
格式:mainmenu "主菜单名字"
例子:6 mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"
2)关键字:source ==========> 导入下一级目录Kconfig文件
格式:source "下一级目录/Kconfig"
例子:20 source "drivers/Kconfig"
3.在linux内核源码目录下,进入drivers目录下,打开Kconfig文件
1)关键字: menu..........endmenu ==========> 包含子菜单内容
2 menu "Device Drivers"
238 endmenu
61 source "drivers/char/Kconfig" ==========> 导入drivers/char/Kconfig
4.在linux内核源码目录下,进入drivers/char/目录下,打开Kconfig文件
1)config 菜单选项
2)菜单选项内容
tristate 三态 ==========> 菜单选项< >
菜单选项<*> ==========> 编译到uImage镜像文件中
菜单选项< > ==========> 不编译到uImage镜像文件中
菜单选项<M> ==========> linux内核源码,采用模块化方式进行编译
bool 两态 ==========> 菜单选项[ ]
菜单选项[*] ==========> 编译到uImage镜像文件中
菜单选项[ ] ==========> 不编译到uImage镜像文件中
3)depends on ==========> 依赖于某一个菜单选项
4) default n ==========> 默认不编译到uImage镜像文件中
default y ==========> 默认编译到uImage镜像文件中
default m ==========> 默认采用模块化方式进行编译
5)help ==========> 帮助信息
例子:添加点灯驱动
(1)移动驱动文件
把驱动文件(fsmp157a_led.c和fsmp157a_led.h)放在字符设备文件下
----->liunux-5.10.61(Linux内核文件)
------> drivers
------> char
(2)添加图形化界面内容
打开char文件夹中的Kconfig文件 : vi Kconfig
config LED_DRIVER
bool "led driver"
default y
help
this is led driver
(3)添加Makefile文件
打开char文件夹中的Makefile文件 : vi Makefile
obj-$(CONFIG_LED_DRIVER)+=fsmp157a_led.o
(4)查看是否添加成功
在linux内核源码目录下,执行make menuconfig
Device Drivers ---> 对应driver文件(菜单)
Character devices ---> 对应char文件(菜单)
[*] led driver --->刚刚添加的菜单选项
(5)编译测试
1.在linux内核顶层目录下编译
$time make -j4 uImage vmlinux dtbs LOADADDR=0xc2000000
2.将内核编译生成uImage镜像文件和设备树文件拷贝到~/tftpboot目录下
cp arch/arm/boot/uImage ~/tftpboot/
cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb ~/tftpboot/
3.将测试文件(fsmp157a_led_test.c和fsmp157a_led.h)拷贝~/nfs/rootfs目录,编译进行编译
arm-linux-gnueabihf-gcc fsmp157a_led_test.c
3.开发板上电,重新加载uImage和设备树镜像文件
4.在串口工具中执行生成的a.out文件
5.成功结果:灯被点亮