本文参考下面这篇文档写成,更多信息请阅读原文:
http://www.phytec.de/documents/l-814e-3-imx6-bsp-manual/
TFTP方式
准备工作:
- 确认上位机的tftp服务工作正常,且目录中有正确的image文件
- 确认上位机与开发板网络工作正常
- 我们的开发板默认设置ip为 192.168.3.11,默认的tftp服务器地址为 192.168.3.10
- 确认开发板调试串口工作正常
- 另外在barebox中,虽然有 /mnt/tftp 这个目录,但实际上这个目录是不能用tab键来自动补全,也不能用ls来查看目录的,只能输入文件名来下载。
- barebox使用教程 / Introducing barebox
- 在下面的文档中,文件名用以下格式,请将[xx]改为您的文件名
- barebox:[barebox]
- 内核:[zImage]
- 设备树:[oftree]
- 文件系统:[rootfs]
更新bootloader
首先在上电时在按提示进入barebox。
barebox 2016.11.0-i.MX6-PD16.1.0 #1 Sat Jul 29 10:31:17 CST 2017
Board: Phytec phyCORE-i.MX6 Quad with NAND
detected i.MX6 Quad revision 1.5
mdio_bus: miibus0: probed
eth0: got preset MAC address: 50:2d:f4:0c:cb:91
nand: ONFI flash detected
nand: NAND device: Manufacturer ID: 0x01, Chip ID: 0xd3 (AMD/Spansion S34ML08G2), 1024MiB, page size: 2048, OOB size: 128
Bad block table found at page 524224, version 0x01
Bad block table found at page 524160, version 0x01
m25p80 m25p80@00: n25q128a13 (16384 Kbytes)
imx-esdhc 2190000.usdhc: registered as 2190000.usdhc
da9063 da90620: da9062 with id 62.10.04.01 detected
netconsole: registered as netconsole-1
phySOM-i.MX6: Using environment in NAND flash
malloc space: 0x2ff7bf20 -> 0x4fef7e3f (size 511.5 MiB)
running /env/bin/init...
Hit m for menu or any other key to stop autoboot: 2
type exit to get to the menu
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
更新barebox。
注意如果是老版本的barebox可能没有 barebox_update 指令需要参考对应版本的BSP更新方法来更新barebox为新版本。
barebox_update -t nand /mnt/tftp/[barebox]
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ barebox_update -t nand /mnt/tftp/barebox.bin
eth0: 1000Mbps full duplex link detected
T Image Metadata:
build: #1 Mon Jan 23 15:19:09 CET 2017
release: 2016.11.0-i.MX6-PD16.1.0
parameter: memsize=1024
imx-bbu-nand-fcb: Firmware @ page 1152, size 269 pages has crc32: 0x6637d652
imx-bbu-nand-fcb: Firmware @ page 256, size 269 pages has crc32: 0x6637d652
imx-bbu-nand-fcb: Primary firmware is on pages 1152-1421, valid, clean
imx-bbu-nand-fcb: secondary firmware is on pages 256-525, valid, clean
imx-bbu-nand-fcb: ROM uses slot 1
update barebox from /mnt/tftp/barebox.bin using handler nand to nand0.barebox (y/n)?
updating barebox...
imx-bbu-nand-fcb: updating slot 0
imx-bbu-nand-fcb: writing firmware 0 to block 4 (ofs 0x00080000)
imx-bbu-nand-fcb: Writing FCB/DBBT on block 0
imx-bbu-nand-fcb: Writing FCB/DBBT on block 1
imx-bbu-nand-fcb: Writing FCB/DBBT on block 2
imx-bbu-nand-fcb: Writing FCB/DBBT on block 3
imx-bbu-nand-fcb: updating slot 1
imx-bbu-nand-fcb: writing firmware 1 to block 18 (ofs 0x00240000)
update succeeded
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
擦除barebox的环境变量。
erase /dev/nand0.barebox-environment.bb
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ erase /dev/nand0.barebox-environment.bb
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
重启开发板,此后开发板都会运行新版本的barebox。
也就是说如果需要再次更新barebox,就可以按照本文的方法来更新。
在reset后用同样的方式进入barebox,继续下面的操作。
更新内核、设备树、文件系统
此时的/dev:
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ls /dev
eeprom0 full
imx-ocotp m25p0
m25p0.barebox m25p0.barebox-environment
m25p0.kernel m25p0.oftree
mdio0-phy03 mem
nand0 nand0.barebox
nand0.barebox-environment nand0.barebox-environment.bb
nand0.barebox.bb nand0.bb
nand0.oob nand0.raw
nand0.root nand0.root.bb
null ram0
zero
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
首先格式化nand为ubi格式
ubiformat /dev/nand0.root -y
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubiformat /dev/nand0.root
ubiformat: nand0.root (nand), size 1068498944 bytes (1019 MiB), 8152 eraseblocks of 131072 bytes (128 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 8151 -- 100 % complete
ubiformat: 8148 eraseblocks have valid erase counter, mean value is 12
ubiformat: 4 bad eraseblocks found, numbers: 8148, 8149, 8150, 8151
ubiformat: formatting eraseblock 8151 -- 100 % complete
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
然后挂载该文件系统
如果在以后调试时,想要只更新内核、设备树中的一个,那么可以在先运行该指令后,用ubiupdatevol来更新,不需要ubiformat和ubimkvol。
ubiattach /dev/nand0.root
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubiattach /dev/nand0.root
ubi0: scanning is finished
ubi0: registering /dev/nand0.root.ubi
ubi0: attached mtd0 (name "nand0.root", size 1019 MiB) to ubi0
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 8148, bad PEBs: 4, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 40/13, WL threshold: 4096, image sequence number: 14055
ubi0: available PEBs: 7986, total reserved PEBs: 162, PEBs reserved for bad PEB handling: 156
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
此时的/dev:
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ls /dev
eeprom0 full
imx-ocotp m25p0
m25p0.barebox m25p0.barebox-environment
m25p0.kernel m25p0.oftree
mdio0-phy03 mem
nand0 nand0.barebox
nand0.barebox-environment nand0.barebox-environment.bb
nand0.barebox.bb nand0.bb
nand0.oob nand0.raw
nand0.root nand0.root.bb
nand0.root.ubi <-- 新设备 null
ram0 zero
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
在文件系统中分区,首先是内核
注意如果以前已经分过区,就不用再操作一遍,如果觉得操作有误,可以用ubiformat先格式化后重新来过
ubimkvol -t static /dev/nand0.root.ubi kernel 8M
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubimkvol -t static /dev/nand0.root.ubi kernel 8M
ubi0: registering kernel as /dev/nand0.root.ubi.kernel
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
设备树
ubimkvol -t static /dev/nand0.root.ubi oftree 1M
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubimkvol -t static /dev/nand0.root.ubi oftree 1M
ubi0: registering oftree as /dev/nand0.root.ubi.oftree
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
文件系统
ubimkvol -t dynamic /dev/nand0.root.ubi root 0
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubimkvol -t dynamic /dev/nand0.root.ubi root 0
ubi0: registering root as /dev/nand0.root.ubi.root
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
此时的/dev/内容:
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ls /dev
eeprom0 full
imx-ocotp m25p0
m25p0.barebox m25p0.barebox-environment
m25p0.kernel m25p0.oftree
mdio0-phy03 mem
nand0 nand0.barebox
nand0.barebox-environment nand0.barebox-environment.bb
nand0.barebox.bb nand0.bb
nand0.oob nand0.raw
nand0.root nand0.root.bb
nand0.root.ubi nand0.root.ubi.kernel <-- 3个新设备
nand0.root.ubi.oftree nand0.root.ubi.root
null ram0
zero
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
将kernel写入nand
ubiupdatevol /dev/nand0.root.ubi.kernel /mnt/tftp/[zImage]
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubiupdatevol /dev/nand0.root.ubi.kernel /mnt/tftp/zImage-phyboard-mira-imx6-3.bin
eth0: 1000Mbps full duplex link detected
T barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
将设备树写入nand
ubiupdatevol /dev/nand0.root.ubi.oftree /mnt/tftp/[oftree]
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubiupdatevol /dev/nand0.root.ubi.oftree /mnt/tftp/zImage-imx6q-phytec-mira-rdk-nand.dtb
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
将文件系统写入nand
cp -v /mnt/tftp/[rootfs] /dev/nand0.root.ubi.root
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ cp -v /mnt/tftp/phytec-qt5demo-image-phyboard-mira-imx6-3.ubifs /dev/nand0.root.ubi.root
[#################################################################]
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
OK,恭喜你已经完成了。
SD卡方式
1、把镜像所需的barebox\内核、设备树和文件系统这四个文件复制到SD卡,将SD卡插入开发板
2、烧写命令与TFTP方式一样(参考烧录指南),只需要把tftp的路径对应改为SD卡的路径
/mnt/tftp/[barebox] --> /mnt/mmc/[barebox]
/mnt/tftp/[zImage] --> /mnt/mmc/[zImage]
/mnt/tftp/[oftree] --> /mnt/mmc/[oftree]
/mnt/tftp/[rootfs] --> /mnt/mmc/[rootfs]
此后,如果要单独更新内核等,只需要进去barebox,然后
ubiattach /dev/nand0.root
Hit m for menu or any other key to stop autoboot: 3
type exit to get to the menu
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ubiattach /dev/nand0.root
ubi0: attached by fastmap
ubi0: fastmap pool size: 256
ubi0: fastmap WL pool size: 128
ubi0: registering /dev/nand0.root.ubi
ubi0: registering kernel as /dev/nand0.root.ubi.kernel
ubi0: registering oftree as /dev/nand0.root.ubi.oftree
ubi0: registering root as /dev/nand0.root.ubi.root
ubi0: attached mtd0 (name "nand0.root", size 1019 MiB) to ubi0
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 8148, bad PEBs: 4, corrupted PEBs: 0
ubi0: user volume: 3, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 41/13, WL threshold: 4096, image sequence number: 14055
ubi0: available PEBs: 0, total reserved PEBs: 8148, PEBs reserved for bad PEB handling: 156
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/ ls /dev
eeprom0 full
imx-ocotp m25p0
m25p0.barebox m25p0.barebox-environment
m25p0.kernel m25p0.oftree
mdio0-phy03 mem
nand0 nand0.barebox
nand0.barebox-environment nand0.barebox-environment.bb
nand0.barebox.bb nand0.bb
nand0.oob nand0.raw
nand0.root nand0.root.bb
nand0.root.ubi nand0.root.ubi.kernel
nand0.root.ubi.oftree nand0.root.ubi.root
null ram0
zero
barebox@Phytec phyCORE-i.MX6 Quad with NAND:/
然后直接用 ubiupdatevol 更新对应的文件就可以了。
TODO:
- 步骤号
- Barebox文档
- 怎样修改ip地址
- 怎样测试网络
- barebox的官方文档
- 补充bsp manual的其他信息