转自:http://blog.csdn.net/morixinguan/article/details/54744237

今天,我就来教大家写写最简单的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代码如下:

  1. #include <linux/kernel.h>
  2. #include <linux/module.h>
  3. static int __init hello_init(void)
  4. {
  5. printk("Hello, kenerl installed !\n");
  6. return 0;
  7. }
  8. static void __exit hello_cleanup(void)
  9. {
  10. printk("Good-bye, removed!\n");
  11. }
  12. module_init(hello_init);
  13. module_exit(hello_cleanup);
  14. MODULE_LICENSE("GPL");

Makefile如下:

obj-$(CONFIG_HELLO_KERNEL) += hello_kernel.o

Kconfig如下:

  1. menu "4412_driver"
  2. config HELLO_KERNEL
  3. bool "hello_kernel"
  4. default n
  5. help
  6. if you select , you can use it
  7. 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去看看效果,根据需求去配置就可以了。


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

  1. 基于uFUN开发板的心率计(三)Qt上位机的实现

    前言 上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值 ...

  2. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  3. Android开发之手把手教你写ButterKnife框架(三)

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了, ...

  4. Android开发之手把手教你写ButterKnife框架(二)

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52664112 本文出自:[余志强的博客] 上一篇博客Android开 ...

  5. 手把手教你写基于C++ Winsock的图片下载的网络爬虫

    手把手教你写基于C++ Winsock的图片下载的网络爬虫 先来说一下主要的技术点: 1. 输入起始网址,使用ssacnf函数解析出主机号和路径(仅处理http协议网址) 2. 使用socket套接字 ...

  6. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  7. [原创]手把手教你写网络爬虫(4):Scrapy入门

    手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...

  8. 编译 Linux 3.5 内核烧写 Android 4.2.2 到 Tiny4412 开发板

    . . . . . 昨天已经编译了 Android 4.2.2 的源码,详见<Ubuntu 14.04 编译 Android 4.2.2 for Tiny4412>一文. 今天我们继续剩下 ...

  9. 手把手教你写Kafka Streams程序

    本文从以下四个方面手把手教你写Kafka Streams程序: 一. 设置Maven项目 二. 编写第一个Streams应用程序:Pipe 三. 编写第二个Streams应用程序:Line Split ...

随机推荐

  1. python基础21 ------python基础之socket编程

    一.C/S架构和B/S架构的简介 略 二.osi七层模型 略 三.socket层 1.如图所示: socket层是存在于应用层和传输层直接抽象出来的一层. 2.socket层是什么? Socket是应 ...

  2. web开发工具网站

    配色 http://peise.net/tools/web/   http://retinaicon.com/   http://flattyshadow.com/     免费图片网站 https: ...

  3. Python map,reduce,filter,apply

    map(function, iterable, ...) map()函数接收两个参数,一个是函数,一个是可迭代的对象,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 基本等 ...

  4. Oracle数据库体系结构(6)数据库归档重做日志文件管理

    归档重做日志文件的概念和选择 Oracle数据库能够把已经写满了的重做日志文件保存到一个或多个指定的离线位置,这种保存的文件为归档重做日志文件.通常情况下一个归档重做日志时一个被LGWR写满的重做日志 ...

  5. 【leetcode刷题笔记】Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 题解:因为题 ...

  6. 深入理解ES6之迭代器与生成器

    迭代器 迭代器 iterator,在 Javascript 中,迭代器是一个对象(也可称作为迭代器对象),它提供了一个 next() 方法,用来返回迭代序列中的下一项. next 方法的定义,next ...

  7. python内置方法补充bin

    bin(x) 英文说明:Convert an integer number to a binary string. The result is a valid Python expression. I ...

  8. case 练习

    #!/bin/bash RED_COLOR="\E[1;31m" GREEN_COLOR="\E[1;32m" YELLOW_COLOR="\E[1; ...

  9. Bootstrap(一)标题

    Bootstrap标题样式进行了以下显著的优化重置: 1.重新设置了margin-top和margin-bottom的值,  h1~h3重置后的值都是20px:h4~h6重置后的值都是10px.2.所 ...

  10. iOS App被拒原因以及解决方案总结。

    Guideline 1.2 - Safety - User Generated Content Your app enables the display of user-generated conte ...