为了降低项目的产品成本,在硬件设计上选择了U盘来替代Nand Flash存储器,因此包括Linux内核及文件系统的软件需要存储在U盘中,将Uboot程序存放在SPI Flash中,使系统从U盘来启动,达到替代Nand Flash的作用。
系统要从U盘启动,首先在UBOOT中,需要能访-问U盘的文件,对于内核来说最好就是一个文件,在运行UBOOT的时候,把内核从U盘读入DDR指定地址,再把系统的控制权交给内核,即可启动内核,在内核启动的后阶段,需要挂载根文件系统,目前主要有从FLOPPY,RAMDISK,BULK三个分支。U盘属于BULK类,所以系统要从U盘加载文件系统,需要把UBOOT传给KERNEL的参数进行修改,一个root=/dev/sda1(假设U盘为单分区,设备号为sda1),后面必须要有rootdelay=5,也就是说在挂载文件系统之前要延时几秒,这是由于USB控制器的初始化,识别U盘需要一点时间,具体值可以通过测试来选择,还要指定文件系统类型。对启动的参数的修改,可以使系统从U盘启动,这样开发有时会比较便捷。
解决了系统从U盘启动的问题后,麻烦的事情随之而来,怎么生产发布,怎么升级?
为了生产的便利,软件的发布最好不要有人员的太多干预操作,只需要把外置的U盘插入USB口,上电就运行,写程序对生产人员来说是透明的,最后显示升级从与否即可。
笔者在STi7105平台上,解决了从两组不同USB控制器口启动的问题,多分区的问题也比较简单,只不过在UBOOT中USB driver整体上是按支持一组USB写的精简版,所以具体从哪组启动,需要一些条件来触发。比如,刚生产的STB,下线后SPI flash中的某个特定地址的值不为某特定值时,就从外部U盘启动,进入生产发布,发布成功后就清除此值,这样很便捷,也可行。
对于多分区来说,控制也不是很难,关键是实现命令行中能从多分区启动,其他的启动分区选择完全是策略的问题,不存在多少难度。
由于U盘容量大,价格也便宜,直接替代STI7105系统支持的NAND FLASH类型,在价格上会有优势,降低产品成本。
如果对于这个议题感兴趣,可以一起探讨一下。希望看了此文章,对你有益!