20161214_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 0930 - review 一下昨天的足跡
  • 1040 - <u-boot-imx>\include\configs\mx6ul_14x14_evk.h
  • 1105 - 修改 ${loadaddr}${fdt_addr} 的值
  • 1120 - 看來可以試著把 rootfs 燒錄到另一個 mtd partition 去
  • 1305 - 來燒錄 rootfs 吧
  • 1355 - 確認一下有沒有 tar 相關的 recipe
  • 1415 - 似乎還需要 bzip2 這個 recipe
  • 1430 - 理論上把 bootargs 裡的 ubi.mtd 改成 7 應該就可以了
  • 1445 - 卡在一樣的地方
  • 1505 - 又卡住了 - Starting kernel ...
  • 1520 - 正常的訊息是這樣
  • 1600 - 只要在 uboot 做過 saveenv 就會導致開機時卡在 Starting kernel ...
  • 1700 - 昨天改了 bootargs 也做過 saveenv 並不會導致開機時卡 Starting kernel ...
  • 1740 - 確認 rootfs 是在 mtd4 的狀況下去清掉 mtd3 是否還能正常開機
  • 1750 - winston 提到之後還要克服的點

0930

review 一下昨天的足跡

修改 mx6ul_14x14_evk.h 來達到以下的 dual image nand flash 配置

image

...
#define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),114m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),114m(rootfs_b),2m(config_b)"
...
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	CONFIG_VIDEO_MODE \
	"fdt_addr=0x83000000\0" \
	"fdt_high=0xffffffff\0"	  \
	"console=ttymxc0\0" \
	"bootargs=console=ttymxc0,115200 ubi.mtd=3 "  \
		"root=ubi0:rootfs rootfstype=ubifs "		     \
		"mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),114m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),114m(rootfs_b),2m(config_b)\0"\
	"bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
		"nand read ${fdt_addr} 0x5000000 0x100000;"\
		"bootz ${loadaddr} - ${fdt_addr}\0"
...

使用 bitbake u-boot-imx -c compile -vf
直接套 <u-boot-imx>\include\configs\mx6ul_14x14_evk.h

再使用 bitbake u-boot-imx -c deploy 得到 image

使用 mfgtool 燒錄

...
nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xda
nand: Macronix MX30LF2G18AC
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
gpmi-nand 1806000.gpmi-nand: mode:5 ,failed in set feature.
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
nand_read_bbt: bad block at 0x000002480000
nand_read_bbt: bad block at 0x00000de40000
nand_read_bbt: bad block at 0x00000f700000
nand_read_bbt: bad block at 0x00000f800000
mtd: bad character after partition (c)
gpmi-nand 1806000.gpmi-nand: driver registered.
...

看來似乎是 mtdparts 的值出了問題

正確的話之前是顯示下面的訊息

...
nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xda
nand: Macronix MX30LF2G18AC
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
gpmi-nand 1806000.gpmi-nand: mode:5 ,failed in set feature.
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
nand_read_bbt: bad block at 0x000002480000
nand_read_bbt: bad block at 0x00000de40000
nand_read_bbt: bad block at 0x00000f700000
nand_read_bbt: bad block at 0x00000f800000
4 cmdlinepart partitions found on MTD device gpmi-nand
Creating 4 MTD partitions on "gpmi-nand":
0x000000000000-0x000004000000 : "boot"
0x000004000000-0x000005000000 : "kernel"
0x000005000000-0x000006000000 : "dtb"
0x000006000000-0x000010000000 : "rootfs"
gpmi-nand 1806000.gpmi-nand: driver registered.

1040

<u-boot-imx>\include\configs\mx6ul_14x14_evk.h

...
#define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc) "
...
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	CONFIG_VIDEO_MODE \
	"fdt_addr=0x83000000\0" \
	"fdt_high=0xffffffff\0"	  \
	"console=ttymxc0\0" \
	"bootargs=console=ttymxc0,115200 ubi.mtd=3 "  \
		"root=ubi0:rootfs rootfstype=ubifs "		     \
		"mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc)\0"\
	"bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
		"nand read ${fdt_addr} 0x5000000 0x100000;"\
		"bootz ${loadaddr} - ${fdt_addr}\0"
