20171025_jeffrey - silenceuncrio/diary GitHub Wiki

0855

review

1015

่ˆˆๆฒ–ๆฒ–็š„ๆ”นๅฏซไบ†ไธ€้šป ucl2.xml

<UCL>

  <CFG>
    <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
  </CFG>

  <LIST name="SDCard" desc="Choose SD Card as media">

  <CMD state="BootStrap" type="boot" 
    body="BootStrap" file ="firmware/u-boot-imx6ul%6uluboot%_sd.imx">Loading U-boot</CMD>
  <CMD state="BootStrap" type="load" 
    file="firmware/zImage" address="0x80800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading Kernel.</CMD>
  <CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading Initramfs.</CMD>
  <CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul-%6uldtb%%ldo%.dtb" address="0x83000000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading device tree.</CMD>


  <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>



  <!-- create partition -->
  <CMD state="Updater" type="push" 
    body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
  <CMD state="Updater" type="push" 
    body="$ tar xf $FILE "> Partitioning...</CMD>
  <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...</CMD>



  <!-- Dual Image Layout

  Device         Boot   Start     End Sectors  Size Id Type
  /dev/mmcblk1p1        20480  102399   81920   40M  c W95 FAT32 (LBA)
  /dev/mmcblk1p2       102400  184319   81920   40M  c W95 FAT32 (LBA)
  /dev/mmcblk1p3       184320 7520255 7335936  3.5G  5 Extended
  /dev/mmcblk1p5       204800 1023999  819200  400M 83 Linux
  /dev/mmcblk1p6      1024000 1843199  819200  400M 83 Linux
  /dev/mmcblk1p7      1843201 1925119   81919   40M 83 Linux
  /dev/mmcblk1p8      1925121 2007039   81919   40M 83 Linux
  /dev/mmcblk1p9      2097152 7520255 5423104  2.6G 83 Linux


  /dev/mmcblk1p1 - 40M - kenel_a & dtb_a
  /dev/mmcblk1p2 - 40M - kenel_b & dtb_b

  /dev/mmcblk1p5 - 400M - rootfs_a
  /dev/mmcblk1p6 - 400M - rootfs_b

  /dev/mmcblk1p7 - 40M - config_a
  /dev/mmcblk1p8 - 40M - config_b

  /dev/mmcblk1p9 - others - user_data

  -->






  <!-- burn uboot -->
  <CMD state="Updater" type="push" 
    body="$ dd if=/dev/zero of=/dev/mmcblk%mmc% bs=1k seek=384 conv=fsync count=129">clear u-boot arg</CMD>
  <CMD state="Updater" type="push" body="$ echo 0 > /sys/block/mmcblk%mmc%boot0/force_ro">access boot partition 1</CMD>
  <CMD state="Updater" type="push" 
    body="send" file="files/u-boot-imx6ul%6uluboot%_sd.imx">Sending u-boot.bin</CMD>
  <CMD state="Updater" type="push" 
    body="$ dd if=$FILE of=/dev/mmcblk1boot0 bs=512 seek=2">write U-Boot to sd card</CMD>
  <CMD state="Updater" type="push" 
    body="$ echo 1 > /sys/block/mmcblk%mmc%boot0/force_ro"> re-enable read-only access </CMD>
  <CMD state="Updater" type="push" 
    body="$ mmc bootpart enable 1 1 /dev/mmcblk%mmc%">enable boot partion 1 to boot</CMD>



  <CMD state="Updater" type="push" 
    body="$ while [ ! -e /dev/mmcblk%mmc%p1 ]; do sleep 1; echo \"waiting...\"; done ">Waiting for the partition ready - kernel_a and dtb_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ while [ ! -e /dev/mmcblk%mmc%p2 ]; do sleep 1; echo \"waiting...\"; done ">Waiting for the partition ready - kernel_b and dtb_b</CMD>

  <CMD state="Updater" 
    type="push" body="$ mkfs.vfat /dev/mmcblk%mmc%p1">Formatting partition - kernel_a and dtb_a</CMD>
  <CMD state="Updater" 
    type="push" body="$ mkfs.vfat /dev/mmcblk%mmc%p2">Formatting partition - kernel_a and dtb_a</CMD>

  <CMD state="Updater" 
    type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p1"/>
  <CMD state="Updater" 
    type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
  <CMD state="Updater" 
    type="push" body="$ mount -t vfat /dev/mmcblk%mmc%p1 /mnt/mmcblk%mmc%p1"/>
  <CMD state="Updater" 
    type="push" body="$ mount -t vfat /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>

  <!-- burn dual zImage -->
  <CMD state="Updater" type="push" 
    body="send" file="files/zImage">Sending kernel</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage">write kernel image to partition - kernel_a and dtb_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p2/zImage">write kernel image to partition - kernel_b and dtb_b</CMD>

  <!-- burn dual dtb -->
  <CMD state="Updater" type="push" 
    body="send" file="files/imx6ul-%6uldtb%%ldo%.dtb">Sending Device Tree file</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ul-%6uldtb%.dtb">write device tree to partition - kernel_a and dtb_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p2/imx6ul-%6uldtb%.dtb">write device tree to partition - kernel_b and dtb_b</CMD>

  <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p1">Unmounting vfat partition - kernel_a and dtb_a</CMD>
  <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p2">Unmounting vfat partition - kernel_b and dtb_b</CMD>



  <!-- burn dual rootfs -->
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p5">Formatting partition - rootfs_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p6">Formatting partition - rootfs_b</CMD>

  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p5"/>
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p6"/>

  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p5 /mnt/mmcblk%mmc%p5"/>
  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p6 /mnt/mmcblk%mmc%p6"/>

  <CMD state="Updater" type="push" 
    body="pipe tar -jxv -C /mnt/mmcblk%mmc%p5" file="files/rootfs_nogpu.tar.bz2">Sending and writting rootfs to partition - rootfs_a</CMD>
  <CMD state="Updater" type="push" 
    body="frf">Finishing rootfs write to partition - rootfs_a</CMD>

  <CMD state="Updater" type="push" 
    body="pipe tar -jxv -C /mnt/mmcblk%mmc%p6" file="files/rootfs_nogpu.tar.bz2">Sending and writting rootfs to partition - rootfs_b</CMD>
  <CMD state="Updater" type="push" 
    body="frf">Finishing rootfs write to partition - rootfs_b</CMD>

  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p5">Unmounting rootfs partition - rootfs_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p6">Unmounting rootfs partition - rootfs_b</CMD>



  <!-- prepare dual configurations -->
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p7">Formatting partition - config_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p8">Formatting partition - config_b</CMD>



  <!-- prepare user data -->
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p9">Formatting partition - user_data</CMD>



  <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>

  </LIST>

