手把手教你通过u-boot 烧写 kernel 和文件系统filesystem - 技术 - 电子技术论坛 - 最好最受欢迎电子论坛!

手把手教你通过u-boot 烧写 kernel 和文件系统filesystem

vvg ( 楼主 ) 2014-11-17 10:04: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. set ipaddr 192.168.1.250
  2. set ethaddr 88:33:14:f6:c0:d4
  3. set serverip 192.168.1.220
  4. saveenv
  5. reset
复制代码

以上命令作用分别是:设置开发板IP地址、设置网口MAC地址、设置Ubuntu主机服务器的IP地址、保存变量、重启。然后使用ping命令确保开发板和 主机ping通:
  1. ping 192.168.1.220
  2. Auto negotitation failed
  3. link up on port 0, speed 100, full duplex
  4. Using cpsw device
  5. host 192.168.1.220 is alive
复制代码
如上,如果提示 host xxx is alive 说明可以和主机ping通。

如果无法连通,会提示:
  1. MYD_AM335X# ping 192.168.1.220
  2. Auto negotitation failed
  3. Auto negotitation failed
  4. Using cpsw device
  5. ping failed; host 192.168.1.220 is not alive
复制代码
3、获取地址分配
使用 printenv 命令查看u-boot环境变量
  1. printenv
复制代码


输出有如下一堆:

  1. 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. tftp 0x82000000 uImage
  2. 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. tftp 0x82000000 ubi.img
  2. nandecc sw                          #AM335X内核需要ecc硬件校验
复制代码


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

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




0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

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

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

GMT+8, 2024-11-22 02:39 , Processed in 0.453935 second(s), Total 35, Slave 26 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

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