本文参考下面这篇文档写成,更多信息请阅读原文:

http://www.phytec.de/fileadmin/user_upload/images/content/1.Products/SOMs/phyCORE-AM335x/L-775e_3.pdf

TFTP方式

准备工作:

  • 确认上位机的tftp服务工作正常,且目录中有正确的image文件
  • 确认上位机与开发板网络工作正常
    • 我们的开发板默认设置ip为 192.168.3.11,默认的tftp服务器地址为 192.168.3.10
  • 确认开发板调试串口工作正常
  • 另外在barebox中,虽然有 /mnt/tftp 这个目录,但实际上这个目录是不能用tab键来自动补全,也不能用ls来查看目录的,只能输入文件名来下载。
  • barebox使用教程 / Introducing barebox
  • 在下面的文档中,文件名用以下格式,请将[xx]改为您的文件名
    • MLO:[MLO]
    • barebox:[barebox]
    • 内核:[zImage]
    • 文件系统:[rootfs]



更新bootloader

首先在上电时在按提示进入barebox。

BSP 13.1.0 版本barebox启动log
barebox 2013.07.0-PD13.1.3 MLO #1 Mon Jul 11 16:43:16 CST 2016


Board: Phytec phyCORE-AM335x
omap-hsmmc omap4-hsmmc0: registered as omap4-hsmmc0
m25p80 m25p800: s25sl064p (8192 Kbytes)
probe buswidth
nand: ONFI param page 0 valid
nand: ONFI flash detected ...
nand: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron MT29F4G08ABADAH4), page size: 2048, OOB size: 64
booting from NAND


barebox 2013.07.0-PD13.1.3 #4 Fri Jun 24 12:13:46 HKT 2016


Board: Phytec phyCORE-AM335x
omap-hsmmc omap4-hsmmc0: registered as omap4-hsmmc0
m25p80 m25p800: s25sl064p (8192 Kbytes)
cpsw cpsw0: detected phy mask 0x5
mdio_bus: miibus0: probed
eth0: got preset MAC address: 78:A5:04:BD:5D:79
I2C probe
i2c-omap i2c-am33xx0: bus 0 rev0.11 at 100 kHz
probe buswidth
nand: ONFI param page 0 valid
nand: ONFI flash detected ...
nand: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron MT29F4G08ABADAH4), page size: 2048, OOB size: 64
malloc space: 0x83ff4000 -> 0x87ff3fff (size 64 MiB)
envfs: wrong magic on /dev/env0
no valid environment found on /dev/env0. Using default environment
running /env/bin/init...

Hit m for menu or any other key to stop autoboot:  3

type exit to get to the menu
barebox@Phytec phyCORE-AM335x:/

然后更新 MLO。

注意如果是新版本的barebox降级则需要参考对应版本的BSP更新方法来更新barebox为旧版本。

cp /mnt/tftp/[MLO] . 
erase /dev/nand0.xload.bb
cp [MLO] /dev/nand0.xload.bb 
更新MLO log 注意文件名可能不同,下同
barebox@Phytec phyCORE-AM335x:/ cp /mnt/tftp/MLO .
100Mbps full duplex link detected
barebox@Phytec phyCORE-AM335x:/ erase /dev/nand0.xload.bb
barebox@Phytec phyCORE-AM335x:/ cp MLO /dev/nand0.xload.bb
barebox@Phytec phyCORE-AM335x:

更新barebox。

cp /mnt/tftp/[barebox] .
erase /dev/nand0.barebox.bb
cp [barebox] /dev/nand0.barebox.bb
erase /dev/nand0.bareboxenv.bb
更新barebox log
barebox@Phytec phyCORE-AM335x:/ cp /mnt/tftp/barebox-image .
barebox@Phytec phyCORE-AM335x:/ erase /dev/nand0.barebox.bb
barebox@Phytec phyCORE-AM335x:/ cp barebox-image /dev/nand0.barebox.bb
barebox@Phytec phyCORE-AM335x:/ erase /dev/nand0.bareboxenv.bb
barebox@Phytec phyCORE-AM335x:/


重启开发板,此后开发板都会运行新版本的barebox。

也就是说如果需要再次更新barebox,就可以按照本文的方法来更新。

reset

在reset后用同样的方式进入barebox,继续下面的操作。



更新内核、设备树、文件系统

此时的/dev:

ls /dev
barebox@Phytec phyCORE-AM335x:/ ls /dev
defaultenv                eeprom0
env0                      env_raw
full                      m25p0
m25p0.barebox             m25p0.bareboxenv
m25p0.kernel              m25p0.root
m25p0.xload               mem
nand0                     nand0.barebox
nand0.barebox.bb          nand0.bareboxenv
nand0.bareboxenv.bb       nand0.kernel
nand0.kernel.bb           nand0.root
nand0.root.bb             nand0.xload
nand0.xload.bb            nand0.xload_backup1
nand0.xload_backup1.bb    nand0.xload_backup2
nand0.xload_backup2.bb    nand0.xload_backup3
nand0.xload_backup3.bb    nand_oob0
null                      ram0
self0                     self_raw
xload                     xload_raw
zero
barebox@Phytec phyCORE-AM335x:/

首先擦除kernel

erase /dev/nand0.kernel.bb

将kernel写入nand

cp /mnt/tftp/[zImage] /dev/nand0.kernel.bb 
更新kernel log
barebox@Phytec phyCORE-AM335x:/ erase /dev/nand0.kernel.bb
barebox@Phytec phyCORE-AM335x:/ cp /mnt/tftp/linuximage /dev/nand0.kernel.bb
barebox@Phytec phyCORE-AM335x:/

接下来烧写文件系统

首先格式化nand为ubi格式

ubiformat /dev/nand0.root
格式化ubi文件系统 log
barebox@Phytec phyCORE-AM335x:/ ubiformat /dev/nand0.root
ubiformat: /dev/nand0.root (nand), size 527302656 bytes (502.9 MiB), 4023 eraseblocks of 131072 bytes (128 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 4022 -- 100 % complete
ubiformat: 4023 eraseblocks have valid erase counter, mean value is 3
ubiformat: warning!: VID header and data offsets on flash are 512 and 2048, which is different to requested offsets 2048 and 4096
ubiformat: using offsets 2048 and 4096
ubiformat: formatting eraseblock 4022 -- 100 % complete
barebox@Phytec phyCORE-AM335x:/


然后挂载该文件系统

如果在以后调试时,想要只更新内核、设备树、文件系统中的一个,那么可以在先运行该指令后,用ubiupdatevol来更新,不需要ubiformat和ubimkvol。

ubiattach /dev/nand0.root
挂载文件系统 log
barebox@Phytec phyCORE-AM335x:/ ubiattach /dev/nand0.root
UBI: attaching mtd0 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    126976 bytes
UBI: smallest flash I/O unit:    2048
UBI: VID header offset:          2048 (aligned 2048)
UBI: data offset:                4096
registering /dev/ubi0
UBI: attached mtd0 to ubi0
UBI: MTD device name:            "nand0.root"
UBI: MTD device size:            502 MiB
UBI: number of good PEBs:        4023
UBI: number of bad PEBs:         0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     0
UBI: available PEBs:             3979
UBI: total number of reserved PEBs: 44
UBI: number of PEBs reserved for bad PEB handling: 40
UBI: max/mean erase counter: 8/4
barebox@Phytec phyCORE-AM335x:/

此时的/dev:

ls /dev
barebox@Phytec phyCORE-AM335x:/ ls /dev
defaultenv                eeprom0
env0                      env_raw
full                      m25p0
m25p0.barebox             m25p0.bareboxenv
m25p0.kernel              m25p0.root
m25p0.xload               mem
nand0                     nand0.barebox
nand0.barebox.bb          nand0.bareboxenv
nand0.bareboxenv.bb       nand0.kernel
nand0.kernel.bb           nand0.root
nand0.root.bb             nand0.xload
nand0.xload.bb            nand0.xload_backup1
nand0.xload_backup1.bb    nand0.xload_backup2
nand0.xload_backup2.bb    nand0.xload_backup3
nand0.xload_backup3.bb    nand_oob0
null                      phy0
ram0                      self0
self_raw                  ubi0
xload                     xload_raw
zero
barebox@Phytec phyCORE-AM335x:/

在文件系统中分区,首先是内核

注意如果以前已经分过区,就不用再操作一遍,如果觉得操作有误,可以用ubiformat先格式化后重新来过文件系统

ubimkvol /dev/ubi0 root 0 
建立文件系统分区 log
barebox@Phytec phyCORE-AM335x:/ ubimkvol /dev/ubi0 root 0
registering root as /dev/ubi0.root
barebox@Phytec phyCORE-AM335x:/

此时的/dev/内容:

ls /dev
barebox@Phytec phyCORE-AM335x:/ ls /dev
defaultenv                eeprom0
env0                      env_raw
full                      m25p0
m25p0.barebox             m25p0.bareboxenv
m25p0.kernel              m25p0.root
m25p0.xload               mem
nand0                     nand0.barebox
nand0.barebox.bb          nand0.bareboxenv
nand0.bareboxenv.bb       nand0.kernel
nand0.kernel.bb           nand0.root
nand0.root.bb             nand0.xload
nand0.xload.bb            nand0.xload_backup1
nand0.xload_backup1.bb    nand0.xload_backup2
nand0.xload_backup2.bb    nand0.xload_backup3
nand0.xload_backup3.bb    nand_oob0
null                      phy0
ram0                      self0
self_raw                  ubi0
ubi0.root                 xload
xload_raw                 zero
barebox@Phytec phyCORE-AM335x:/


将文件系统写入nand

cp /mnt/tftp/[rootfs] /dev/ubi0.root 
写入文件系统 log
barebox@Phytec phyCORE-AM335x:/ cp /mnt/tftp/root.ubifs /dev/ubi0.root
barebox@Phytec phyCORE-AM335x:/


OK,恭喜你已经完成了。

reset

此后,如果要单独更新文件系统,只需要进去barebox,然后

ubiattach /dev/nand0.root
ubiattach log
barebox 2013.07.0-PD13.1.3 MLO #1 Mon Jul 11 16:43:16 CST 2016


Board: Phytec phyCORE-AM335x
omap-hsmmc omap4-hsmmc0: registered as omap4-hsmmc0
m25p80 m25p800: s25sl064p (8192 Kbytes)
probe buswidth
nand: ONFI param page 0 valid
nand: ONFI flash detected ...
nand: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron MT29F4G08ABADAH4), page size: 2048, OOB size: 64
booting from NAND 


