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

2019-07-12 14:47发布

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_.*)/-u1/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_.*)/-u1/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这个文件。