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

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。

BSP 16.1.0 版本barebox启动log
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 log
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 env log
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

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



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

此时的/dev:

ls /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
格式化ubi log,注意闪存大小可能不同,下同
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
挂载文件系统 log
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:

ls /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
建立内核分区 log
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
建立设备树分区 log
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
建立文件系统分区 log
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/内容:

ls /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]
写入kernel log
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]
写入设备树 log
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
写入文件系统 log
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,恭喜你已经完成了。

reset


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
ubiattach log
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的其他信息
  • No labels