kconfig语法

前言

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镜像文件中
                菜单选项   ==========> 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

kconfig语法_第1张图片

 (3)添加Makefile文件

打开char文件夹中的Makefile文件 :  vi Makefile

obj-$(CONFIG_LED_DRIVER)+=fsmp157a_led.o

 kconfig语法_第2张图片

 (4)查看是否添加成功

在linux内核源码目录下,执行make menuconfig
     Device Drivers  ---> 对应driver文件(菜单)
            Character devices  --->  对应char文件(菜单)
                 [*] led driver --->刚刚添加的菜单选项

kconfig语法_第3张图片

 (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.成功结果:灯被点亮

你可能感兴趣的:(驱动开发,linux)