Note: 我的S5PV210板子的磁盘是emmc版本,不是nandflash版本。
1. SD卡内烧录uboot镜像,然后作为启动盘来启动emmc中的内核镜像和根文件系统。
只要破坏emmc内的uboot镜像,就可以使其从sd2启动 (因为emmc内没了完整的uboot,自然就无法启动内核)
然后使用SD卡烧录的工具软件在SD卡内烧录uboot镜像,启动盘就制作好了。
有了启动盘,就可以把uboot程序跑起来,
而uboot的作用是支持多种方式升级内核,例如tftp升级、SD卡升级,等等。
2. Uboot内使用tftp 升级内核
先设置好三个环境变量
之后在uboot内去ping PC windows主机
登录uboot后,网线连接板子与PC机,PC主机windows上ipconfig,以太网适配器有可能会显示:媒体已断开连接。实际上不要紧的,板子仍然可以ping通PC机windows的。
我们需要windows的IP地址。
要获取windows的IP地址,网线连接好,让板子先进到linux系统,再在windows上ipconfig就可以看到IP地址了(以太网适配器 以太网),然后重新进入uboot去ping。
只要ping后显示host 是alive的信息即表示ping成功。
3. 保证能ping通后,执行下载或烧录(或叫升级也行)新的内核
实测该tftp升级内核命令是搬移到内存DDR去,而不是磁盘emmc去。测试方法是搬移到DDR的内核镜像,在整机断电后重启就会失效。
之后执行bootm 30008000 或者 bootm 30008000 zImage
PS:bootm由boot和m构成,这里m指的就是memory,即ddr内存,
所以当使用bootm时,若ddr中没有内核镜像,则会启动失败。
可见启动新内核成功了。
然后遗憾的是现在还不能称之为升级新内核成功,因为只要现在的板子一断电,重新上电,uboot自动加载的内核依然是emmc内的旧内核。而我们已有的tftp只是把内核从PC主机上搬到了Linux板子上的DDR里,并没有覆盖写入到板载emmc的旧内核的位置。
我们可以通过uboot内的mmc或者movi指令来将DDR内的内核烧写到emmc内去。
重新进入uboot,
在uboot内执行help movi, 可以了解下movi命令的用法
和之前一样,先用tftp把zImage搬到DDR
现在,即使整机断电重启,启动的内核也是新的内核了。
看到这里可能会有疑问,为什么在执行movi命令时,也不指定将DDR里的kernel烧写到emmc的哪个起始地址去呢?
因为uboot里面有个分区表,uboot的分区表和内核的分区表是一样的,已经记录了磁盘emmc内的分区信息了。所以我们在使用movi命令烧写kernel时就不需要再指定emmc的地址了。
换句话说: uboot内部知道kernel分区在磁盘emmc中的具体地址,而我们命令中只需要告诉现在烧写进去的是kernel这个分区即可。
4. 将emmc上的kernel镜像加载到DDR,如下图所示
5. 九鼎SD卡升级介绍
进入uboot
既然uboot已经启动了,uboot程序已经在跑了,这时候就可以把出SD卡拔出来,
然后创建个x210文件夹,里面放置uboot、内核、根文件系统镜像。
插上SD卡,执行上图该命令,应该就可以一次性完成升级uboot、内核和根文件系统镜像了。
九鼎科技相关文档如下图
.