看一下内核的Makefile,Kconfig和.config文件之间的关系

来源:Baiwen Technology有大量的Linux内核源文件。

我不了解Makefile,Kconfig和.config之间的关系。

我不了解内核编译系统。

如果在编译和修改内核时遇到问题,我将无法开始。

知道如何配置内核,这些问题与Makefile,Kconfig,.config有关,下面简单介绍一下Makefile,Kconfig和.config。

希望能激发您的灵感。

三个功能:简单地说,去餐厅点餐:Kconfig是菜单,Makefile是方法,.config是您点的食物。

Makefile:文本文件,一种编译源文件的方法。

Kconfig:一个文本文件,内核的配置菜单。

.config:编译内核所基于的配置。

这三个语法:1. Makefile参考:linux-3.4.2 / drivers / Makefile功能:它用于定义将哪些内容编译为模块,哪些条件编译等。

顶层Makefile包含子目录Makefile。

(1)直接编译obj-y + = xxx.o表示xxx.o由xxx.c或xxx.s编译并直接编译到内核中。

(2)条件编译obj-$(CONFIG_HELLO)+ = xxx.o根据.config文件的CONFIG_XXX,确定是否将该文件编译到内核中。

(3)模块编译obj-m + = xxx.o表示xxx被编译为模块,即在执行make模块时将其编译。

2. Kconfig每个config菜单项都有一个类型定义:布尔类型,三态(内置,模块,已删除),字符串字符串,十六进制十六进制,整数。

功能:确定make menuconfig时显示的菜单项。

参考:linux-3.4.2 / drivers / leds / kconfig:config LEDS_S3C24XX三态“ Samsung S3C24XX GPIO LED的LED支持”;取决于LEDS_CLASS取决于ARCH_S3C24XX帮助该选项启用对连接到Samsung S3C24XX系列CPU(例如S3C2410和S3C2440)上的GPIO线的LED的支持。

LEDS_S3C24XX:配置选项的名称,前缀为“ CONFIG_”。

省略。

Tristate:指示该项目是被编程到内核还是模块中。

显示为:如果选择编译为内核模块,则将在.config中生成CONFIG_HELLO_MODULE = m的配置,如果选择Y,则将其直接编译到内核中,并使用CONFIG_HELLO_MODULE =的配置项y将在.config中生成。

Tristate之后的字符串是在make menuconfig期间显示的配置项目的名称。

bool:只能选择或不选择此类型。

它在make menuconfig中显示为[],这意味着它不能配置为模块。

Dependon:此选项取决于另一个选项。

仅选择从属项时,将出现在当前配置项目的提示消息,并将当前配置项可以被设置。

选择:反向依赖。

选择此选项时,将同时选择在选择之后定义的项目。

help:帮助信息。

目录层次结构迭代:Kconfig中有一个类似的语句:源“ drivers / usb / Kconfig”,用于包含(或嵌套)新的Kconfig文件,以便每个目录管理自己的配置内容,而不必编写所有文件这些配置在同一文件中,方便修改和管理。

3. .config参考:linux-3.4.2 / .config通过分析前两个文件,.config的含义非常清楚:内核编译参考文件,检查其中的内容以了解哪些驱动程序被编译到内核中。

有3种配置内核的方法(选择一种):(1)make menuconfig(2)make xxx_defconfig(3)直接修改.config注意:如果直接修改.config,它可能不会生效,因为某些配置可能具有依赖关系,Make将根据依赖关系检查规则,有时直接修改.config无效,因此不建议直接修改它。

上面的内容可能有点抽象,下面的示例说明了这一点:编写一个简单的入口函数以输出hello world的驱动程序并将其编译到内核中。

步骤:(1)在驱动程序目录中创建一个新的hello文件夹,该文件夹实现了hello.c,Makefile和Kconfig。

hello.c:#include #include #include static int first_drv_init(void)printk(" ------------------ hello world!--------- ----------&“;); return 0;} static void first_drv_exit(void){printk(“ ------------------退出hello world!------------- -------");} module_init(first_drv_init); module_exit(first_drv_exit); MODULE_LICENSE(“ GPL”);生成文件:obj-$(CONFIG_HELLO)+ = Hello.o Kconfig:配置HELLO三态“ Hello World for fengyuwuzu”;帮助fengyuwuzu的配置帮助HELLO确定名称:CONFIG_HELLO。

fengyuwuzu的Hello World:确定在make menuconfig中显示的名称(2)修改上层的Makefile和Kconfig(在Linux-3.4.2 / drivers下)

联系方式

KAMAYA(日本釜屋电机株式会社)成立于1957年10月15日,总部在日本的北海道,是一家国际知名的电子元件生产商,同其他日系企业一样,KAMAYA特别注重品质和客户的服务,在全世界范围内都设有工厂和分部。华科(华新科技股份有限公司)收购但独立运营。

查看详情

在线咨询