kconfig语法

这篇具有很好参考价值的文章主要介绍了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镜像文件中
                菜单选项<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

kconfig语法,驱动开发,linux

 (3)添加Makefile文件

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

obj-$(CONFIG_LED_DRIVER)+=fsmp157a_led.o

 kconfig语法,驱动开发,linux

 (4)查看是否添加成功

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

kconfig语法,驱动开发,linux

 (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.成功结果:灯被点亮文章来源地址https://www.toymoban.com/news/detail-630951.html

到了这里,关于kconfig语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • <Linux开发>驱动开发 -之-platform 驱动

    <Linux开发>驱动开发 -之-platform 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细记录(第一部分) <Linux开发> -之-系统移植 uboot移植过程详细记录(第二部分) <Linux开发>

    2024年02月12日
    浏览(57)
  • linux内核网络驱动框架(linux驱动开发篇)

    网络驱动的核心: 1、就是初始化 net_device 结构体中的各个成员变量, 2、然后将初始化完成以后的 net_device 注册到 Linux 内核中 1、网络设备(用net_device结构体) 2、网络设备的操作集( net_device_ops结构体 ) 3、sk_buff结构体 网络是分层的,对于应用层而言不用关系具体的底层是

    2023年04月08日
    浏览(75)
  • Linux驱动开发(十四)---USB驱动开发学习(键盘+鼠标)

    《Linux驱动开发(一)—环境搭建与hello world》 《Linux驱动开发(二)—驱动与设备的分离设计》 《Linux驱动开发(三)—设备树》 《Linux驱动开发(四)—树莓派内核编译》 《Linux驱动开发(五)—树莓派设备树配合驱动开发》 《Linux驱动开发(六)—树莓派配合硬件进行字

    2024年02月08日
    浏览(49)
  • Linux驱动开发:platform总线驱动

    目录 1、为什么需要platform总线 2、设备端:platform_device 2.1 platform_device结构体 2.2 注册 2.3 注销 3、驱动端:platform_driver 3.1 platform_driver结构体 3.2 注册 3.3 注销 4、总线 4.1 bus_type  4.2 platform_bus_type 5、匹配 5.1 匹配规则,platform_match 5.2 platform_device匹配流程 5.3 platform_driver匹配

    2024年02月03日
    浏览(41)
  • linux驱动的学习 & 驱动开发初识

    在学习驱动和其开发之前,首先要知道 所谓驱动,其对象就是设备 。 1.1 主设备号次设备号: 在Linux中,各种设备都以文件的形式存在 /dev目录下 ,称为 设备文件 。 最上层的应用程序可以打开,关闭,读写这些设备文件,从而完成对设备的操作 。 为了管理这些设备,系统

    2024年02月04日
    浏览(51)
  • Linux驱动开发12 IIC驱动

            I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等器件,在裸机篇已经对 I.MX6U 的 I2C 接口做了详细的讲解。本章我们来学习一下如何在 Linux 下开发 I2C 接口器件驱动,重点是学习 Linux 下的 I2C 驱动框架,按照指定的框架去编写 I2C 设备驱动。     

    2024年02月06日
    浏览(42)
  • 【Linux 驱动篇(二)】LED 驱动开发

    Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本章的 LED 灯驱动最终也是对 I.MX6ULL 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上,因此本章实验的重点就

    2024年02月12日
    浏览(59)
  • 【linux驱动】讲解linux驱动开发中的并发与并行,并且给出解决驱动开发中资源竞争的解决方案(下)

    开发环境:迅为3568开发板 + ubuntu18.04 前文【linux驱动】讲解linux驱动开发中的并发与并行,并且给出解决驱动开发中资源竞争的解决方案(上) 自旋锁(spin lock)是为了保护共享资源提出的一种 非阻塞锁机制 ,也就是说,如果某线程需要获取锁,但该锁已经被其他线程占用

    2024年02月19日
    浏览(45)
  • 正点原子嵌入式linux驱动开发——Linux WIFI驱动

    WIFI的使用已经很常见了,手机、平板、汽车等等,虽然可以使用有线网络,但是有时候很多设备存在布线困难的情况,此时WIFI就是一个不错的选择。 正点原子STM32MP1开发板支持USB和SDIO这两种接口的WIFI ,本章就来学习一下如何在STM32MP1开发板上使用USB和SDIO这两种WIFI。 正点原

    2024年02月05日
    浏览(68)
  • 正点原子嵌入式linux驱动开发——Linux CAN驱动

    CAN是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域 ,尤其是汽车领域,汽车上大量的传感器与模块都是通过CAN总线连接起来的。CAN总线目前是自动化领域发展的热点技术之一,由于其高可靠性,CAN总线目前广泛的应用于工业自动化、船舶、汽车、医疗和

    2024年02月06日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包