本文参考下面这篇文档写成,更多信息请阅读原文:
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。
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
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@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后用同样的方式进入barebox,继续下面的操作。
更新内核、设备树、文件系统
此时的/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
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
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
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:
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
barebox@Phytec phyCORE-AM335x:/ ubimkvol /dev/ubi0 root 0
registering root as /dev/ubi0.root
barebox@Phytec phyCORE-AM335x:/
此时的/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
barebox@Phytec phyCORE-AM335x:/ cp /mnt/tftp/root.ubifs /dev/ubi0.root
barebox@Phytec phyCORE-AM335x:/
OK,恭喜你已经完成了。
此后,如果要单独更新文件系统,只需要进去barebox,然后
ubiattach /dev/nand0.root
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的其他信息