...

得到我要的結果

...
nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xda
nand: Macronix MX30LF2G18AC
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
gpmi-nand 1806000.gpmi-nand: mode:5 ,failed in set feature.
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
nand_read_bbt: bad block at 0x000002480000
nand_read_bbt: bad block at 0x00000de40000
nand_read_bbt: bad block at 0x00000f700000
nand_read_bbt: bad block at 0x00000f800000
10 cmdlinepart partitions found on MTD device gpmi-nand
Creating 10 MTD partitions on "gpmi-nand":
0x000000000000-0x000000400000 : "boot"
0x000000400000-0x000000c00000 : "kernel_a"
0x000000c00000-0x000000e00000 : "dtb_a"
0x000000e00000-0x000007e00000 : "rootfs_a"
0x000007e00000-0x000008000000 : "config_a"
0x000008000000-0x000008800000 : "kernel_b"
0x000008800000-0x000008a00000 : "dtb_b"
0x000008a00000-0x00000fa00000 : "rootfs_b"
0x00000fa00000-0x00000fc00000 : "config_b"
0x00000fc00000-0x000010000000 : "misc"
gpmi-nand 1806000.gpmi-nand: driver registered.
...

1105

還要修改 ${loadaddr}${fdt_addr} 的值

分別指到 kernel_adtb_a 的起始位置

分別是 0x000000400000 和 0x000000c00000

得到以下的 <u-boot-imx>\include\configs\mx6ul_14x14_evk.h

...
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	CONFIG_VIDEO_MODE \
	"fdt_addr=0x83000000\0" \
	"fdt_high=0xffffffff\0"	  \
	"console=ttymxc0\0" \
	"bootargs=console=ttymxc0,115200 ubi.mtd=3 "  \
		"root=ubi0:rootfs rootfstype=ubifs "		     \
		"mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc)\0"\
	"bootcmd=nand read ${loadaddr} 0x400000 0x800000;"\
		"nand read ${fdt_addr} 0xc00000 0x100000;"\
		"bootz ${loadaddr} - ${fdt_addr}\0"
...

1120

使用 mfgtool 燒錄... ok

從 nandflash 開機... ok

icos init... ok

mtd partion... ok

root@M300:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00400000 00020000 "boot"
mtd1: 00800000 00020000 "kernel_a"
mtd2: 00200000 00020000 "dtb_a"
mtd3: 07000000 00020000 "rootfs_a"
mtd4: 00200000 00020000 "config_a"
mtd5: 00800000 00020000 "kernel_b"
mtd6: 00200000 00020000 "dtb_b"
mtd7: 07000000 00020000 "rootfs_b"
mtd8: 00200000 00020000 "config_b"
mtd9: 00400000 00020000 "misc"

看來可以試著把 rootfs 燒錄到另一個 mtd partition 去

下午再來試

1305

來燒錄 rootfs 吧

  • 把開發環境上的 images folder 掛載到 m300 上的 /tmp/images
    • cd /tmp
    • mkdir images
    • mount -t nfs 192.168.1.200:/home/jeffrey/M300/fsl-release-bsp/build_small/images images
  • Erasing rootfs partition b
    • flash_erase /dev/mtd7 0 0
    • ok
  • ubiformat
    • ubiformat /dev/mtd7
    • ok
  • Attaching UBI partition
    • ubiattach /dev/ubi_ctrl -m 7
    • ok
root@M300:/tmp# ubiattach /dev/ubi_ctrl -m 7
UBI device number 1, total 893 LEBs (113389568 bytes, 108.1 MiB), available 852 LEBs (108183552 bytes, 103.2 MiB), LEB size 126976 bytes (124.0 KiB)
  • create UBI volumes for UBI device number 1
  • ubimkvol /dev/ubi1 -Nrootfs -m
  • ok
