UBOOT的Makefile分析

 

本文参照的是ITOP4412开发板的uboot。

 

UBOOT与系统移植之UBOOT 主Makefile分析

从24行到32行是uboot的版本。生成的版本信息就在第34行的那个文件当中version_autogenerated.h当中 

查看这个文件可以看到

UBOOT与系统移植之UBOOT 主Makefile分析

这个是我们自己可以修改的。

第33行和34行的TIMESTAMP_FILE 和VERSION_FILE是在编译的时候自动生成的

第36行到43行得到的是电脑的架构

第45行到46行得到的是电脑的操作系统

UBOOT与系统移植之UBOOT 主Makefile分析

分别运行上面的shell命令可得到结果

UBOOT与系统移植之UBOOT 主Makefile分析

UBOOT与系统移植之UBOOT 主Makefile分析

接下来的49到51行就是得到你使用的shell

 

UBOOT与系统移植之UBOOT 主Makefile分析

最后在53行导出环境变量 HOSTARCH HOSTOS SHELL。

56行定义一个变量VENDOR

在60行到64行就是进行的静默编译。就是不将后台打印信息打印出来。

UBOOT与系统移植之UBOOT 主Makefile分析

 

 

接下来的88行到92行,编译时的输出参数

然后94到95行是将saved-output目录等于当前目录。

97到109行可以看出是在当初环境变量TOPDIR SRCTREE OBJTREE
可知他们都是等于当前目录

第111到112行是将MKCONFIG设置为当前目录下的mkconfig,然后导出MKCONFIG

第114到117行在SRCTREE 和OBJTREE不相等的情况下导出环境变量REMOTE_BUILD

第122当128行也是导出环境变量obj src

UBOOT与系统移植之UBOOT 主Makefile分析

 

第136到140行不用管,是powerpc的

UBOOT与系统移植之UBOOT 主Makefile分析

第145到147行取出预编译的宏。我们来看看这个目录是什么内容

UBOOT与系统移植之UBOOT 主Makefile分析

 

用vim看下autoconf.mk文件:

 

UBOOT与系统移植之UBOOT 主Makefile分析

可以看到上面有很多CONFIG_XXXX开头的宏,可以理解成变量。这些宏变量会影响我们编译的走向(原理是条件编译哈)

这个文件不是凭空产生的,也是由某些原材料产生的,我用的是4412的开发板,就到include/configs/目录下找到itop-4412-android.h

对比一下CONFIG_SYS_MALLOC_LEN两个都一样

UBOOT与系统移植之UBOOT 主Makefile分析

然后CONFIG_MMC也可以找到

UBOOT与系统移植之UBOOT 主Makefile分析

再看一下autoconf.mk.dep

UBOOT与系统移植之UBOOT 主Makefile分析

这些都是编译时包含的头文件

第150行到151行就是包含include目录下的config.mk文件

UBOOT与系统移植之UBOOT 主Makefile分析

打开这个文件可以看到

UBOOT与系统移植之UBOOT 主Makefile分析

里面的内容就是这些ARCH CPU BOARD VENDOR SOC CORE内容

之后将这些内容导出到环境变量当中,这5个环境变量后面会用到的。先放在这里

之后的153到200行就是在配置编译器了

UBOOT与系统移植之UBOOT 主Makefile分析

UBOOT与系统移植之UBOOT 主Makefile分析

我们关注的是160到165行。

203行包含当前目录下的config.mk文件。

UBOOT与系统移植之UBOOT 主Makefile分析

第206行到217行看英文注释,可知start必须先启动。

UBOOT与系统移植之UBOOT 主Makefile分析

之后的都是在包含各种库

UBOOT与系统移植之UBOOT 主Makefile分析

UBOOT与系统移植之UBOOT 主Makefile分析

UBOOT与系统移植之UBOOT 主Makefile分析

 

UBOOT与系统移植之UBOOT 主Makefile分析

 

第331行

ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND)
第332行

all依赖于 ALL,所以可知需要u-boot.bin 

再看u-boot.bin

他又依赖于u-boot

UBOOT与系统移植之UBOOT 主Makefile分析

 

UBOOT与系统移植之UBOOT 主Makefile分析

u-boot又依赖于u-boot.lds 和 GEN_UBOOT

看到GEN_UBOOT

UBOOT与系统移植之UBOOT 主Makefile分析

 

今天就到这里,明晚结合编译出来的信息专门分析上面还没有分析的。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

接着更新

现编译一下脚本。得到uboot.bin,然后我们分析一下他的输出信息

 

 