</UCL>

็„กๅฅˆ uboot ๅช่ชๅพ— 4 ๅ€‹

=> mmc part

Partition Map for MMC device 1  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     20480           81920           d217c27e-01     0c
  2     102400          81920           d217c27e-02     0c
  3     184320          7335936         d217c27e-03     05 Extd
  5     204800          819200          d217c27e-05     83
bad MBR sector signature 0x2d70

ไฟฎๆ”น mmcroot ่ฉฆ่‘—ๅพž part 5 ้–‹ๆฉŸ

=> printenv mmcroot
mmcroot=/dev/mmcblk1p2 rootwait rw
=> setenv mmcroot /dev/mmcblk1p5 rootwait rw
=> printenv mmcroot
mmcroot=/dev/mmcblk1p5 rootwait rw

้›–็„ถ้ †ๅˆฉ้€ฒๅ…ฅไบ† rootfs (ๆ‡‰่ฉฒๆ˜ฏ rootfs_a)

ไธ้Ž linux ไนŸๅช่ชๅพ— 4 ๅ€‹

root@m300e:~# ls /dev/mmc* -al
brw-rw----    1 root     disk      179,   0 Sep 29 01:36 /dev/mmcblk1
brw-rw----    1 root     disk      179,   8 Sep 29 01:36 /dev/mmcblk1boot0
brw-rw----    1 root     disk      179,  16 Sep 29 01:36 /dev/mmcblk1boot1
brw-rw----    1 root     disk      179,   1 Sep 29 01:36 /dev/mmcblk1p1
brw-rw----    1 root     disk      179,   2 Sep 29 01:36 /dev/mmcblk1p2
brw-rw----    1 root     disk      179,   3 Sep 29 01:36 /dev/mmcblk1p3
brw-rw----    1 root     disk      179,   5 Sep 29 01:36 /dev/mmcblk1p5
brw-rw----    1 root     disk      179,  24 Sep 29 01:36 /dev/mmcblk1rpmb
root@m300e:~#

