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相关推荐

  1. linux config文件夹,[问题] .config文件在ubuntu的哪个文件夹中

    1. 我的Makefile如下 #设置为您的内核树 内核= / home / linux #获取Linux体系结构. 需要找到适合CFLAGS的包含文件 ARCH = $(shell uname -m ...

  2. 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 ...

  3. linux config

    目标定义是Kbuild Makefile的主要部分,也是核心部分.主要是定义了要编 译的文件,所有的选项,以及到哪些子目录去执行递归操作. 最简单的Kbuild makefile 只包含一行: 例子: ...

  4. linux内核seq_file接口

    seq相关头文件linux/seq_file.h,seq相关函数的实现在fs/seq_file.c.seq函数最早是在2001年就引入了,但以前内核中一直用得不多,而到了2.6内核后,许多/proc的 ...

  5. linux更新驱动脚本,编写Linux驱动常见错误(不断更新)!

    工作中遇到的编写Linux驱动的常见错误和注意事项整理,将不断更新. 问题1.驱动的init函数声明错误 出错: [root@localhost]# insmod phyinfo.ko insmod: ...

  6. Linux挂载NTFS分区方法

    Linux挂载NTFS分区方法 网上资料很多, 目前网上有很多介绍在linux下mount windows NTFS的文章,说的都是重新编译内核,加入对NTFS分区的支持.但是对于一个刚刚接触linu ...

  7. linux c 各头文件作用总结

    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...

  8. windows linux C/C++获取操作系统、CPU、内存信息、硬盘、IP和MAC

    Windows 操作系统和内存信息在windows下通过系统的API来获取,CPU信息则需要需要通过底层CPUID指令取得 代码: #include <iostream> #include ...

  9. linux注册硬盘中断,基于Linux底层硬盘中断辅助代码的分析与设计

    #include #include "blk.h" #define MAJOR_NR 3 #define CMOS_READ(addr) ({outb_p(0x80|addr,0x ...

最新文章

  1. 智慧解析第12集:老板心理学
  2. 高性能网站建设的14个原则
  3. jQuery框架学习第一天:开始认识jQuery
  4. 线性表的顺序存储——顺序存储结构的抽象实现
  5. Chromium浏览器之渲染引擎Blink
  6. java mongo 获取所有数据库_Spring Batch —从XML读取并写入Mongo
  7. docker搭建pxc集群
  8. nodejs路由控制图文混排
  9. php 微信获取code,微信网页授权接口为什么获取不到code(已解决)
  10. 3月第一周中国五大顶级域名增6万 美国增1.8万
  11. psql执行sql的方式及一些基本命令
  12. 线性筛法求质数分解、欧拉函数
  13. 新荣耀员工现金补偿最高可拿 N+5;天津立法禁止采集人脸识别信息;IntelliJ IDEA 新版发布|极客头条...
  14. CSS3 transform 旋转、偏移、缩放属性,CSS3 filter 滤镜,实现图像特效
  15. Oracle性能优化求生指南 Oracle数据库专家Guy Harrison权威著作
  16. C语言---编译器、编辑器
  17. 塔防java_塔防游戏--java游戏
  18. java encapsulation_Java Encapsulation vs Abstraction
  19. 经典基础教程---Programming TCP/IP Windows Sockets in C++
  20. 数据库中平凡函数和非平凡函数,完全函数依赖和部分函数

热门文章

  1. MTI雷达原理的学习
  2. 利用busybox, extlinux 在工控机CompactFlash(CF卡)上构建Linux系统(下)
  3. php mt4,2020最新Thinkphp5.0版微盘|微交易源码|MT4+外汇+贵金属交易 PHP整站源码
  4. mysql 归档日志_归档日志管理
  5. linux统计一个文本文件包含多少行,linux小计,统计文件中包含指定字符串的行数...
  6. Drupal 主题系统( Drupal theme)(1)
  7. pb编译机器码不成功的问题
  8. 2022-11-17 更高效的Cascades优化器 - Columbia Query Optimizer
  9. python随机密码,并修改windows指定帐号密码
  10. 0x79B2A261 (ucrtbased.dll) (Project4.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x00A41023 时发生访问冲突。