uboot2015.04配置、编译过程

转载地址:https://www.cnblogs.com/WMCH/articles/7738071.html

在此之前,我也只是学习了韦东山的课程,里面有讲解uboot2012版本和更早的一个版本。

工作中直接拿到的uboot是2015.04版的,配置过程跟原来完全不同。Makefile看起来也是一脸懵x

 

但看得出来uboot一直在学习内核的配置过程,现在都支持make menuconfig了。

还有一个投机取巧的办法,就是直接看更高版本的配置过程的讲解。或者直接找内核配置过程的讲解。

网上有一些2016版的讲解,但对于2015版的很少有。

 

对于详细的分析,我也不清楚,就不记录了。只是记录一下比较简单的东西。配置过程中生成的几个文件,涉及到Makefile的东西,就不写了,太复杂。

 

先把编译脚本文件发上来:

 

 

 

一.配置过程如下:

make menuconfig时可以修改配置项,这主要是Kconfig的功能,

然后最终的配置结果会保存在.config文件中。下次再执行make menuconfig时回去读取这个文件。

make distclean 会删除.config 

PS.

问:怎么生成的.config文件?

答:make xxx_config或者make menuconfig生成.config

另外飞凌的是根据include/configs/mx6dlsabre_common.h和include/configs/mx6dlsabre.h进行配置的更改的!即导致最后更改了.config文件。

可以通过cp  /configs/xx_defconfig  .config来使用这些配置模板 ,通过图形界面变更配置选项会自动更新到.config文件中 。

 

configs/xxx_defconfig是一些配置模版:

.config是配置之后生成的:

 

=y表示编进内核,=m表示编译成模块,=n表示不参与编译

 

 

二.编译过程:

make -j(cpu number) 的前期工作,四类文件。

<1>Makefile

<2>c源码

<3>/include/config/auto.conf

<4>include/generated/autoconf.h

当编译刚开始时,内核会根据.config自动生成 auto.conf 和 autoconf.h 这两个文件。

其中autoconf.h是供c源码使用(宏开关),而auto.conf供Makefile使用(是否被编译)。

auto.conf和.config内容很类似,都是下面这种格式:

CONFIG_CRC32=y

CONFIG_I2C_BOARDINFO=y

CONFIG_HAVE_AOUT=y

CONFIG_MINI6410_SD_CH0=y

 

autoconf.h有点不同,在.config中被定义为m/y的配置项在autoconf.h被define为1,在.config中被定义为n的配置项在autoconf.h被define为0。

它的格式如下:

#define CONFIG_TOUCHSCREEN_MINI6410 1

#define CONFIG_HAS_DMA 1

#define CONFIG_USB_SERIAL_VISOR 1

#define CONFIG_SCSI 1

。。。

3.分析Makefile

 

把整个内核的makefile分成三类:

<1>各级子目录makefile(每个子目录都有makefile)

<2>/arch/arm/Makefile(架构相关的makefile)

<3>顶层目录makefile(auto.conf和/arch/arm/Makefile被包含在其中:

include  include/config/auto.conf

和include $(srctree)/arch/$(SRCARCH)/Makefile)

随便打开一个子目录makefile,可以看到类似的内容:

obj-$(CONFIG_BFIN_JTAG_COMM)    += bfin_jtag_comm.o

obj-$(CONFIG_MVME147_SCC)       += generic_serial.o vme_scc.o

obj-$(CONFIG_MVME162_SCC)       += generic_serial.o vme_scc.o

obj-$(CONFIG_BVME6000_SCC)      += generic_serial.o vme_scc.o

obj-$(CONFIG_ROCKETPORT)        += rocket.o

。。。

很显然,

在auto.conf中CONFIG_XXX=y,对应的源码文件会被Makefile编译进内核;

在auto.conf中CONFIG_XXX=m,对应的源码文件会被Makefile编译成模块;

在auto.conf中CONFIG_XXX=n,对应的源码文件不会被makefile编译;

 

 

后略,本来以为自己搞明白了,发现也只是很肤浅的部分。仅仅记录一下吧,做个纪念。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值