barebox 2013.07.0-PD13.1.3 #4 Fri Jun 24 12:13:46 HKT 2016


Board: Phytec phyCORE-AM335x
omap-hsmmc omap4-hsmmc0: registered as omap4-hsmmc0
m25p80 m25p800: s25sl064p (8192 Kbytes)
cpsw cpsw0: detected phy mask 0x5
mdio_bus: miibus0: probed
eth0: got preset MAC address: 78:A5:04:BD:5D:79
I2C probe
i2c-omap i2c-am33xx0: bus 0 rev0.11 at 100 kHz
probe buswidth
nand: ONFI param page 0 valid
nand: ONFI flash detected ...
nand: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron MT29F4G08ABADAH4), page size: 2048, OOB size: 64
malloc space: 0x83ff4000 -> 0x87ff3fff (size 64 MiB)
envfs: wrong magic on /dev/env0
no valid environment found on /dev/env0. Using default environment
running /env/bin/init...

Hit m for menu or any other key to stop autoboot:  3

type exit to get to the menu
barebox@Phytec phyCORE-AM335x:/ ubiattach /dev/nand0.root
UBI: attaching mtd0 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    126976 bytes
UBI: smallest flash I/O unit:    2048
UBI: VID header offset:          2048 (aligned 2048)
UBI: data offset:                4096
registering /dev/ubi0
registering root as /dev/ubi0.root
UBI: attached mtd0 to ubi0
UBI: MTD device name:            "nand0.root"
UBI: MTD device size:            502 MiB
UBI: number of good PEBs:        4023
UBI: number of bad PEBs:         0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 4023
UBI: number of PEBs reserved for bad PEB handling: 40
UBI: max/mean erase counter: 13/4
barebox@Phytec phyCORE-AM335x:/ ls /dev
defaultenv                eeprom0
env0                      env_raw
full                      m25p0
m25p0.barebox             m25p0.bareboxenv
m25p0.kernel              m25p0.root
m25p0.xload               mem
nand0                     nand0.barebox
nand0.barebox.bb          nand0.bareboxenv
nand0.bareboxenv.bb       nand0.kernel
nand0.kernel.bb           nand0.root
nand0.root.bb             nand0.xload
nand0.xload.bb            nand0.xload_backup1
nand0.xload_backup1.bb    nand0.xload_backup2
nand0.xload_backup2.bb    nand0.xload_backup3
nand0.xload_backup3.bb    nand_oob0
null                      ram0
self0                     self_raw
ubi0                      ubi0.root
xload                     xload_raw
zero
barebox@Phytec phyCORE-AM335x:/

然后直接cp更新就可以了。


TODO:

  • 步骤号
  • Barebox文档
    • 怎样修改ip地址
    • 怎样测试网络
    • barebox的官方文档
  • 补充bsp manual的其他信息
  • No labels