root@M300:/tmp# ubimkvol /dev/ubi1 -Nrootfs -m
Set volume size to 108183552
Volume ID 0, size 852 LEBs (108183552 bytes, 103.2 MiB), LEB size 126976 bytes (124.0 KiB), dynamic, name "rootfs", alignment 1
  • mkdir -p /mnt/mtd7
  • mount -t ubifs ubi1:rootfs /mnt/mtd7
  • writting rootfs
    • tar -jxv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
    • fail
root@M300:/tmp# tar -jxv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
tar: invalid option -- 'j'
BusyBox v1.23.1 (2016-11-23 08:43:28 UTC) multi-call binary.

Usage: tar -[cxtzhvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR] [FILE]...

管他的... 把 j 拿掉

  • writting rootfs
    • tar -xv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
    • fail
root@M300:/tmp# tar -xv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
tar: invalid tar magic

shit!

1355

確認一下有沒有 tar 相關的 recipe

➜  sources git:(nandflash) find . -name "tar*"
./poky/meta/lib/oeqa/targetcontrol.py
./poky/meta/lib/oeqa/utils/targetbuild.py
./poky/meta/recipes-devtools/gcc/gcc-4.8/target-gcc-includedir.patch
./poky/meta/recipes-devtools/dpkg/dpkg/tarfix.patch
./poky/meta/recipes-devtools/dpkg/dpkg/tar-error-code.patch
./poky/meta/recipes-extended/tar
./poky/meta/recipes-extended/tar/tar-replacement-native_1.28.bb
./poky/meta/recipes-extended/tar/tar.inc
./poky/meta/recipes-extended/tar/tar_1.17.bb
./poky/meta/recipes-extended/tar/tar
./poky/meta/recipes-extended/tar/tar-1.17
./poky/meta/recipes-extended/tar/tar_1.28.bb
./poky/meta/recipes-extended/iputils/files/debian/targets.diff
./poky/scripts/lib/bsp/substrate/target
./poky/bitbake/lib/toaster/toastergui/templates/targets.html
./poky/bitbake/lib/toaster/toastergui/templates/target.html

修改 fsl-release-bsp/build_small/conf/local.conf - 新增 tar

...
IMAGE_INSTALL_append += " nfs-utils tar"
...

build image... ok

mfgtool 燒錄... ok

root@M300:~# tar --version
tar (GNU tar) 1.28
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.

有啦...

再來燒錄 rootfs

  • 把開發環境上的 images folder 掛載到 m300 上的 /tmp/images
    • cd /tmp
    • mkdir images
    • mount -t nfs 192.168.1.200:/home/jeffrey/M300/fsl-release-bsp/build_small/images images
  • Erasing rootfs partition b
    • flash_erase /dev/mtd7 0 0
  • ubiformat
    • ubiformat /dev/mtd7
  • Attaching UBI partition
    • ubiattach /dev/ubi_ctrl -m 7
  • create UBI volumes for UBI device number 1
  • ubimkvol /dev/ubi1 -Nrootfs -m
  • mkdir -p /mnt/mtd7
  • mount -t ubifs ubi1:rootfs /mnt/mtd7
  • writting rootfs
    • tar -jxv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
    • fail
root@M300:/tmp# tar -jxv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

shit!

1415

參考 http://stackoverflow.com/questions/26958741/extract-tar-the-tar-bz2-file-error

似乎還需要 bzip2 這個 recipe

➜  sources git:(nandflash) find . -name "bzip2*"
./poky/meta/files/common-licenses/bzip2
./poky/meta/recipes-extended/bzip2
./poky/meta/recipes-extended/bzip2/bzip2_1.0.6.bb
./poky/meta/recipes-extended/bzip2/bzip2-1.0.6

修改 fsl-release-bsp/build_small/conf/local.conf - 新增 bzip2

...
IMAGE_INSTALL_append += " nfs-utils tar bzip2"
...

build image... ok

mfgtool 燒錄... ok