1040

ๅ‰›ๅ‰›ๅ’Œ ariel ่Šไบ†ไธ€ไธ‹็›ฎๅ‰้‡ๅˆฐ็š„ๅ›ฐ้›ฃ

ๆˆ‘ๆๅˆฐไธ€ๅ€‹ๆƒณๆณ•

ๆ€Ž้บผไพ†ๅˆฉ็”จ้€™ๅ››ๅ€‹ partitions

  • partition 1
    • ่ตทๅง‹ไฝ็ฝฎไฝœไบ›่จฑ shift ๅฏไฟ็•™็ตฆ uboot ็”จ
    • zImage_a
    • zImage_b
    • dtb_a
    • dtb_b
  • partition 2
    • rootfs_a
  • partition 3
    • rootfs_b
  • partition 4
    • config_a
    • config_b
    • log
    • user_data

ไธ้Ž้€™ไบ›ๆƒณๆณ•้ƒฝ้œ€่ฆๅฏฆไฝœไพ†้ฉ—่ญ‰ๅ…ถๅฏ่กŒๆ€ง

1055

้‡ๆ–ฐๅ†ๅพž mksdcard.sh ๅ‡บ็™ผ

#!/bin/sh

# partition size in MB
BOOT_ROM_SIZE=10

# wait for the SD/MMC device node ready
while [ ! -e $1 ]
do
sleep 1
echo โ€œwait for $1 appearโ€
done

# call sfdisk to create partition table
# destroy the partition table
node=$1
dd if=/dev/zero of=${node} bs=1024 count=1

sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,100M,C
100M,400M,L
500M,400M,L
900M,,L
EOF

้€™ๆจฃๅˆ‡ๅ‡บไพ†็š„ partition ๅฆ‚ไธ‹

Device         Boot   Start     End Sectors  Size Id Type
/dev/mmcblk1p1        20480  184319  163840   80M  c W95 FAT32 (LBA)
/dev/mmcblk1p2       204800 1023999  819200  400M 83 Linux
/dev/mmcblk1p3      1024000 1843199  819200  400M 83 Linux
/dev/mmcblk1p4      1843200 7520255 5677056  2.7G 83 Linux

1125

ไฟฎๆ”น ucl2.xml ไพ†่ฉฆ่ฉฆ

