linux config
linux config
- 1、类型定义:
- 2、依赖型定义depends on或requires
- 3、帮助性定义
目标定义是Kbuild Makefile的主要部分,也是核心部分。主要是定义了要编 译的文件,所有的选项,以及到哪些子目录去执行递归操作。 最简单的Kbuild makefile 只包含一行: 例子: obj-y += foo.o 该例子告诉Kbuild在这目录里,有一个名为foo.o的目标文件。 如果foo.o要编译成一模块,那就要用obj-m了。所采用的形式如下: 例子: obj-$(CONFIG_FOO) += foo.o $(CONFIG_FOO)可以为y(编译进内核) 或m(编译成模块)。如果CONFIG_FOO不是y 和m,那么该文件就不会被编译联接了
内核源码树的目录下都有两个文件Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出菜单,
用户选择后保存到.config的内核配置文件中。
在内核编译时,主Makefile调用这个.config,就知道了用户的选择。
上面的内容说明了,Kconfig就是对应着内核的配置菜单。
如果要想添加新的驱动到内核的源码中,可以修改Kconfig,这样就可以选择这个驱动,如果想使这个驱动被编译,要修改Makefile
所以添加新的驱动时需要修改的文件有两种(注意不只是两个)
*Kconfig
*Makefile
要想知道怎么修改这两种文件,就要知道两种文件的语法结构
Kconfig
每个菜单都有一个关键字标识,最常见的就是config
语法:
config
symbol是一个新的标记的菜单项,options是在这个新的菜单项下的属性和选项
其中options部分有:
1、类型定义:
每个config菜单项都要有类型定义,bool布尔类型、 tristate三态:内建、模块、移除 string字符串、 hex十六进制、 integer整型
例如
config HELLO_MODULE
bool “hello test module”
bool类型的只能选中或不选中
tristate类型的菜单项多了编译成内核模块的选项,如果选择编译成内核模块,则会在.config中生成一个CONFIG_HELLO_MODULE=m的配置,
如果选择内建,就是直接编译成内核镜像,就会在.config中生成一个CONFIG_HELLO_MODULE=y的配置.
详细配置
n, 表示默认不编译
y,表示默认编译进内核
m,表示默认编译为模块
2、依赖型定义depends on或requires
指此菜单的出现与否依赖于另一个定义
config HELLO_MODULE
bool “hello test module”
depends on ARCH_PXA
这个例子表明HELLO_MODULE这个菜单项只对XScale处理器有效。
3、帮助性定义
只是增加帮助用关键字
help或者—help—
内核的Makefile
在linux2.6.x/Documentation/kbuild目录下有详细的介绍有关kernel makefile的知识。
内核的Makefile分为5个组成部分:
(1)Makefile 最顶层的Makefile
(2).config 内核的当前配置文件,编译时成为定层Makefile的一部分
(3)arch/$(ARCH)/Makefile 与体系结构相关的Makefile
(4)s/ Makefile.* 一些Makefile的通用规则 (这里的s指 “scripts”,by imjacob)
(5)kbuild Makefile 各级目录下的大概约500个文件,编译时根据上层Makefile传下来的宏定义和其他编译规则,将源代码编译成模块或者编入内核
顶层的Makefile文件读取 .config文件的内容,并总体上负责build内核和模块。Arch Makefile则提供补充体系结构相关的信息。
s目录下的Makefile文件包含了所有用来根据kbuild Makefile 构建内核所需的定义和规则。
(其中.config的内容是在make menuconfig的时候,通过Kconfig文件配置的结果。
举个例子:
假设想把自己写的一个flash的驱动程序加载到工程中,而且能够通过menuconfig配置内核时选择该驱动该怎么办呢?
可以分三步:
第一:将你写的hello.c 文件添加到/drivers/char/ hello目录下。
第二:修改/drivers/char/ hello目录下的kconfig文件:
config HELLO_MODULE
tristate “hello-tristate”
default y
help
this is help test
这样当make menuconfig时 ,将会出现 hello-tristate选项。
第三:修改该目录下makefile文件。
添加如下内容:
obj-$(CONFIG_HELLO_MODULE) += hello.o
修改上层目录/drivers/char中Kconfig文件
这样,当你运行make menucofnig时,你将发现 hello-tristate选项,如果你选择了此项。
该选择就会保存在.config文件中。体现为
这将是在hello/Makefile中
obj-$(CONFIG_HELLO_MODULE) += hello.o
等价为
obj-y += hello.o
系统在调用hello下的makefile 时,将会把 hello.o 加入到内核中。即可达到你的目的。
为测试Kconfig不同的类型:
Kconfig文件:
config HELLO_MODULE
tristate "hello-tristate"
default y
help this is help test config HELLO_MODULE2
bool "hello-bool"
default y
help this is help test config HELLO_MODULE3
string "helllo-string"
default "str-test" config HELLO_MODULE4
hex "hello-hex" config HELLO_MODULE5
int "hello-int"
linux config相关推荐
- linux config文件夹,[问题] .config文件在ubuntu的哪个文件夹中
1. 我的Makefile如下 #设置为您的内核树 内核= / home / linux #获取Linux体系结构. 需要找到适合CFLAGS的包含文件 ARCH = $(shell uname -m ...
- Linux: config: INET_DIAG_DESTROY INET_DIAG
文章目录 config INET_DIAG config INET_TCP_DIAG config INET_UDP_DIAG config INET_RAW_DIAG config INET_DIA ...
- linux config
目标定义是Kbuild Makefile的主要部分,也是核心部分.主要是定义了要编 译的文件,所有的选项,以及到哪些子目录去执行递归操作. 最简单的Kbuild makefile 只包含一行: 例子: ...
- linux内核seq_file接口
seq相关头文件linux/seq_file.h,seq相关函数的实现在fs/seq_file.c.seq函数最早是在2001年就引入了,但以前内核中一直用得不多,而到了2.6内核后,许多/proc的 ...
- linux更新驱动脚本,编写Linux驱动常见错误(不断更新)!
工作中遇到的编写Linux驱动的常见错误和注意事项整理,将不断更新. 问题1.驱动的init函数声明错误 出错: [root@localhost]# insmod phyinfo.ko insmod: ...
- Linux挂载NTFS分区方法
Linux挂载NTFS分区方法 网上资料很多, 目前网上有很多介绍在linux下mount windows NTFS的文章,说的都是重新编译内核,加入对NTFS分区的支持.但是对于一个刚刚接触linu ...
- linux c 各头文件作用总结
#include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...
- windows linux C/C++获取操作系统、CPU、内存信息、硬盘、IP和MAC
Windows 操作系统和内存信息在windows下通过系统的API来获取,CPU信息则需要需要通过底层CPUID指令取得 代码: #include <iostream> #include ...
- linux注册硬盘中断,基于Linux底层硬盘中断辅助代码的分析与设计
#include #include "blk.h" #define MAJOR_NR 3 #define CMOS_READ(addr) ({outb_p(0x80|addr,0x ...
最新文章
- 智慧解析第12集:老板心理学
- 高性能网站建设的14个原则
- jQuery框架学习第一天:开始认识jQuery
- 线性表的顺序存储——顺序存储结构的抽象实现
- Chromium浏览器之渲染引擎Blink
- java mongo 获取所有数据库_Spring Batch —从XML读取并写入Mongo
- docker搭建pxc集群
- nodejs路由控制图文混排
- php 微信获取code,微信网页授权接口为什么获取不到code(已解决)
- 3月第一周中国五大顶级域名增6万 美国增1.8万
- psql执行sql的方式及一些基本命令
- 线性筛法求质数分解、欧拉函数
- 新荣耀员工现金补偿最高可拿 N+5;天津立法禁止采集人脸识别信息;IntelliJ IDEA 新版发布|极客头条...
- CSS3 transform 旋转、偏移、缩放属性,CSS3 filter 滤镜,实现图像特效
- Oracle性能优化求生指南 Oracle数据库专家Guy Harrison权威著作
- C语言---编译器、编辑器
- 塔防java_塔防游戏--java游戏
- java encapsulation_Java Encapsulation vs Abstraction
- 经典基础教程---Programming TCP/IP Windows Sockets in C++
- 数据库中平凡函数和非平凡函数,完全函数依赖和部分函数
热门文章
- MTI雷达原理的学习
- 利用busybox, extlinux 在工控机CompactFlash(CF卡)上构建Linux系统(下)
- php mt4,2020最新Thinkphp5.0版微盘|微交易源码|MT4+外汇+贵金属交易 PHP整站源码
- mysql 归档日志_归档日志管理
- linux统计一个文本文件包含多少行,linux小计,统计文件中包含指定字符串的行数...
- Drupal 主题系统( Drupal theme)(1)
- pb编译机器码不成功的问题
- 2022-11-17 更高效的Cascades优化器 - Columbia Query Optimizer
- python随机密码,并修改windows指定帐号密码
- 0x79B2A261 (ucrtbased.dll) (Project4.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x00A41023 时发生访问冲突。