root@M300:~# bzip2 --version
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

   Copyright (C) 1996-2010 by Julian Seward.

   This program is free software; you can redistribute it and/or modify
   it under the terms set out in the LICENSE file, which is included
   in the bzip2-1.0.6 source distribution.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   LICENSE file for more details.

bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.

再來燒錄 rootfs

  • 把開發環境上的 images folder 掛載到 m300 上的 /tmp/images
    • cd /tmp
    • mkdir images
    • mount -t nfs 192.168.1.200:/home/jeffrey/M300/fsl-release-bsp/build_small/images images
  • Erasing rootfs partition b
    • flash_erase /dev/mtd7 0 0
  • ubiformat
    • ubiformat /dev/mtd7
  • Attaching UBI partition
    • ubiattach /dev/ubi_ctrl -m 7
  • create UBI volumes for UBI device number 1
  • ubimkvol /dev/ubi1 -Nrootfs -m
  • mkdir -p /mnt/mtd7
  • mount -t ubifs ubi1:rootfs /mnt/mtd7
  • writting rootfs
    • tar -jxv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
    • ok
  • Unmounting rootfs partition
    • umount /mnt/mtd7
    • ok

1430

重開機進 U-Boot

=> printenv bootargs
bootargs=console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc)

理論上把 bootargs 裡的 ubi.mtd 改成 7 應該就可以了

=> setenv bootargs console=ttymxc0,115200 ubi.mtd=7 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc)
=> printenv bootargs                                                                     bootargs=console=ttymxc0,115200 ubi.mtd=7 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc)
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x800000 -- 100% complete.
Writing to NAND... OK

開機吧...


NAND read: device 0 offset 0x400000, size 0x800000
 8388608 bytes read: OK

NAND read: device 0 offset 0xc00000, size 0x100000
 1048576 bytes read: OK
Kernel image @ 0x80800000 [ 0x000000 - 0x47d400 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300a194

Starting kernel ...

shit! 卡住了...

1445

bootargs 裡的 ubi.mtd 改回來

卡在一樣的地方

mfgtool 燒錄... ok

再來燒錄 rootfs

  • 把開發環境上的 images folder 掛載到 m300 上的 /tmp/images
    • cd /tmp
    • mkdir images
    • mount -t nfs 192.168.1.200:/home/jeffrey/M300/fsl-release-bsp/build_small/images images
  • Erasing rootfs partition b
    • flash_erase /dev/mtd7 0 0
  • ubiformat
    • ubiformat /dev/mtd7
  • Attaching UBI partition
    • ubiattach /dev/ubi_ctrl -m 7
  • create UBI volumes for UBI device number 1
  • ubimkvol /dev/ubi1 -Nrootfs -m
  • mkdir -p /mnt/mtd7
  • mount -t ubifs ubi1:rootfs /mnt/mtd7
  • writting rootfs
    • tar -jxv -C /mnt/mtd7 -f images/core-image-minimal-imx6ulevk.tar.bz2
  • Unmounting rootfs partition
    • umount /mnt/mtd7

重開機

U-Boot 啥都不改

開機成功...

1505

=> printenv bootargs
bootargs=console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc)

參考 http://eeepage.info/u-boot%E7%92%B0%E5%A2%83%E8%AE%8A%E9%87%8F%E7%9A%84%E8%A8%AD%E7%BD%AE%E8%88%87%E4%BD%BF%E7%94%A8/

bootargs 的值有用單引號括起來

setenv bootargs 'initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0 mem=64M init=/linuxrc'

我也來試試

setenv bootargs 'console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),112m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),112m(rootfs_b),2m(config_b),-(misc)'

先保持原來的值就好

又卡住了


NAND read: device 0 offset 0x400000, size 0x800000
 8388608 bytes read: OK

NAND read: device 0 offset 0xc00000, size 0x100000
 1048576 bytes read: OK