<UCL>

  <CFG>
    <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
  </CFG>

  <LIST name="SDCard" desc="Choose SD Card as media">

  <CMD state="BootStrap" type="boot" 
    body="BootStrap" file ="firmware/u-boot-imx6ul%6uluboot%_sd.imx">Loading U-boot</CMD>
  <CMD state="BootStrap" type="load" 
    file="firmware/zImage" address="0x80800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading Kernel.</CMD>
  <CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading Initramfs.</CMD>
  <CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul-%6uldtb%%ldo%.dtb" address="0x83000000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading device tree.</CMD>


  <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>



  <!-- create partition -->
  <CMD state="Updater" type="push" 
    body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
  <CMD state="Updater" type="push" 
    body="$ tar xf $FILE "> Partitioning...</CMD>
  <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...</CMD>



  <!-- Dual Image Layout

  Device         Boot   Start     End Sectors  Size Id Type
  /dev/mmcblk1p1        20480  184319  163840   80M  c W95 FAT32 (LBA)
  /dev/mmcblk1p2       204800 1023999  819200  400M 83 Linux
  /dev/mmcblk1p3      1024000 1843199  819200  400M 83 Linux
  /dev/mmcblk1p4      1843200 7520255 5677056  2.7G 83 Linux

  /dev/mmcblk1p1 - 80M
    - zImage_a
    - dtb_a
    - zImage_b
    - dtb_b
  /dev/mmcblk1p2 - 400M
    - rootfs_a
  /dev/mmcblk1p3 - 400M
    - rootfs_b
  /dev/mmcblk1p4 - 2.7G
    - config_a
    - config_b
    - log
    - user_data

  -->






  <!-- burn uboot -->
  <CMD state="Updater" type="push" 
    body="$ dd if=/dev/zero of=/dev/mmcblk%mmc% bs=1k seek=384 conv=fsync count=129">clear u-boot arg</CMD>
  <CMD state="Updater" type="push" body="$ echo 0 > /sys/block/mmcblk%mmc%boot0/force_ro">access boot partition 1</CMD>
  <CMD state="Updater" type="push" 
    body="send" file="files/u-boot-imx6ul%6uluboot%_sd.imx">Sending u-boot.bin</CMD>
  <CMD state="Updater" type="push" 
    body="$ dd if=$FILE of=/dev/mmcblk1boot0 bs=512 seek=2">write U-Boot to sd card</CMD>
  <CMD state="Updater" type="push" 
    body="$ echo 1 > /sys/block/mmcblk%mmc%boot0/force_ro"> re-enable read-only access </CMD>
  <CMD state="Updater" type="push" 
    body="$ mmc bootpart enable 1 1 /dev/mmcblk%mmc%">enable boot partion 1 to boot</CMD>



  <CMD state="Updater" type="push" 
    body="$ while [ ! -e /dev/mmcblk%mmc%p1 ]; do sleep 1; echo \"waiting...\"; done ">Waiting for the partition 1 ready</CMD>

  <CMD state="Updater" 
    type="push" body="$ mkfs.vfat /dev/mmcblk%mmc%p1">Formatting partition 1</CMD>

  <CMD state="Updater" 
    type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p1"/>
  <CMD state="Updater" 
    type="push" body="$ mount -t vfat /dev/mmcblk%mmc%p1 /mnt/mmcblk%mmc%p1"/>

  <!-- burn dual zImage -->
  <CMD state="Updater" type="push" 
    body="send" file="files/zImage">Sending kernel</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage_a">write kernel image to partition 1 - zImage_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage_b">write kernel image to partition 1 - zImage_b</CMD>

  <!-- burn dual dtb -->
  <CMD state="Updater" type="push" 
    body="send" file="files/imx6ul-%6uldtb%%ldo%.dtb">Sending Device Tree file</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ul-%6uldtb%_a.dtb">write device tree to partition - dtb_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ul-%6uldtb%_b.dtb">write device tree to partition - dtb_b</CMD>

  <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p1">Unmounting vfat partition 1</CMD>



  <!-- burn dual rootfs -->
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p2">Formatting partition 2 - rootfs_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p3">Formatting partition 3 - rootfs_b</CMD>

  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p3"/>

  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>
  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p3 /mnt/mmcblk%mmc%p3"/>

  <CMD state="Updater" type="push" 
    body="pipe tar -jxv -C /mnt/mmcblk%mmc%p2" file="files/rootfs_nogpu.tar.bz2">Sending and writting rootfs to partition 2</CMD>
  <CMD state="Updater" type="push" 
    body="frf">Finishing rootfs write to partition 2</CMD>

  <CMD state="Updater" type="push" 
    body="pipe tar -jxv -C /mnt/mmcblk%mmc%p3" file="files/rootfs_nogpu.tar.bz2">Sending and writting rootfs to partition 3</CMD>
  <CMD state="Updater" type="push" 
    body="frf">Finishing rootfs write to partition 3</CMD>

  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p2">Unmounting partition 2</CMD>
  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p3">Unmounting partition 3</CMD>



  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p4">Formatting partition 4</CMD>

  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4"/>

  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p4 /mnt/mmcblk%mmc%p4"/>

  <!-- prepare dual configurations -->
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4/config_a"/>
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4/config_b"/>

  <!-- prepare user data -->
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4/user_data"/>

  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p4">Unmounting partition 4</CMD>



  <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>

  </LIST>

