BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #9565同步于 2010/10/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

U-boot最后链接选项和objcopy的选项分析

hman
2010/10/15镜像同步0 回复
下面这一整行是链接出u-boot文件的命令,这个u-boot是elf格式的。 UNDEF_SYM =`arm-linux-objdump -x lib_generic/libgeneric.a board/samsung/mini6410/libmini6410.a cpu/s3c64xx/libs3c64xx.a cpu/s3c64xx/s3c6410/libs3c6410.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 net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/onenand/libonenand.a drivers/sk98lin/libsk98lin.a post/libpost.a post/cpu/libcpu.a common/libcommon.a |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq `;\ cd /media/Study/Project/mini6410/Linux/u-boot-mini6410 && arm-linux-ld -Bstatic -T /media/Study/Project/mini6410/Linux/u-boot-mini6410/board/samsung/mini6410/u-boot.lds -Ttext 0xc7e00000 $UNDEF_SYM cpu/s3c64xx/start.o \ --start-group lib_generic/libgeneric.a board/samsung/mini6410/libmini6410.a cpu/s3c64xx/libs3c64xx.a cpu/s3c64xx/s3c6410/libs3c6410.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 net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/onenand/libonenand.a drivers/sk98lin/libsk98lin.a post/libpost.a post/cpu/libcpu.a common/libcommon.a --end-group -L /usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/armv4t -lgcc -Map u-boot.map -o u-boot 最开始的部分定义了一个变量UNDEF_SYM ,这个变量实际上就是把中间这一群的静态库里面__u_boot_cmd_开头的symbol都提取出来,并在每个的开头加上了-u,以备后用。 接下来就是执行arm-linux-ld 进行链接了。 -Bstatic 表示静态链接 -T u-boot.lds 表示使用u-boot.lds,linker script来链接 -Ttext 0xc7e00000 表示将text段,放到绝对地址为0xc7e00000的地方。话说这个的真正意义还不清楚。是说text段会load到这个地址? $UNDEF_SYM 是一串-u symbol的东东。用处是Force symbol to be entered in the output file as an undefined symbol,可惜我真没看懂。 --start-group --end-group 之间列出了所有的archives. 同一般的直接写archive不同在于,当search了一遍仍然有undefined reference的时候,会继续搜索。 -Map link map。 这个东东挺重要的,要再学习一下。 好了u-boot的elf格式已经出来了,但是这个文件是不能直接烧写到flash,来直接跳转的。因为这个时候还没有os呢。 arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin 这条命令生成的u-boot就是可以直接烧写的image了。 --gap-fill=0xff 指明了用0xff来填充section之间的空隙。 -O binary 输出可是是binary。话说这个binary到底算是什么格式,我也不是很清楚了。 貌似可以用objdump -i来查看支持的所有格式。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。