SMP865X广告机之Sata启动

    技术2025-11-05  8

    /*******************************************************************• 此文章解释权归windsome所有,如要转载无须联系本人。• 转载需要包含此抬头信息,如有疑问,欢迎联系本人。• QQ: 35327864• msn: fgwf1@hotmail.com• mail: agooou@gmail.com ********************************************************************/smp8652, smp8653, smp8654, smp8655

    SMP865X支持的启动设备按顺序是:1,nand flash,2KB/页大小的nand flash,chip0或chip12,nand flash,512B/页大小的nand flash,包含Spansion的ORNAD,chip0或chip13,SATA硬盘,sata0或sata14,GPIO-SPI-NOR flash,4 GPIO pins (2/3/4/5)5,并行NOR flash6,SPI NOR flash如果我们要从SATA启动,则需要将nand flash的XENV分区(也即Phyblock0)擦除。擦除后,xmboot可以去找下一个可启动设备,即SATA硬盘。准备SATA硬盘:需要创建一个可启动分区,用fdisk可以设置某个分区为可启动。我们设置第一个分区(/dev/sdb1)为可启动。首先分析从NAND flash启动。因为NAND可能存在坏块,所以有物理地址和逻辑地址的区别。物理地址是纯粹的真实地址,坏块也算在内,有可能会读到坏块,而使内容错。逻辑地址是加载了nand驱动后,坏块被剔除了,从而每一个地址都是可以正确读写的。从物理地址上看,NAND的前0x80000 (512K),被分成4个128K,存放相同的内容,为ZXENV和ezboot(stage1 bootloader),xmboot会去读第一个128K,如果失败则读下一个,直到4个块均读完,如果仍然失败,则继续去读下一个可启动设备。

    如果从NAND中正确boot起来,则会去加载其中的ezboot。ezboot已经编入了NAND驱动,这样就可以将NAND管理起来了,之后的操作就可以按逻辑地址进行读写,可以运行YAMON或Linux了。

    再分析SATA方式启动。SATA没有NAND的管理层。但为了与NAND启动方式兼容,我们仍然需要区分所谓"物理地址"和"逻辑地址"。所谓逻辑地址,指的是用SATA启动ezboot后,重新将SATA物理地址0x80000映射为0x0,接着ezboot会从逻辑地址0开始读xmaterial或者imaterial,这个部分其实应该是物理地址0开始的那512K,接着去启动stage2的系统(如YAMON,Linux,WinCE)。这样SATA方式就与NAND使用了相同的image。从物理地址上看,phyblock0就占了1024K了。这就是为什么yamon 要从1M的地方写起的原因。

    PC机端的操作为:$ dd if=phyblock0-0x20000padded.<BOARD_ID> of=/dev/sda1 bs=1K$ dd if=zbimage-yamon-xload of=/dev/sda1 bs=1K seek=1024$ dd if=zbimage-linux-xload of=/dev/sda1 bs=1K seek=1280$ sync关于为什么ezboot在启动的时候要忽略前面512K,原因是为了让SATA方式启动的内容跟NAND的保持一致,可以不用准备2份image。具体代码可以到smp86xx_ezboot_0x98/xos/xboot2/xmasboot/nand_st2/ezboot/sata.c中看到:RMstatus sata_read ()函数中有如下代码,sector += 0x80000 / SECTOR_SIZE; //ezboot启动后,操作sata时忽略前512K,这就是所谓的逻辑地址。

    最新回复(0)