</UCL>

1150

้–‹ๆฉŸ้€ฒ uboot

็œ‹ไธ€ไธ‹ mmc ็š„ partition ่จŠๆฏ

=> mmc part

Partition Map for MMC device 1  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     20480           163840          0cd81875-01     0c
  2     204800          819200          0cd81875-02     83
  3     1024000         819200          0cd81875-03     83
  4     1843200         5677056         0cd81875-04     83

1300

ๅ…ˆ่ฉฆ่‘—ๆŠŠ p2 ็š„ rootfs_a ๅธถ่ตทไพ†

ๅƒ่€ƒๆ˜จๅคฉ็š„ๆƒ…ๅ ฑ

emmc ่ฃก็š„ uboot ๅšไบ†ไธ‹่ฟฐ้€™ไบ›ไบ‹

  • mmc dev ${mmcdev};
  • mmc dev ${mmcdev};
  • mmc rescan;
  • setenv bootargs console=${console},${baudrate} root=${mmcroot}
  • fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
  • fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
  • bootz ${loadaddr} - ${fdt_addr};

็›คไธ€ไธ‹ๆฏๅ€‹่ฎŠๆ•ธ็›ฎๅ‰็š„ๅ€ผ

  • ${mmcdev} = 1
  • ${console} = ttymxc0
  • ${baudrate} = 115200
  • ${mmcroot} = /dev/mmcblk1p2 rootwait rw
  • ${mmcpart} = 1
  • ${loadaddr} = 0x80800000
  • ${image} = zImage
  • ${fdt_addr} = 0x83000000
  • ${fdt_file} = imx6ul-14x14-evk.dtb

ๅ› ๆ‡‰็›ฎๅ‰็š„็‹€ๆณ

ๆˆ‘ๅฆ‚ๆžœ่ฆๆŠŠ dual image a ๅธถ่ตทไพ†็š„่ฉฑ

ๆˆ‘้œ€่ฆ็š„ๆˆๅ“กๅฆ‚ไธ‹

  • /dev/mmcblk1p1
    • zImage_a
    • dtb_a
  • /dev/mmcblk1p2
    • rootfs_a

ๆ‰€ไปฅๆˆ‘้œ€่ฆไฟฎๆ”น็š„ uboot env ่ฎŠๆ•ธๅฆ‚ไธ‹

  • ${image} = zImage_a
  • ${fdt_file} = imx6ul-14x14-evk.dtb

่ฉฆ่ฉฆ็œ‹ๅง

=> setenv image zImage_a
=> setenv fdt_file imx6ul-14x14-evk_a.dtb
=> printenv image
image=zImage_a
=> printenv fdt_file
fdt_file=imx6ul-14x14-evk_a.dtb

่ฉฆ่‘—้–‹ๆฉŸ่ฉฆ่ฉฆ - run bootcmd

rootfs ๆŽ›่ผ‰ๆˆๅŠŸ

ไธ้Žไธ็Ÿฅ้“ๆ€Ž้บผๅพ—็Ÿฅ็›ฎๅ‰ rootfs ๅˆฐๅบ•ๆ˜ฏๅพžๅ“ชๅ€‹ partition ้–‹ๆฉŸ

df ็œ‹ไธๅ‡บไพ†

root@m300e:~# df
Filesystem           1024-blocks    Used Available Use% Mounted on
/dev/root               388480     68542    299458  19% /
devtmpfs                 90860         0     90860   0% /dev
tmpfs                   254892       172    254720   0% /run
tmpfs                   254892        32    254860   0% /var/volatile

mount ไนŸ็œ‹ไธๅ‡บไพ†