Kernel image @ 0x80800000 [ 0x000000 - 0x47d400 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300a194

Starting kernel ...

1520

mfgtool 燒錄... ok

開機... ok


NAND read: device 0 offset 0x400000, size 0x800000
 8388608 bytes read: OK

NAND read: device 0 offset 0xc00000, size 0x100000
 1048576 bytes read: OK
Kernel image @ 0x80800000 [ 0x000000 - 0x47d400 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300a194

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 3.14.52-1.1.1_ga+gdb1bcba (build@30e08a478d9e) (gcc version 4.9.2 (GCC) ) #1 SMP PREEMPT Mon Dec 12 06:07:31 UTC 2016
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: Freescale i.MX6 UltraLite 14x14 EVK Board
...

正常的訊息是這樣

1600

目前是發現只要在 uboot 做過 saveenv 就會導致開機時卡在 Starting kernel ...

winston 給了一些建議

  • mtdparts 不要一次改那麼多
  • mtdparts 裡的 boot 大笑最好先不要動
  • 如果 rootfs 始可寫的話那就直接寫就好了

我剛剛試了 如果 rootfs 始可寫的話那就直接寫就好了

燒錄 rootfs 的動作變成這樣

  • 把開發環境上的 images folder 掛載到 m300 上的 /tmp/images
    • cd /tmp
    • mkdir images
    • mount -t nfs 192.168.1.200:/home/jeffrey/M300/fsl-release-bsp/build_small/images images
  • writting rootfs
    • tar -jxv -C / -f images/core-image-minimal-imx6ulevk.tar.bz2

雖然解開的過程會有一些錯誤

不過這也不失為一個參考備案

1700

看昨天的日記發現我改了 bootargs 也做過 saveenv

結果並不會導致開機時卡在 Starting kernel ...

  • 昨天原本的
    • mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs)
    • 使用 setenv 直接改 mtdparts
    • mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),64m(rootfs),-(others)
    • saveenv
    • 不會導致開機時卡在 Starting kernel ...
  • 今天的
    • mtdparts=gpmi-nand:4m(boot),8m(kernel_a),2m(dtb_a),114m(rootfs_a),2m(config_a),8m(kernel_b),2m(dtb_b),114m(rootfs_b),2m(config_b)"
    • saveenv
    • 開機時卡在 Starting kernel ...

再來玩一次... 先新增一個 test 就好

  • mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),64m(rootfs),-(test)

<u-boot-imx>\include\configs\mx6ul_14x14_evk.h

...
#define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),64m(rootfs),-(test) "
...
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	CONFIG_VIDEO_MODE \
	"fdt_addr=0x83000000\0" \
	"fdt_high=0xffffffff\0"	  \
	"console=ttymxc0\0" \
	"bootargs=console=ttymxc0,115200 ubi.mtd=3 "  \
		"root=ubi0:rootfs rootfstype=ubifs "		     \
		"mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),64m(rootfs),-(test)\0"\
	"bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
		"nand read ${fdt_addr} 0x5000000 0x100000;"\
		"bootz ${loadaddr} - ${fdt_addr}\0"
...
  • bitbake u-boot-imx -c compile -vf
  • bitbake u-boot-imx -c deploy

mfgtool 燒錄... ok

開機... ok

  • 重開機進 uboot
  • setenv hello world
  • saveenv
  • 重開機
    • 不會導致開機時卡在 Starting kernel ...

哈哈

root@M300:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 04000000 00020000 "boot"
mtd1: 01000000 00020000 "kernel"
mtd2: 01000000 00020000 "dtb"
mtd3: 04000000 00020000 "rootfs"
mtd4: 06000000 00020000 "test"

燒錄 rootfs

  • 把開發環境上的 images folder 掛載到 m300 上的 /tmp/images
    • cd /tmp
    • mkdir images
    • mount -t nfs 192.168.1.200:/home/jeffrey/M300/fsl-release-bsp/build_small/images images
  • Erasing rootfs partition test
    • flash_erase /dev/mtd4 0 0
  • ubiformat
    • ubiformat /dev/mtd4
  • Attaching UBI partition
    • ubiattach /dev/ubi_ctrl -m 4
  • create UBI volumes for UBI device number 1
  • ubimkvol /dev/ubi1 -Nrootfs -m
  • mkdir -p /mnt/mtd4
  • mount -t ubifs ubi1:rootfs /mnt/mtd4
  • writting rootfs
    • tar -jxv -C /mnt/mtd4 -f images/core-image-minimal-imx6ulevk.tar.bz2
  • Unmounting rootfs partition
    • umount /mnt/mtd4