UNDEF_SYM=`/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-objdump -x board/samsung/smdkc210/libsmdkc210.a lib_generic/libgeneric.a lib_generic/lzma/liblzma.a lib_generic/lzo/liblzo.a cpu/arm_cortexa9/libarm_cortexa9.a cpu/arm_cortexa9/s5pc210/libs5pc210.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a fs/yaffs2/libyaffs2.a fs/ubifs/libubifs.a net/libnet.a disk/libdisk.a drivers/bios_emulator/libatibiosemu.a drivers/block/libblock.a drivers/dma/libdma.a drivers/fpga/libfpga.a drivers/gpio/libgpio.a drivers/hwmon/libhwmon.a drivers/i2c/libi2c.a drivers/input/libinput.a drivers/misc/libmisc.a drivers/mmc/libmmc.a drivers/mtd/libmtd.a drivers/mtd/nand/libnand.a drivers/mtd/onenand/libonenand.a drivers/mtd/ubi/libubi.a drivers/mtd/spi/libspi_flash.a drivers/net/libnet.a drivers/net/phy/libphy.a drivers/pci/libpci.a drivers/pcmcia/libpcmcia.a drivers/power/libpower.a drivers/spi/libspi.a drivers/rtc/librtc.a drivers/serial/libserial.a drivers/twserial/libtws.a drivers/usb/gadget/libusb_gadget.a drivers/usb/host/libusb_host.a drivers/usb/musb/libusb_musb.a drivers/usb/phy/libusb_phy.a drivers/video/libvideo.a drivers/watchdog/libwatchdog.a common/libcommon.a libfdt/libfdt.a api/libapi.a post/libpost.a | sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`; cd /home/topeet/android4.0/iTop4412_uboot && /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ld -Bstatic -T u-boot.lds  -Ttext 0xc3e00000 $UNDEF_SYM cpu/arm_cortexa9/start.o --start-group lib_generic/libgeneric.a lib_generic/lzma/liblzma.a lib_generic/lzo/liblzo.a cpu/arm_cortexa9/libarm_cortexa9.a cpu/arm_cortexa9/s5pc210/libs5pc210.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a fs/yaffs2/libyaffs2.a fs/ubifs/libubifs.a net/libnet.a disk/libdisk.a drivers/bios_emulator/libatibiosemu.a drivers/block/libblock.a drivers/dma/libdma.a drivers/fpga/libfpga.a drivers/gpio/libgpio.a drivers/hwmon/libhwmon.a drivers/i2c/libi2c.a drivers/input/libinput.a drivers/misc/libmisc.a drivers/mmc/libmmc.a drivers/mtd/libmtd.a drivers/mtd/nand/libnand.a drivers/mtd/onenand/libonenand.a drivers/mtd/ubi/libubi.a drivers/mtd/spi/libspi_flash.a drivers/net/libnet.a drivers/net/phy/libphy.a drivers/pci/libpci.a drivers/pcmcia/libpcmcia.a drivers/power/libpower.a drivers/spi/libspi.a drivers/rtc/librtc.a drivers/serial/libserial.a drivers/twserial/libtws.a drivers/usb/gadget/libusb_gadget.a drivers/usb/host/libusb_host.a drivers/usb/musb/libusb_musb.a drivers/usb/phy/libusb_phy.a drivers/video/libvideo.a drivers/watchdog/libwatchdog.a common/libcommon.a libfdt/libfdt.a api/libapi.a post/libpost.a board/samsung/smdkc210/libsmdkc210.a --end-group /home/topeet/android4.0/iTop4412_uboot/lib_arm/eabi_compat.o -L /usr/local/arm/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1 -lgcc -Map u-boot.map -o u-boot

 

可以看到有很多.a的文件,这些文件就是一些依赖,这些依赖是在哪里定义和使用的呢。

看上面的第221-369行。

 

拿第226行的依赖来分析

UBOOT与系统移植之UBOOT 主Makefile分析

这里用到了我们之前导出的信息,CPU,这个导出信息在include/config.mk文件中

就使用到了CPU ,可以看出,这里的cpu就是arm_cortexa9 ,分析可知,必然有cpu/arm_cortexa9/libarm_cortexa9.a文件。

发现上面果然有这个文件,那些依赖输出的都输出了。

仔细看一下输出是不是和下面的很像,只是进行了变量的替换而已,才打印出的一堆东西

 

UBOOT与系统移植之UBOOT 主Makefile分析

 

将上面的输出信息简化一下,可得

 

UNDEF_SYM=`gcc-xx  -x lib*.a ....... | sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`  cd /home/topeet/android4.0/iTop4412_uboot && /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ld -Bstatic -T u-boot.lds  -Ttext 0xc3e00000 $UNDEF_SYM   --start-group lib*.a............... --end-group /home/topeet/android4.0/iTop4412_uboot/lib_arm/eabi_compat.o -L /usr/local/arm/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1 -lgcc -Map u-boot.map -o u-boot

一定要学会分析,学会展开。

上面就得到了这些信息。

晚上我们将分析uboot.lds这个文件。

相关文章: