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

UBOOT的Makefile分析

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

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

查看这个文件可以看到

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

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

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

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

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

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

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

56行定义一个变量VENDOR

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

接下来的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

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

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

用vim看下autoconf.mk文件:

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

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

对比一下CONFIG_SYS_MALLOC_LEN两个都一样

然后CONFIG_MMC也可以找到

再看一下autoconf.mk.dep

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

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

打开这个文件可以看到

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

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

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

我们关注的是160到165行。

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

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

之后的都是在包含各种库

第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

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

看到GEN_UBOOT

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

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

接着更新

现编译一下脚本。得到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行的依赖来分析

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

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

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

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

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

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这个文件。

猜你喜欢

转载自blog.csdn.net/zaqxsw12580/article/details/82024918