问答
直播中

i2c

12年用户 505经验值
擅长:MEMS/传感技术 嵌入式技术 处理器/DSP
私信 关注

在 u-boot 下使用 tftp 烧写内核 kernel 和文件系统

本帖最后由 i2c 于 2014-10-16 13:13 编辑

本文以 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环境
1
2
3
4
5
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通:
1
2
3
4
5
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通。

如果无法连通,会提示:
1
2
3
4
5
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环境变量
1
printenv



输出有如下一堆:
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)):
1
2
tftp 0x82000000 uImage
nandecc hw 2             #AM335X内核需要ecc硬件校验,否则出错:ECC: uncorrectable.



如果执行上面的命令一直刷“#”,说明在传输文件;如果出现“TTT...”,说明传输超时,需要检查开发板和主机的网络联通。
从 0x280000 地址开始,擦除 0x370508 字节的内容:
1
nand erase 0x280000 0x370508



把内存 0x82000000 处的内容,写到 FLASH 的 0x280000 地址去,写的长度是 0x3605768:
1
nand write.i 0x82000000 0x280000 0x370508


其中:
  • nand write.jffs2  烧写JFFS2文件系统,跳过坏块
  • nand write.i        等同 nand write.jffs2
  • nand write.yaffs  烧写yaffs2文件系统,需页对齐


5、烧写文件系统
把文件从pc上下载到开发板的内存 0x8200000处,下载的长度会在成功后提示,使用用十六进制,命令:
1
2
tftp 0x82000000 ubi.img
nandecc sw                          #AM335X内核需要ecc硬件校验


注意:因为文件系统比较大,在传输的过程中尽量不要干扰,以免中途超时导致传输失败。
从 0x780000 地址开始,擦除 0x3da0000 字节的内容:
1
nand erase 0x780000 0x3da0000



把内存 0x82000000 处的内容,写到 FLASH 的 0x780000 地址去,写的长度是 0x3da0000:
1
nand write.i 0x82000000 0x780000 0x3da0000



回帖(3)

HelloWii

2015-5-17 13:28:36
不错哦。。。。
举报

代表月亮消灭你

2015-5-17 20:13:30
不理解。。。
举报

kennyzuo

2018-12-13 22:43:31
jljljl,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分