手把手教你写Kconfig---基于tiny4412开发板

简介: 今天,我就来教大家写写最简单的Kconfig,什么是Kconfig?我们配置过的信息最终会在这以下的两个文件中找到。这个文件会被.c包含include/generated/autoconf.

今天,我就来教大家写写最简单的Kconfig,什么是Kconfig?

我们配置过的信息最终会在这以下的两个文件中找到。


这个文件会被.c包含

include/generated/autoconf.h 

这个autoconf.h中对应的就是一些宏,打开看看就明白了 

这个文件根据.config生成,而.config是根据make menuconfig来进行生成,内核中的makefile包含了这个文件
inlcude/config/auto.conf   


简单的说吧,它是一个Linux驱动的配置文件,配置什么东西呢?在linux设备驱动中,我们写的驱动程序最终会加入到内核的Makefile中进行编译,那么具体要编译成什么呢?要编译成.o文件还是.ko文件,还是不编译?

由那个命令来进行配置呢?

那就是make menuconfig

在这个menuconfig中,有很多菜单,其实,那些就是通过Kconfig一个一个加进去的。

如图所示:


那么如何来写这样的一个配置选项呢?

我还是以上一节手把手教大家学第一个例程,在其中添加一个Kconfig来进行说明。

在linux内核源代码drivers目录下创建一个4412_driver的目录:

然后进到这个目录下,创建hello_kernel.c ,  Makefile , Kconfig 这三个文件。

hello_kernel.c代码如下:

#include <linux/kernel.h>
#include <linux/module.h>

static int __init hello_init(void)
{
    printk("Hello, kenerl installed !\n");
    return 0;
}

static void __exit hello_cleanup(void)
{
    printk("Good-bye, removed!\n");
}

module_init(hello_init);
module_exit(hello_cleanup);

MODULE_LICENSE("GPL");
Makefile如下:

obj-$(CONFIG_HELLO_KERNEL) += hello_kernel.o

Kconfig如下:

menu "4412_driver"
     config HELLO_KERNEL
          bool "hello_kernel"
          default n
  	  help
	  if you select , you can use it

endmenu
这里要说说参数,menu是什么?menu就是只这个配置选项中的菜单:

config表示要配置的参数

bool表示提示配置这个选项

default表示默认配置,有y,n,后面还会有模块

help表示帮助,help下面的字符串表示提示的信息,可以自由添加

配置最终结果如图所示:

我们回车进去,看到:

这时候我们按下空格键就打上*会对这个我们刚刚写的驱动进行配置,配置完毕,我们就可以开始编译linux内核了;

编译中,我们看到内核已经将我们的选项进行了配置:

编译完成,将在arch/arm/boot/zImage这个内核镜像下载入开发板:

然后启动开发板,就可以在串口中看到打印信息了:

我们在这里看到,3.670133秒的时候,打印了Hello,kernel  installed ! 也就是.c文件里的字符串。

关于Kconfig配置还有很多,说到底也不用去记,因为内核中有很多个Kconfig,我们可以打开看看去多尝试尝试,然后make menuconfig去看看效果,根据需求去配置就可以了。




目录
相关文章
|
Linux 网络安全 开发工具
|
12月前
|
搜索推荐 Java UED
SpringBoot 自定义启动画面:打造个性化应用启动体验
【10月更文挑战第7天】在软件开发中,细节往往能够体现一个团队的专业性和对用户体验的关注。SpringBoot作为快速构建Spring应用的框架,其简洁的启动流程和强大的功能深受开发者喜爱。然而,默认的启动画面可能略显单调,无法充分展示应用的特色或品牌。本文将详细介绍如何为SpringBoot应用自定义启动画面,让应用在启动时就能给人留下深刻印象。
318 1
|
12月前
|
SQL 搜索推荐 关系型数据库
MySQL 如何实现 ORDER BY 排序?
本文详细解析了MySQL中`ORDER BY`的实现原理及优化方法。通过解析与优化、执行及多种优化技术,如索引利用、内存排序、外部排序等,帮助你提升排序性能。了解其背后的机制,可显著优化查询效率。
633 4
|
11月前
|
C++
vs code常见的查找快捷键大全
【11月更文挑战第1天】本文介绍了 VS Code 中的基本查找和替换操作,包括在当前文件中查找(Ctrl + F)、查找替换(Ctrl + H)、查找下一个(F3)和查找上一个(Shift + F3)。还涵盖了在多个文件中查找(Ctrl + Shift + F)和查找替换(Ctrl + Shift + H),以及符号查找相关操作,如转到符号(Ctrl + T)和在文件中查找符号(Ctrl + Shift + O)。这些快捷键和功能帮助用户高效地管理和编辑代码。
1594 2
|
前端开发 JavaScript Java
招聘信息管理|基于SpringBoot招聘信息管理系统
招聘信息管理|基于SpringBoot招聘信息管理系统
538 1
|
监控 程序员 开发工具
如何规范Git提交-参考阿里云开发者社区
这篇文章分享了如何规范Git提交,介绍了commit message的格式规范,并通过webhook监控机制来确保代码提交的规范性,从而提高研发效率和代码维护质量。
|
存储 编解码 API
【解码与渲染 异常情况】深入解析视频中绿色竖线现象(一)
【解码与渲染 异常情况】深入解析视频中绿色竖线现象
521 6
【解码与渲染 异常情况】深入解析视频中绿色竖线现象(一)
【Qt 学习笔记】Qt的坐标体系
【Qt 学习笔记】Qt的坐标体系
443 0
|
分布式计算 Java API
Java 8带来了流处理与函数式编程等新特性,极大提升了开发效率
Java 8带来了流处理与函数式编程等新特性,极大提升了开发效率。流处理采用声明式编程模型,通过filter、map等操作简化数据集处理,提高代码可读性。Lambda表达式支持轻量级函数定义,配合Predicate、Function等接口,使函数式编程无缝融入Java。此外,Optional类及新日期时间API等增强功能,让开发者能更优雅地处理潜在错误,编写出更健壮的应用程序。
83 1