在 u-boot 下使用 tftp 烧写内核 kernel 和文件系统 - 问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

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

i2c ( 楼主 ) 2014-10-16 10:56:30  只看该作者 倒序浏览
本帖最后由 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,
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /7 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-24 21:16 , Processed in 0.576779 second(s), Total 61, Slave 45 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表