免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4756 | 回复: 28

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

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

数字电视系统中,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
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2012-02-06 09:51 |显示全部楼层
做成.a连接的时候连接同一个.a就可以了吧?

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


感谢斑竹大人的回复,我没说清楚,
leader认为bootloader里面有这一份,而主系统中也同样有这一份,那么flash中就冗余了200K的代码,这部分leader认为应该节约(来减小rom bin size)。
需求要求就是flash里面只有这么一个200K。

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


    可以做成动态模块的加载试一下,把那个模块独立出来,速度的话,个人觉得应该是一样的,

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

此部分纯二进制代码size压缩之后大概200K,此需求的目的就是节约这200K flash 空间,
如果使用动态链接,该common module部分必须为原生的ELF可链接lib,虽然也会被压缩(7zip最大压缩比40%左右),但里面用于动态链接的信息部分压缩之后会不会接近200K了?
如果这样,就没有fine tune的必要了。。。
   

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2012-02-06 10:56 |显示全部楼层
本帖最后由 T-Bagwell 于 2012-02-06 10:57 编辑

没这么做过
bootloader部分一般只要花1s时间,kernel部分大约花5s,程序初始化2s,一共10s左右,图像就显示出来了
至于你说的升级,一般是单个一个partition,升级只要升级那个partition就可以了


如果你想做,应该是只有试试做成一个bootloader和kernel都可以识别的内容了,估计要在bootloader部分做,然后固定在内存上,那段内存是物理空间
你kernel不去改变该空间,还是使用那段物理空间来做demux

论坛徽章:
0
发表于 2012-02-06 11:01 |显示全部楼层
回复 5# ljpdxj


    这个我也不是很清楚,没搞过。。。。。你尝试一下了,这个难度应该不大把

论坛徽章:
0
发表于 2012-02-06 11:11 |显示全部楼层
回复 6# T-Bagwell


    感谢斑竹回复~
哎,我们用的是eCos....none MMU MPIS平台==>中低端产品
所以里面全是物理空间。。。

我们一般只会upgrade整个主系统,因为可能是有None MMU的原因,当然可以使用一些技巧可以做成partition可upgrade

必须做成“bootloader和kernel都可以识别的内容”,但我当前就是不知道要怎么做才是一个合理可行的做法。

论坛徽章:
0
发表于 2012-02-06 11:13 |显示全部楼层
回复 7# chenrvmldd


    嗯,我可以很容易去验证这个题目,但似乎它其实就是个问题。。。

论坛徽章:
0
发表于 2012-02-06 11:20 |显示全部楼层
1. 这些driver在bootloader 和 kernel里的代码是一样的?
2. 做成common file 会不会关联度太高了? 两个部分的需求还是有差异的。
3. common file要是单独放在flash里,做成一个partion的话,占的size是2的幂或flash block size。这样200KB,会要分配256KB空间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP