历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2018年04月15日 | TQ2440之uboot---4.分析u-boot Makefile 最后连接的过程

2018-04-15

1.最后生成u-boot的过程
以下是u-boot Makefile最后连接生成u-boot的过程

  1. UNDEF_SYM=`arm-linux-objdump -x lib_generic/libgeneric.a board/EmbedSky/libEmbedSky.a cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/jffs2/libjffs2.a net/libnet.a rtc/librtc.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/lcd/liblcd.a modules/usb.module modules/wince.module common/libcommon.a |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\


  2. cd /root/embed/opt/EmbedSky/u-boot-1.1.6 && arm-linux-ld -Bstatic -T /root/embed/opt/EmbedSky/u-boot-1.1.6/board/EmbedSky/u-boot.lds -Ttext 0x33D80000 $UNDEF_SYM cpu/arm920t/start.o \


  3. --start-group lib_generic/libgeneric.a board/EmbedSky/libEmbedSky.a cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/jffs2/libjffs2.a net/libnet.a rtc/librtc.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/lcd/liblcd.a modules/usb.module modules/wince.module common/libcommon.a --end-group -L /opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/gcc/arm-linux/3.4.5 -lgcc \


  4. -Map u-boot.map -o u-boot

a. UNDEF_SYM的作用

  1. 用objdump -x 列出所有库的头

  2.     用sed 将 __u_boot_cmd_.* 替换成 -u__u_boot_cmd_.*

  3.     sort| uniq 去掉重复的部分

  4. 所以执行后 UNDEF_SYM=

  5. -u__u_boot_cmd_autoscr

  6. …...

  7. -u__u_boot_cmd_test_zImage

  8. -u__u_boot_cmd_tftpboot

  9. -u__u_boot_cmd_usbslave

b. arm-linux-ld -Tu-boot.lds -Ttext 0x33D80000

  1. u-boot.lds 中有如下:

  2. . = 0x00000000;

  3. . = ALIGN(4);

  4. .text :

  5. {

  6. cpu/arm920t/start.o (.text)

  7. board/EmbedSky/boot_init.o (.text)

  8. *(.text)

  9. }

b.1虽然 u-boot.lds 是从0x00000000 开始,但是这儿明确的指定了 -Ttext 0x33D80000, 所以生成的u-boot的代码段是从0x33D80000开始的。
b.2 另外 UNDEF_SYM中的一系列的 -u__u_boot_cmd_.*提供给ld
但是还有一点不太明白的就是,为什么要这样做?
参考了这篇文章,对crifan的崇拜有如滔滔江水......
http://www.crifan.com/2010/02/27/detailed_analysis_of_the_make_uboot_final_compile_and_link_the_implementation_process/
以下引自crifan的《详细分析make uboot 最后的编译链接的具体执行过程 v2012-03-29》

  1. “-u symname

  2. ——————————

  3. Enter symname as an undefined symbol in the symbol table. This is useful for loading entirely from an archive library, since initially the symbol table is empty, and an unresolved reference is needed to force the loading of the first routine. The placement of this option on the command line is significant; it must be placed before the library that will define the symbol.

  4. —————————————————————————————————————-

  5. 总的意思,就是,在ld的时候,不定义,这些符号,即不定义__u_boot_cmd_asdebug,__u_boot_cmd_base等等这些符号,我的理解是,因为开始需要从某个库中载入其他的符号,而这个时候,还没有载入到那个包含此符号定义的库,所以,暂时先加入这个-u说明,先不定义这些符号,等到所有的库都加载完了,再去找这些符号的定义,此时已经加载完所有的库了,也就能找到这些符号的定义了。

  6. (F)接下来的,就是要ld的,那一堆的目标文件,库文件了:

  7. cpu/arm926ejs/start.o和

  8. –start-group lib_generic/libgeneric.a lib_generic/lzma/liblzma.a cpu/arm926ejs/libarm926ejs.a 。。。。。。 post/libpost.a board/ams/as3536/libas3536.a –end-group

  9. 关于–start-group和 –end-group的含义:

  10. -(archives)或者—start-group archives –end-group 参数中间的目标文件会被ld反复搜索,对相互交叉引用的目标文件很有用

  11. 所以,我的理解是,如果ld载入了一个库,发现该库中,有UNDF,未被定义的变量,有了这个参数的指示后,就会在这一堆.a和.o文件里面反复搜索,直至找到为止,否则,如果在已经加载的库中,找不到,就会报错。”


  12. 关于”–start-group和 –end-group”,又去找了相关资料:


  13. Linker order – GCC


  14. GCC: –start-group and –end-group command line options


  15. 得知确切的含义是:


  16. 链接器LD去load对应的库(lib,module)的时候,可能会遇到这些情况:


  17. (1)A库,引用了B库中funcInB(),但是先ld A库,导致找不到对应的funInB而链接报错


  18. (2)A库和B库,互相都包含对应所引用到的函数,即互相引用/循环引用,ld编译器会因为找不到A库中所引用的B库的中的函数(或者反过来B库引用A库中的函数)而报错。


  19. 此时,用”–start-group和 –end-group“,通知ld链接器,去在–start-group和–end-group中间的这些库函数,多花点时间,对于这些库,都从头到尾,多查几遍,去找找那些还没有找到的所引用的函数,是不是在另外的库中有这些函数,以此解决:


  20. (1)A库引用到了后来才加载的B库中的函数


  21. (2)解决循环引用


  22. 之类的问题。



推荐阅读

史海拾趣

DS-IMP公司的发展小趣事

DS-IMP公司在发展过程中,非常重视市场拓展和品牌建设。公司制定了详细的市场战略和营销计划,通过参加国内外展会、举办技术研讨会、开展产品推广活动等方式,不断提升品牌知名度和影响力。同时,公司还积极开拓国际市场,与多家国际知名企业建立了长期合作关系。这些努力使得公司的市场份额不断扩大,品牌影响力逐渐增强。

Appointech Inc公司的发展小趣事

Appointech Inc公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

Fronter Electronics Co Ltd公司的发展小趣事

Fronter电子成立于1991年,由一群对电子技术充满热情的创业者共同创立。在公司成立初期,Fronter电子专注于电子元件的代理与销售,通过引进国际知名品牌的产品,如SUNLORD、KDS等,迅速在行业内建立了初步的声誉。公司凭借敏锐的市场洞察力和高效的供应链管理,逐步在电子元器件市场中站稳脚跟。

Caltron Devices Ltd公司的发展小趣事

为了进一步提升公司的竞争力和影响力,Caltron Devices Ltd公司积极实施国际化战略。公司加强与国外同行的交流与合作,引进先进的技术和管理经验,不断提升自身的创新能力。同时,Caltron还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,成功打开了全球市场的大门。

China Semiconductor Corp公司的发展小趣事

随着公司实力的不断增强,CSC开始将目光投向海外市场。公司积极实施国际化战略,在海外设立研发中心和生产基地,拓展国际市场。同时,CSC也加强了与国际同行的交流与合作,吸收借鉴国际先进经验和技术,不断提升自身的国际竞争力。通过国际化布局和全球视野的拓展,CSC逐渐成为了国际半导体产业的重要一员。

这五个故事只是CSC公司发展历程中的一部分缩影,但它们却充分展示了CSC在电子行业中的崛起之路。从初创时期的艰辛与突破,到技术创新的不断突破,再到市场拓展与品牌建设、产业链整合与协同发展以及国际化布局与全球视野的拓展,每一个阶段都凝聚了CSC人的智慧和汗水。正是这些努力和付出,使得CSC在激烈的国际竞争中脱颖而出,成为了中国半导体产业的佼佼者。

ALPS公司的发展小趣事

随着公司的发展,CSC逐渐意识到技术创新是立足之本。于是,公司加大了研发投入,引进了一批高端人才,建立了完善的研发体系。通过不懈的努力,CSC在多个领域取得了重大突破,如高性能处理器、存储器等关键技术的研发,使公司在国际市场上逐渐获得了话语权。

问答坊 | AI 解惑

工欲善其事必先利其器—测试测量工具大搜索

测试测量的第一个主题活动,入门篇,测试测试工具大搜索。也欢迎大家说说自己的使用心得。 测试测量必备工具一:万用表 测试测量必备工具二:示波器 测试测量必备工具三:信号发生器 测试测量必备工具四:频谱仪…

查看全部问答>

无线通讯技术在工业自动化领域中的应用及发展

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 一、引言 无线网络,顾名思义是利用无线电波而非线缆来实现与计算机设备位置无关的网络数据传输系统,是现代数据通信系统发展的一个重要方向。随着计算机网络技术、无线技术以及智能传感器技 ...…

查看全部问答>

大家听说过震动产生能量么?

据说如果安装在桥梁上的传感器,就是车子开过,桥梁震动,自己供电。 不知道大家有没有做过相关的项目? 对着项技术前景怎么看?…

查看全部问答>

LED封装工作流程

固晶→原材料准备→检查支架→检查芯片→扩晶→固晶→固晶烤检→烘烤 ↓ 焊线→焊线→焊线全检→点荧光粉→烘烤 ↓ 封胶→清理模条→模条预热→发放支架→胶水、模条准备→灌胶→支架沾胶→插支架→短烤→离模→长烤 ↓ 后测→一切→测试→外 ...…

查看全部问答>

c语言中能重复定义吗?

在mcu中,我想在一个c文件中用同样的宏,却在每个函数中实现不同的功能。。   各位高手,,有没有什么办法实现呀。。 例:#define setSDA  P1|=(1…

查看全部问答>

关于ICC AVR编译器的问题

刚刚入门 所以我在运行程序时出现错误如下: D:\\森汉机器人光盘备份\\程序\\6S-C语言\\basal.c(2): Could not find include file C:\\icc\\bin\\imakew -f test.mak C:\\icc\\bin\\imakew.exe: Couldn\'t open D:/icc/include/macros.h GetLa ...…

查看全部问答>

知名外资通讯企业招聘软件开发工程师,协议工程师,算法分析和实现工程师及算法分析系统仿真工程师!!!

无线产品软件开发工程师 职责描述: 负责无线产品软件模块的设计、编码、调试、单元测试等工作,参与相关质量活动,确保设计及实现工作按时保质完成。 职位要求: 1. 本科以上学历,计算机软件、通信、电子、数学、物理及相关专业,有扎实的 ...…

查看全部问答>

郭天祥单片机教程

本帖最后由 paulhyde 于 2014-9-15 09:11 编辑 在学校论坛找的一本郭天祥单片机教程的PDF,看着还不错,讲的东西都跟竞赛相关,很实用。不敢独享,发来论坛与大家分享。内容太大,135网盘下载:…

查看全部问答>

语音识别受好者

最近在买材料做一个人体感应风扇+语音识别,最初的想法就是,人只要坐在风扇前,风扇就会转去,人走开后,风扇就停,这样的创意不够新不够好玩,后来想到加个语音识别好玩点,人只要说一句录好的声音,风扇就会转,说录好命令停止的声音,风扇就会 ...…

查看全部问答>

急招兼职: 诚找人编写DSP、FPGA开发类图书

榕盛文化公司(rssdbook.)致力于图书的选题策划、编辑加工和出版,由具有大型出版社工作背景、从事图书出版10余年的资深编辑组建。公司以“弘扬优秀文化、传播卓越品质”为出版理念,成立以来已有数十本图书在全国出版,其中畅销书多达30本,有10 ...…

查看全部问答>