免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1948 | 回复: 4

关于一个需求,请各位大牛指导,感激涕零~ [复制链接]

论坛徽章:
0
发表于 2012-02-06 00:35 |显示全部楼层
本帖最后由 ljpdxj 于 2012-02-06 10:02 编辑

数字电视系统中,bin file包括bootloader和主代码(主系统,比如Linux Kernel)两部分,他们都是独自编译完成的系统。

因为产品的规格:bootloader要提供USB Upgrade,OTA Upgrade(数字电视码流携带升级用bin file)

所以bootloader包含了OSD Driver/USB Driver/Tuner/..., Demod/demux/FS/...等等内容,

而OSD Driver/USB Driver/Tuner/..., Demod/demux/FS/...在主代码中又存在一份,这部分内容大概200K的样子(已经被压缩过)

项目提出需求,要求bootloader和主代码可用共用此部分代码。(补充说明:即要求节约flash中rom bin的size==〉flash rom bin中只有一份)

问题来了?如何完成此需求?

我当前只想到可以使用ELF loader,在bootloader和主代码中分别都使用ELF loader来加载该common module部分

不过我又担心:
1、主代码中如果使用ELF动态加载,开机时其速度会不会比之前不使用ELF加载慢很多(如果慢会影响诸多问题,比如导致OSD出来慢,节目开画慢,USB设备识别慢等);
2、common module压缩都200K的样子,其ELF lib会比较大,且如果使用LEF Loader,那么此common comdule的lib必须是一个原生的可以被链接的ELF,虽然我们还会对其压缩(parse ELF file,分Section压缩),但因为包括了很多在动态链接时需要使用的信息,此部分Size会不会就快接近200K的样子了?如果这样我岂不是白用功?

压力十分大,请各位大牛指导,我该如何设计才好?请问有没有其他比较好的解决方案?或者大家有类似的需求如何完成的?感激不尽~

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
发表于 2012-02-06 08:38 |显示全部楼层
系统有没有MMU?能不能这样?在bootloader里面固定内存做个函数指针表,然后将这200K初始化到一块固定内存地址,然后初始化这个表,然后跑bootloader,进主系统时,剔除掉这块内存(就当不存在了),然后主系统的这套东西使用固定内存表的内容静态链接?

就是不知道你用的啥工具链,这样的话似乎得自己写链接脚本了,如果是Linux Kenerl指不定还得改内核,你看着办吧……

论坛徽章:
0
发表于 2012-02-06 10:25 |显示全部楼层
回复 2# starwing83


感谢楼上的回复,
我在补充说明发帖时没说清楚的重点:
需求目的就是节约flash rom bin size,也即是这部分common module在flash rom bin里面只有一份。
系统没有MMU,
toolchain为gcc eCos mips,
链接脚本改起来倒easy,

你的意思是,在bootloader和主系统的ld里面把这部分common module的VMA设置为相同,
再构建一个table,放入bootloader要使用到的函数指针,

也想过这样操作,但如何解决Sync的问题成为难点,
假设某时间升级主系统时把common module里面的某函数原型变了,
bootloader每次起来必定crash

想想都头疼。。。

论坛徽章:
0
发表于 2012-02-06 14:25 |显示全部楼层
这个需求有难度!没想到什么好办法

不过我想未必需要从bootloader着手,也许可以
1.可以从linux系统着手,找找上面的库是不是有debug的版本,没strip掉?
2.找硬件工程师换个大点的flash块

论坛徽章:
0
发表于 2012-02-06 14:35 |显示全部楼层
本帖最后由 ljpdxj 于 2012-02-06 14:37 编辑

回复 4# pppStar

感谢回复,需求提出的目的就是为了减小flash size,节约硬件成本。。。
同时:系统的代码一般来说都是纯二进制的代码,objcopy -o binary
除了LEF Loader的Lib除外,这部分一定不能strip,因为要动态链接。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP