本文以 MYD-AM335X 为例,说明如何通过 u-boot 烧写 kernel 和文件系统filesystem。
第一步
在 Ubuntu 上安装 TFTP服务器,参考:
http://bbs.myir-tech.com/thread-6158-1-1.html
第二步
把产品的 kernel 和 文件系统拷贝到 ubutnu 系统的tftp目录下,如把 uImage 和 ubi.img拷贝到 Ubuntu 的 /tftpboot 目录。
第三步
1、启动
开发板倒计时时按回车进入 u-boot 命令行模式。
2、配置uboot环境
- set ipaddr 192.168.1.250
- set ethaddr 88:33:14:f6:c0:d4
- set serverip 192.168.1.220
- saveenv
- reset
以上命令作用分别是:设置开发板IP地址、设置网口MAC地址、设置Ubuntu主机服务器的IP地址、保存变量、重启。然后使用ping命令确保开发板和 主机ping通:
- ping 192.168.1.220
- Auto negotitation failed
- link up on port 0, speed 100, full duplex
- Using cpsw device
- host 192.168.1.220 is alive
如上,如果提示 host xxx is alive 说明可以和主机ping通。
如果无法连通,会提示:
- MYD_AM335X# ping 192.168.1.220
- Auto negotitation failed
- Auto negotitation failed
- Using cpsw device
- ping failed; host 192.168.1.220 is not alive
3、获取地址分配
使用 printenv 命令查看u-boot环境变量
输出有如下一堆:
- updatesys=nand erase.chip;mmc rescan; fatload mmc 0 82000000 MLO;nandecc hw 2;nand write.i 82000000 0 ${filesize}; fatload mmc 0 82000000 u-boot.img;nandecc hw 2;nand write.i 82000000 80000 ${filesize}; fatload mmc 0 82000000 uImage;nandecc hw 2;nand write.i 82000000 280000 ${filesize}; fatload mmc 0 82000000 ubi.img;nandecc sw;nand write.i 82000000 780000 ${filesize};led flash all
紫色部分烧写MLO,红色部分烧写u-boot,绿色部分烧写uImage内核镜像,蓝色部分烧写文件系统,其中nandecc hw 2和 nandecc sw分别是需要 ECC 硬件校验和软件校验,目前AM335X需要校验,SAM9X5 和 SAMA5D3X 等不需要校验,具体可看printenv返回的数据。
地址分配如下,
- 一级引导地址:0x0
- RAM内存地址:0x82000000
- u-boot 地址:0x80000
- kernel 内核地址:0x280000
- ubi.img 文件系统地址:0x780000
4、烧写内核
把文件从pc上下载到开发板的内存 0x82000000处,下载的长度会在成功后提示(如Bytes transferred = 3605768 (370508 hex)):
- tftp 0x82000000 uImage
- nandecc hw 2 #AM335X内核需要ecc硬件校验,否则出错:ECC: uncorrectable.
如果执行上面的命令一直刷“#”,说明在传输文件;如果出现“TTT...”,说明传输超时,需要检查开发板和主机的网络联通。
从 0x280000 地址开始,擦除 0x370508 字节的内容:
- nand erase 0x280000 0x370508
把内存 0x82000000 处的内容,写到 FLASH 的 0x280000 地址去,写的长度是 0x3605768:
- nand write.i 0x82000000 0x280000 0x370508
其中:
- nand write.jffs2 烧写JFFS2文件系统,跳过坏块
- nand write.i 等同 nand write.jffs2
- nand write.yaffs 烧写yaffs2文件系统,需页对齐
5、烧写文件系统
把文件从pc上下载到开发板的内存 0x8200000处,下载的长度会在成功后提示,使用用十六进制,命令:
- tftp 0x82000000 ubi.img
- nandecc sw #AM335X内核需要ecc硬件校验
注意:因为文件系统比较大,在传输的过程中尽量不要干扰,以免中途超时导致传输失败。
从 0x780000 地址开始,擦除 0x3da0000 字节的内容:
- nand erase 0x780000 0x3da0000
把内存 0x82000000 处的内容,写到 FLASH 的 0x780000 地址去,写的长度是 0x3da0000:
- nand write.i 0x82000000 0x780000 0x3da0000