重開機進 uboot

把 bootargs 裡的 ubi.mtd 從 3 改成 4 在存起來

=> printenv bootargs
bootargs=console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),64m(rootfs),-(test)
=> setenv bootargs console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs mtdpa=> =gpmi-nand:64m(boot),16m(kernel),16m(dtb),64m(rootfs),-(test)
=> printenv bootargs
bootargs=console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),64m(rootfs),-(test)
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x800000 -- 100% complete.
Writing to NAND... OK

重開機

...
UBI: scanning is finished
UBI: attached mtd4 (name "test", size 96 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
UBI: VID header offset: 2048 (aligned 2048), data offset: 4096
UBI: good PEBs: 761, bad PEBs: 7, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 440906594
UBI: available PEBs: 0, total reserved PEBs: 761, PEBs reserved for bad PEB handling: 33
UBI: background thread "ubi_bgt0d" started, PID 71
snvs_rtc 20cc034.snvs-rtc-lp: setting system clock to 2016-12-14 09:27:50 UTC (1481707670)
UBIFS: mounted UBI device 0, volume 0, name "rootfs", R/O mode
UBIFS: LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
UBIFS: FS size: 90533888 bytes (86 MiB, 713 LEBs), journal size 4571136 bytes (4 MiB, 36 LEBs)
UBIFS: reserved for root: 4276138 bytes (4175 KiB)
UBIFS: media format: w4/r0 (latest is w4/r0), UUID 6132501A-0DE5-4B0A-963E-16ACF6542713, small LPT model
VFS: Mounted root (ubifs filesystem) readonly on device 0:12.
...

帥喔... 要感謝 winston

1740

感謝 winston 時又得到好的建議

  • 確認 rootfs 是在 mtd4 的狀況下去清掉 mtd3 是否還能正常開機

馬上試

  • 把開發環境上的 images folder 掛載到 m300 上的 /tmp/images
    • cd /tmp
    • mkdir images
    • mount -t nfs 192.168.1.200:/home/jeffrey/M300/fsl-release-bsp/build_small/images images
  • Erasing rootfs partition rootfs
    • flash_erase /dev/mtd3 0 0

重開機

...
UBI: attaching mtd4 to ubi0
UBI: scanning is finished
UBI: attached mtd4 (name "test", size 96 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
UBI: VID header offset: 2048 (aligned 2048), data offset: 4096
UBI: good PEBs: 761, bad PEBs: 7, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 440906594
UBI: available PEBs: 0, total reserved PEBs: 761, PEBs reserved for bad PEB handling: 33
UBI: background thread "ubi_bgt0d" started, PID 71
snvs_rtc 20cc034.snvs-rtc-lp: setting system clock to 2016-12-14 09:41:00 UTC (1481708460)
UBIFS: mounted UBI device 0, volume 0, name "rootfs", R/O mode
UBIFS: LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
UBIFS: FS size: 90533888 bytes (86 MiB, 713 LEBs), journal size 4571136 bytes (4 MiB, 36 LEBs)
UBIFS: reserved for root: 4276138 bytes (4175 KiB)
UBIFS: media format: w4/r0 (latest is w4/r0), UUID 6132501A-0DE5-4B0A-963E-16ACF6542713, small LPT model
VFS: Mounted root (ubifs filesystem) readonly on device 0:12.
...

1750

winston 提到之後還要克服的點

  • linux 去改 uboot 的 環境變數
  • 怎麼從 uboot 來看
    • kernel partion 是否完整
    • rootfs ubi partition 是否完整
  • 不完整的 kernel partion 或 rootfs ubi partition 均會導致系統開機異常
    • uboot 要能在此時切換到備援的 partition
⚠️ **GitHub.com Fallback** ⚠️