root@m300e:~# mount
/dev/root on / type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=90860k,nr_inodes=22715,mode=755)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /var/volatile type tmpfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)

ๅšๅ€‹่จ˜่™Ÿๅ…ˆ

root@m300e:/# echo rootfs_a > /.lable
root@m300e:/# cat /.lable
rootfs_a

้‡้–‹ๆฉŸ้€ฒ uboot

่ฉฆ่‘—ๆŠŠ dual image b ๅธถ่ตทไพ†

ๆˆ‘้œ€่ฆ็š„ๆˆๅ“กๅฆ‚ไธ‹

  • /dev/mmcblk1p1
    • zImage_b
    • dtb_b
  • /dev/mmcblk1p3
    • rootfs_b

ๆ‰€ไปฅๆˆ‘้œ€่ฆไฟฎๆ”น็š„ uboot env ่ฎŠๆ•ธๅฆ‚ไธ‹

  • ${mmcroot} = /dev/mmcblk1p3 rootwait rw
  • ${image} = zImage_b
  • ${fdt_file} = imx6ul-14x14-evk_b.dtb

่ฉฆ่ฉฆ็œ‹ๅง

=> setenv mmcroot /dev/mmcblk1p3 rootwait rw
=> setenv image zImage_b
=> setenv fdt_file imx6ul-14x14-evk_b.dtb
=> printenv mmcroot
mmcroot=/dev/mmcblk1p3 rootwait rw
=> printenv image
image=zImage_b
=> printenv fdt_file
fdt_file=imx6ul-14x14-evk_b.dtb
=>

่ฉฆ่‘—้–‹ๆฉŸ่ฉฆ่ฉฆ - run bootcmd

df

root@m300e:~# df
Filesystem           1024-blocks    Used Available Use% Mounted on
/dev/root               388480     68538    299462  19% /
devtmpfs                 90860         0     90860   0% /dev
tmpfs                   254892       172    254720   0% /run
tmpfs                   254892        32    254860   0% /var/volatile

mount

root@m300e:~# mount
/dev/root on / type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=90860k,nr_inodes=22715,mode=755)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /var/volatile type tmpfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)

็œ‹็œ‹ /.lable

root@m300e:~# cat /.lable
cat: can't open '/.lable': No such file or directory

ไนŸๅนซ rootfs_b ๅ†ๅšๅ€‹่จ˜่™Ÿ

root@m300e:/# echo rootfs_b > /.lable
root@m300e:/# cat /.lable
rootfs_b

1330

ๅพž dual image a ้–‹ๆฉŸ

  • ${mmcroot} = /dev/mmcblk1p2 rootwait rw
  • ${image} = zImage_a
  • ${fdt_file} = imx6ul-14x14-evk_a.dtb
setenv mmcroot /dev/mmcblk1p2 rootwait rw 
setenv image zImage_a
setenv fdt_file imx6ul-14x14-evk_a.dtb

็ขบ่ช lable ็„ก่ชค

root@m300e:~# cat /.lable
rootfs_a

ๅพž dual image b ้–‹ๆฉŸ

  • ${mmcroot} = /dev/mmcblk1p3 rootwait rw
  • ${image} = zImage_b
  • ${fdt_file} = imx6ul-14x14-evk_b.dtb
setenv mmcroot /dev/mmcblk1p3 rootwait rw 
setenv image zImage_b
setenv fdt_file imx6ul-14x14-evk_b.dtb

็ขบ่ช lable ็„ก่ชค

root@m300e:~# cat /.lable
rootfs_b

1415

็›ฎๅ‰ๅœจ linux ไฝฟ็”จ fw_printenv ๆ™‚ๆœƒๆœ‰ๅ•้กŒ

root@m300e:~# fw_printenv
Cannot open /dev/mtd1: No such file or directory

ๆ•ด็†ไธ€ไธ‹้ŽๅŽปๅฐๆ–ผ fw_printenv ็š„ๅŠชๅŠ›

1545

็›ฎๅ‰่ฉฆๅ‡บไพ†ไฝฟ็”จไปฅไธ‹็š„ /etc/fw_env.config

