Phytec中国的wiki
support@phytec.cn
热线:0755-61802110-803
当需要批量烧写镜像时,可以制作一张可用于自动烧录的SD卡,先从SD卡启动,SD卡烧录步骤结束后,从nand启动即可。以下是制作可用于自动烧录的SD卡步骤。
制作MX6的SD卡
制作mx6的sd卡有两种方法:
第一种方法是直接操作sd卡设备,先对sdcard分区操作, 然后再往sdcard的第一个分区前的位置写入barebox, 接着把所有的镜像文件复制到sdcard第一个分区上.
第二种方法是使用脚本生成可用于烧录的sdcard镜像, 然后把该镜像写入sdcard.
直接操作sd卡
1、linux 主机插入SD卡,查找SD卡设备
sudo fdisk -l
出现以下信息
Disk /dev/sdb: 7.3 GiB, 7820279808 bytes, 15273984 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x94e98953 Device Boot Start End Sectors Size Id Type /dev/sdb1 128 15273983 15273856 7.3G c W95 FAT32 (LBA)
此时SD卡是/dev/sdb, 有一个分区。
以下操作中的/dev/[sdb*] 需要对应更改为linux下的sdcard设备
2、sdcard的分区1的开始地址必须大于等于8192B, 此时可使用sfdisk工具对sdcard进行重新分区.
sudo sfdisk --force -u S /dev/sdb << EOF > start=8192, Id=c > EOF
执行sfdisk命令后的log如下:
This disk is currently in use - repartitioning is probably a bad idea. Umount all file systems, and swapoff all swap partitions on this disk. Use the --no-reread flag to suppress this check. Disk /dev/sdb: 7.3 GiB, 7820279808 bytes, 15273984 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x53e2198c Old situation: Device Boot Start End Sectors Size Id Type /dev/sdb1 128 15273983 15273856 7.3G c W95 FAT32 (LBA) >>> Created a new DOS disklabel with disk identifier 0xaeb5f164. /dev/sdb1: Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 7.3 GiB. Partition #1 contains a vfat signature. /dev/sdb2: Done. New situation: Disklabel type: dos Disk identifier: 0xaeb5f164 Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 15273983 15265792 7.3G c W95 FAT32 (LBA) The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8). Syncing disks.
此时, 需要先重新插拔sd卡, 从fdisk信息中可看出sd卡已经重新分区
sudo fdisk -l Disk /dev/sdb: 7.3 GiB, 7820279808 bytes, 15273984 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xaeb5f164 Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 15273983 15265792 7.3G c W95 FAT32 (LBA)
然后, 需要格式化sdcard的分区1
sudo mkfs.fat /dev/sdb1
3、将barebox烧入到第一个分区的前面8MB空间,通过这个步骤后开发板从SD卡启动后能进入barebox
sudo dd if=barebox.bin of=/dev/sdb bs=512 skip=2 seek=2 conv=fsync
4、在Linux挂载SD卡第一个分区,将barebox、内核、设备树、文件系统复制到SD卡第一个分区下
sudo mount /dev/sdb1 /mnt/sd (/mnt/sd 自定义挂载目录点) sudo cp barebox.bin /mnt/sd sudo cp zImage-phyboard-mira-imx6-3.bin /mnt/sd sudo cp zImage-imx6q-phytec-mira-rdk-nand.dtb /mnt/sd sudo cp phytec-qt5demo-image-phyboard-mira-imx6-3.ubifs /mnt/sd sudo umount /dev/sdb1
5、Linux取消挂载SD卡,拔出SD卡。
经过这个步骤后,SD卡已经有烧录了barebox,第一个分区的文件系统有了制作image的四个文件。
使用sdcard镜像文件
1、使用以下脚本生成可用于自动烧录的sdcard文件
带烧写环境的barebox-flash.bin 可参考以下章节的设置SD卡barebox的环境得到.
chmod +x ./mk_img.sh ./mk_img 1
2、将脚本生成的镜像文件写入sdcard设备中
sudo dd if=autoflash.img of=/dev/sdb bs=1M conv=fsync
制作AM335X 的SD卡
使用SD卡的格式化工具进行格式化:HP USB Disk Storage Format Tool v2.0.6 Portable.exe
注意:使用其他格式化工具可能导致无法启动SD卡。
格式化完成后,将AM335X的·镜像文件MLO、barebox、oftree、kernel、文件系统镜像复制到SD卡即可。
设置SD卡barebox的环境
1、将经过以上步骤的SD卡插入开发板,开发板设置从SD卡启动,在开机前3秒按下ENTER键进入barebox
2、barebox的/env/init下的脚本会在开机执行,在此目录下新建开机烧写nand脚本,
edit /env/init/updatenand
MX6 updatenand脚本内容如下
#!/bin/sh barebox_update -t nand /mnt/mmc/barebox.bin -y erase /dev/nand0.barebox-environment.bb ubiformat /dev/nand0.root -y ubiattach /dev/nand0.root ubimkvol -t static /dev/nand0.root.ubi kernel 8M ubimkvol -t static /dev/nand0.root.ubi oftree 1M ubimkvol -t dynamic /dev/nand0.root.ubi root 0 ubiupdatevol /dev/nand0.root.ubi.kernel /mnt/mmc/zImage-phyboard-mira-imx6-3.bin ubiupdatevol /dev/nand0.root.ubi.oftree /mnt/mmc/zImage-imx6q-phytec-mira-rdk-nand.dtb cp -v /mnt/mmc/phytec-qt5demo-image-phyboard-mira-imx6-3.ubifs /dev/nand0.root.ubi.root
mx6的这个环境配置是在barebox源码的defaultenv/defaultenv-2-base/init/目录下, 可把烧写脚本放在这个目录下, 然后重新编译barebox得到一个带有自动烧写环境的barebox.
AM335X updatenand脚本内容如下
#!/bin/sh mkdir /mnt/mmc mount /dev/mmc0.0 /mnt/mmc barebox_update -t MLO.nand /mnt/mmc/MLO -y barebox_update -t nand /mnt/mmc/barebox.bin -y erase /dev/nand0.bareboxenv.bb ubiformat /dev/nand0.root -y ubiattach /dev/nand0.root ubimkvol -t static /dev/nand0.root.ubi kernel 8M ubimkvol -t static /dev/nand0.root.ubi oftree 1M ubimkvol -t dynamic /dev/nand0.root.ubi root 0 ubiupdatevol /dev/nand0.root.ubi.kernel /mnt/mmc/zImage-phycore-am335x-1.bin ubiupdatevol /dev/nand0.root.ubi.oftree /mnt/mmc/zImage-am335x-phycore-rdk.dtb cp -v /mnt/mmc/phytec-qt5demo-image-phycore-am335x-1.ubifs /dev/nand0.root.ubi.root
如果需要制作多张用于am335x自动烧录的sdcard时, 可将第一张配置好的barebox环境即barebox.env文件复制到其他自动烧录的sdcard上, 其他的自动烧录卡就不需要再进barebox配置环境了.
3、保存barebox环境
saveenv
经过以上步骤,开机自动烧录的SD卡制作已经完成,批量烧写时可将这将SD卡插入开发板,然后设置从SD卡启动,SD卡启动后自动将image烧进nand,然后从nand启动即可。
测试
1、将制作好的SD卡插进开发板,设置从SD卡启动
2、能看到以下信息,表示SD卡烧录nand完成,
running /env/bin/init... Image Metadata: build: #1 Fri Aug 11 02:53:34 CST 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: 0xa22b85c3 imx-bbu-nand-fcb: Firmware @ page 256, size 269 pages has crc32: 0xa22b85c3 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 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 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 38 ubiformat: 4 bad eraseblocks found, numbers: 8148, 8149, 8150, 8151 ubiformat: formatting eraseblock 8151 -- 100 % complete 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: 64/39, WL threshold: 4096, image sequence number: 27071 ubi0: available PEBs: 7986, total reserved PEBs: 162, PEBs reserved for bad PEB handling: 156 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 [#################################################################]
3、取出SD卡,开发板设置从nand启动,nand已经烧录了完整镜像。