设为首页收藏本站
查看: 25657|回复: 0

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

[复制链接]

231

主题

64

回帖

2145

积分

管理员

积分
2145
玉米糊 发表于 2014-6-30 18:13:51 | 显示全部楼层 |阅读模式
本文以 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环境
[mw_shl_code=bash,true]set ipaddr 192.168.1.250
set ethaddr 88:33:14:f6:c0:d4
set serverip 192.168.1.220
saveenv
reset
[/mw_shl_code]
以上命令作用分别是:设置开发板IP地址、设置网口MAC地址、设置Ubuntu主机服务器的IP地址、保存变量、重启。然后使用ping命令确保开发板和 主机ping通:
[mw_shl_code=bash,true]
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[/mw_shl_code]
如上,如果提示 host xxx is alive 说明可以和主机ping通。注意:很多时候其实 ping 不通也是可以在u-boot中使用tftp和nfsroot的,可先不管是否可以 ping 通,继续往使用 tftp 或者 nfsroot。

如果无法ping通,会提示:
[mw_shl_code=bash,true]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[/mw_shl_code]
Ping不通请按以下办法排查:AM335X板U-Boot下Ping不通主机解决步骤》。

3、获取地址分配
使用 printenv 命令查看u-boot环境变量
[mw_shl_code=bash,true]
printenv
[/mw_shl_code]
输出有如下一堆:
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)):[mw_shl_code=bash,true]
tftp 0x82000000 uImage
nandecc hw 2             #AM335X内核需要ecc硬件校验,否则出错:ECC: uncorrectable.
[/mw_shl_code]
如果执行上面的命令一直刷“#”,说明在传输文件;如果出现“TTT...”,说明传输超时,需要检查开发板和主机的网络联通。
从 0x280000 地址开始,擦除 0x370508 字节的内容:
[mw_shl_code=bash,true]
nand erase 0x280000 0x370508
[/mw_shl_code]
把内存 0x82000000 处的内容,写到 FLASH 的 0x280000 地址去,写的长度是 0x3605768:
[mw_shl_code=bash,true]
nand write.i 0x82000000 0x280000 0x370508
[/mw_shl_code]其中:
  • nand write.jffs2  烧写JFFS2文件系统,跳过坏块
  • nand write.i        等同 nand write.jffs2
  • nand write.yaffs  烧写yaffs2文件系统,需页对齐


5、烧写文件系统
把文件从pc上下载到开发板的内存 0x8200000处,下载的长度会在成功后提示,使用用十六进制,命令:[mw_shl_code=bash,true]
tftp 0x82000000 ubi.img
nandecc sw                          #AM335X内核需要ecc硬件校验
[/mw_shl_code]注意:因为文件系统比较大,在传输的过程中尽量不要干扰,以免中途超时导致传输失败。
从 0x780000 地址开始,擦除 0x3da0000 字节的内容:
[mw_shl_code=bash,true]
nand erase 0x780000 0x3da0000
[/mw_shl_code]
把内存 0x82000000 处的内容,写到 FLASH 的 0x780000 地址去,写的长度是 0x3da0000:
[mw_shl_code=bash,true]
nand write.i 0x82000000 0x780000 0x3da0000
[/mw_shl_code]
回复

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-3-29 09:11 , Processed in 0.048618 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表