root@m300e:~# cat /etc/fw_env.config
# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
# Futhermore, if the Flash sector size is ommitted, this value is assumed to
# be the same as the Environment size, which is valid for NOR and SPI-dataflash

# MTD device name    Device offset     Env. size         Flash sector size
/dev/mmcblk1         0x00080000        0x00002000        0x00000200

ๅฏ่ฎ“ fw_printenv ๅ’Œ fw_setenv ๆญฃๅธธ้‹ไฝœ

Device offset ็š„ๆƒ…ๅ ฑไพ†ๆบๅฆ‚ไธ‹

mx6ul_14x14_evk.h

#define CONFIG_ENV_OFFSET		(8 * SZ_64K)

8641024 = 524288 = 0x00080000

Env. size ๆ˜ฏๅพž uboot ็œ‹ๅˆฐ็š„

=> printenv
baudrate=115200
...
script=boot.scr

Environment size: 2063/8188 bytes
=>

ๅพž Environment size: 2063/8188 bytes ๆŽจๅพ— 8*1024 = 8192 = 0x00002000

่‡ณๆ–ผ Flash sector size

emmc ็š„ไธ€ๅ€‹ sector ็‚บ 512 bytes = 0x00000200

ๆœ€็ต‚ๅฐฑๅพ—ๅˆฐไธ€ๅ€‹ๅฏไปฅๅทฅไฝœ็š„ /etc/fw_env.config ๅ›‰

1625

็›ฎๅ‰ๆˆ‘ๅ€‘ make menuconfig ไธ€้€ฒๅŽปๅฐฑ้ข่‡จ profile ็š„้ธๆ“‡

                      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Products/Vendor โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                      โ”‚  Use the arrow keys to navigate this window or press the hotkey of โ”‚
                      โ”‚  the item you wish to select followed by the <SPACE BAR>. Press    โ”‚
                      โ”‚  <?> for additional information about this option.                 โ”‚
                      โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
                      โ”‚ โ”‚                    ( ) Azuretec/0_LTR-101                      โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) Azuretec/1_LTRG-101                     โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300/0_GENERIC                          โ”‚ โ”‚
                      โ”‚ โ”‚                    (X) M300/1_GPS                              โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300/2_PLANET                           โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300/3_GPS_PLANET                       โ”‚ โ”‚
                      โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
                      โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
                      โ”‚                       <Select>      < Help >                       โ”‚
                      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅ‰›ๅ‰›ๅ’Œ ariel ่Šไบ†ไธ€ไธ‹

emmc ็š„ๆ”ฏๆดๅฐฑๅ…ˆ base on M300/0_GENERIC M300/1_GPS ๅฐฑๅฅฝ

็›ฎๅ‰็š„ๆƒณๆณ•ๆ˜ฏๆœƒ้•ท็š„ๅ‘ไธ‹้ข้€™ๆจฃ

                      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Products/Vendor โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                      โ”‚  Use the arrow keys to navigate this window or press the hotkey of โ”‚
                      โ”‚  the item you wish to select followed by the <SPACE BAR>. Press    โ”‚
                      โ”‚  <?> for additional information about this option.                 โ”‚
                      โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
                      โ”‚ โ”‚                    ( ) Azuretec/0_LTR-101                      โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) Azuretec/1_LTRG-101                     โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300/0_GENERIC                          โ”‚ โ”‚
                      โ”‚ โ”‚                    (X) M300/1_GPS                              โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300/2_PLANET                           โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300/3_GPS_PLANET                       โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300E/0_GENERIC                         โ”‚ โ”‚
                      โ”‚ โ”‚                    ( ) M300E/1_GPS                             โ”‚ โ”‚
                      โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
                      โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
                      โ”‚                       <Select>      < Help >                       โ”‚
                      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅคšไบ† M300E/0_GENERIC ๅ’Œ M300E/1_GPS ้€™ๅ…ฉๅ€‹ profile

โš ๏ธ **GitHub.com Fallback** โš ๏ธ