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

今天,我就来教大家写写最简单的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去看看效果,根据需求去配置就可以了。

时间: 2024-10-24 01:21:44

手把手教你写Kconfig---基于tiny4412开发板的相关文章

手把手教你写Kconfig---基于tiny4412开发板(增强版)

Kconfig怎么写的在上节就已经教大家写了. 这节我们来写写增强版的,因为Kconfig有太多太多可以配置的,所以这里我就不给出图片演示了,请参考上节的文章,再来看这节大家就会大彻大悟,然后自己去尝试吧. 基本上最常见的配置就是以下的这些. 文章链接如下: http://blog.csdn.net/morixinguan/article/details/54744237 在make menuconfig添加Kconfig配置简单的选项有很多的Kconfig组成./scripts/Kconfig

如何来实现一个Linux内核的系统调用(基于tiny4412开发板)

关于系统调用,相信学习过操作系统的同学应该都不陌生. 那么,什么是系统调用? 百度的权威解释如下: 点击打开链接 由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API).是应用程序同系统之间的接口.          那么我们编程实验过程中使用过哪些系统调用呢?          当我们要打开一个文件,对这个文件进行读写等操作,我们就需要使用open , read , write , lseek等基本的操

安卓修改上层UI界面默认显示为竖屏显示(基于tiny4412开发板)

在Android 5.0源代码根目录下: 找到 :famerawork/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java     +5022 将最后的:return Surface.ROTATION_0;改为return Surface.ROTATION_90;当然还有其它方向可以自由定制,可以自己改

安卓系统权限修改(基于tiny4412开发板)

在Android 5.0源代码根目录下: 找到system/extras/su/su.c下的main函数下的这段代码: 将其注释后重新编译即可. //安卓系统权限修改2017-1-26 yangyx--->change /* Until we have something better, only root and the shell can use su. */ /* myuid = getuid(); if (myuid != AID_ROOT && myuid != AID_S

手把手教你写Linux设备驱动---中断(一)(基于友善之臂4412开发板)

今天,我们要来实现一个基于tiny4412开发板上的最简本的按键中断驱动程序,那么,写这个程序之前,我们先来了解下Linux中断的基本知识. 在Linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,我们可以来看下4412上与板子上相连的按键. 下面这张电路图,也就是4412板子上按键的电路图和CPU的连接关系图: 我们明显可以看到,4个按键分别接在GPX3这几个引脚上,对应着引脚,接下来我们

手把手教你写Linux设备驱动---input子系统(三)--电容屏事件坐标读取(基于友善之臂4412开发板)

前面我们学习了鼠标是如何如何通过应用程序来读取事件和坐标值的,后面也写了一个简单的input系统的按键驱动程序. 博文如下,讲的内容非常清楚,给小白来入手当然是非常容易的: http://blog.csdn.net/morixinguan/article/details/69808832 这节,我们来学习一下触摸屏事件获取,然后上一个基于4412开发板ft5x0x型号的x,y坐标值读取,后面我们将从零开始实现这款触摸屏的驱动程序: 首先,我们要明白一个概念,触摸屏在input系统中是一类什么事件

手把手教你写回调函数

                                        手把手教你写回调函数       手把手教你写回调函数源代码   回调函数的主要功能就是提供统一的接口以及事件的通知.如果你是从事middleware,框架,提供API编程的,那么你肯定少不了要使用回调函数. 所谓提供统一接口或者事件的通知即:当发生某一事件或者出现某一个状态之后必定会进行某种操作.但是这个操作又不能写死,不同的环境不同的程序会有不同的实现,也就是说提供接口的人不想把逻辑写死,而是由调用接口的人来实现

比较详细的手把手教你写批处理(willsort题注版)第1/5页_DOS/BAT

另,建议Climbing兄取文不用拘泥于国内,此类技术文章,内外水平相差极大:与其修正国内只言片语,不如翻译国外优秀著述. -------------------------------------------------------- 标题:手把手教你写批处理-批处理的介绍 作者:佚名 编者:Climbing 题注:willsort 日期:2004-09-21 -------------------------------------------------------- 批处理的介绍 扩展名

手把手教你写Linux设备驱动---input子系统(二)--按键驱动实现(一)(基于友善之臂4412开发板)

在上一节里,我们用一个应用程序实现了鼠标的控制,并控制鼠标用相对位移不断的画一个正方形,感觉非常有意思,这一节,我们将通过一个简单按键实例来真正的实现一个input设备驱动程序. http://blog.csdn.net/morixinguan/article/details/69808832 在写Input驱动之前,我们要了解下这个结构体,在此,我们要包含相应的头文件: #include <linux/input.h> 我们在这个头文件中找到了以下结构体,它就是input设备的核心: //用