当前位置: 首页 > news >正文

手把手教你写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去看看效果,根据需求去配置就可以了。




相关文章:

  • jquery点击回到页面顶部方法
  • Python 爬虫-下载图片
  • 中文转拼音without CJK
  • Python爬虫之多进程爬取(以58同城二手市场为例)
  • webpack+react项目初体验——记录我的webpack环境配置
  • js-权威指南学习笔记19.2
  • Swift与OC混编
  • JavaWeb之文件上传、下载
  • HttpServletRequest和HttpServletResponse详解
  • shell面试难题
  • restlet入门搭建hello world
  • Vue初探
  • HTML/CSS常用的命名规则
  • Java googlecode JSON 解析示例
  • background-clip
  • 《Java编程思想》读书笔记-对象导论
  • 【技术性】Search知识
  • 2017-09-12 前端日报
  • es6
  • iOS | NSProxy
  • iOS 系统授权开发
  • laravel 用artisan创建自己的模板
  • leetcode98. Validate Binary Search Tree
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • React-flux杂记
  • TypeScript实现数据结构(一)栈,队列,链表
  • ubuntu 下nginx安装 并支持https协议
  • 初识 beanstalkd
  • 初探 Vue 生命周期和钩子函数
  • 从0到1:PostCSS 插件开发最佳实践
  • 前端技术周刊 2019-01-14:客户端存储
  • 我有几个粽子,和一个故事
  • 用Canvas画一棵二叉树
  • 说说我为什么看好Spring Cloud Alibaba
  • ​secrets --- 生成管理密码的安全随机数​
  • ![CDATA[ ]] 是什么东东
  • (70min)字节暑假实习二面(已挂)
  • (BFS)hdoj2377-Bus Pass
  • (C#)一个最简单的链表类
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Ruby)Ubuntu12.04安装Rails环境
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)pulsar安装在独立的docker中,python测试
  • (转) Android中ViewStub组件使用
  • ******之网络***——物理***
  • .bat批处理(一):@echo off
  • .net core控制台应用程序初识
  • .NET MVC之AOP
  • .Net Web项目创建比较不错的参考文章
  • .NET 发展历程
  • .NET 反射的使用
  • .Net 知识杂记
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据