make menuconfig的配置原理

当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?

首先系统会读取arch/$ARCH/目录下的Kconfig文件生成整个配置界面选项(Kconfig是整个linux配置机制的核心)
内核默认会读取linux内核根目录下.config文件作为内核的默认选项。

针对板子的默认配置选项,存放在arch/$ARCH/configs下,对于arm来说就是arch/arm/configs文件夹,
我们通常先把默认配置选项,利用make xxxx_defconfig,复制到.config中。
然后,make menuconfig的时候,菜单中的每个选项就有了默认值了。

在配置界面中通过空格、esc、回车选择某些选项选中或者不选中,最后保存退出的时候,Linux内核会把新的选项更新到.config中,
我们可以把.config重命名为其它文件,例如boardname_defconfig保存起来。

那么他们如何跟makefile文件建立编译关系呢?
当你保存make menuconfig选项时,系统会除了会自动更新.config外,还会将所有的选项以宏的形式保存在Linux内核根目录下的 include/generated/autoconf.h文件下
内核中的源代码就都会包含这个.h文件,根据宏的定义情况进行条件编译。

当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,
类似于
obj-$(CONFIG_XXXX) += xxxx.o
例如:
当我们选择是否要编译s3c2410_ts.c这个文件时,makefile会根据配置宏CONFIG_TOUCHSCREEN_S3C2410来决定如何编译此文件,此宏是在Kconfig文件中定义,当我们配置完成后,会出现在.config及autconf中,
根据CONFIG_TOUCHSCREEN_S3C2410的值是y,n,m或者NULL,
s3c2410_ts.o文件被追加到了
obj-y,obj-n,obj-m,obj-这四个target中的某一个中去。
至此,我们就完成了整个linux内核的编译配置过程。

最后我们会发现,整个linux内核配置过程中,留给用户的接口其实只有各层Kconfig、makefile文件以及对应的源文件。
比如我们如果想要给内核增加一个功能,并且通过make menuconfig控制其声称过程
首先需要做的工作是:
1 修改对应目录下的Kconfig文件,按照Kconfig语法增加对应的选项;
2 修改对应目录下的makefile文件完成编译选项的添加;
3 执行make menuconfig选择编译进内核或者不编译进内核,或者编译为模块,.config文件和autoconf.h文件会自动生成;

+++++++++++++++++++++++++++++++++++++++++++++
arch/arm/configs下面,是各种defconfig文件。
执行时,make会扫描整个文件夹中以_defconfig结尾的文件,并为之创建同名的target。
这就是我们可以make xilinx_zynq_defconfig的原因。
我们如果需要创建一个属于我们自己的板子的配置文件,那么可以配置好以后,取名为xxxx_defconfig,并存放在arch/arm/configs/下面。
执行了make xilinx_zynq_defconfig之后,make抽取其中定义的宏,复制到.config文件中。在顶层文件夹中,会得到一个总体配置文件,.config。它里面定义了各种宏,后面会用到。

如果我们执行的是make menuconfig,那么make会利用menuconfig工具,和用户交互。menuconfig工具使用Kconfig文件描述各级菜单,以及各个配置宏的名称,可取值等。当用户选择完成后,menuconfig工具会将用户对各个配置宏的取值进行整理,输出到.config文件中。
所以,功能上,make menuconfig和make config是一样的,都是生成配置宏,并输出到.config中去。

我们如果要修改内核源码,
一方面是添加我们的模块代码,
另一方面,是修改配置系统的配置文件Kconfig,使我们的配置宏能够被config工具或者menuconfig工具输出到.config文件中去。
核心文件就是arch/arm/Kconfig。kconfig的总入口是arch/arm/kconfig,不是源码顶层的kconfig,入口一定是根据某款平台的。
还有就是修改各级makefile,使模块能够被裁剪或者收纳到内核中。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于你的第一个问题:i2c总线工作原理和MTK平台配置流程,我可以为你解答。 一、i2c总线工作原理 i2c(Inter-Integrated Circuit)总线是一种串行总线,它由两根线构成:SDA(数据线)和SCL(时钟线)。i2c总线采用主从模式进行通信,主设备负责发起通信请求,从设备则被动地响应请求。 i2c总线的数据传输是通过时钟信号进行同步的。在传输数据时,主设备向从设备发送一个起始信号,再发送从设备的地址和读写位,接着从设备响应确认信号,主设备继续发送数据,从设备再次响应确认信号,直到传输完成,主设备发送停止信号。 二、MTK平台配置流程 1. 打开内核配置菜单 在Linux内核源码树中,使用make menuconfig命令打开内核配置菜单。 2. 配置i2c驱动 在内核配置菜单中,选择Device Drivers -> I2C support -> I2C Hardware Bus support,打开i2c总线驱动的配置选项。 3. 配置MTK i2c控制器 在内核配置菜单中,选择Device Drivers -> I2C support -> I2C Hardware Bus support -> Mediatek I2C controller,打开MTK i2c控制器的配置选项。 4. 配置i2c设备驱动 在内核配置菜单中,选择Device Drivers -> I2C support -> I2C device interface,打开i2c设备驱动的配置选项。 5. 生成内核镜像和设备树 完成内核配置后,使用make命令生成内核镜像和设备树文件。 6. 加载内核模块 将内核镜像和设备树文件烧录到设备上,并加载i2c驱动模块,即可使用MTK平台的i2c总线进行通信。 以上就是关于i2c总线工作原理和MTK平台配置流程的简要介绍,希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值