20170109_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 0945 - 周末停電 - 重新進入 docker
  • 1000 - review - engineering notebook
  • 1030 - 讓 bootenv 整齊
  • 1040 - 熟悉 u-boot 的 hush shell
  • 1305 - 更新 uboot env - 重新編譯 uboot - 直接刷新 uboot env MTD partition
  • 1325 - 拆解 uboot env bootargs
  • 1400 - 幫忙把一些 m300 cpu board 作 mfgtool flash firmware
  • 1430 - firmware upgrade 兩個問題
  • 1500 - 有一片 m300 cpu board web upgrade 在 90% umount 階段時自己重開機
  • 1550 - 明天跟生產單位會討論一下 m300 生產的問題
  • 1630 - aaron 告知 m300 的 GitLab 新增了兩個 project
  • 1805 - 目前 uboot env - 只要控制 actfirm 便可決定是 rootfs_arootfs_b

0945

周末停電

重新進入 docker

➜  M300 git:(nandflash) pwd
/home/jeffrey/M300_git/M300/
➜  M300 git:(nandflash) docker run -v `pwd`:/var/m300 -it m300 /bin/bash

1000

review

engineering notebook

1030

參考 https://github.com/silenceuncrio/diary/wiki/20161222_jeffrey

當時有看到一篇 https://community.nxp.com/thread/254021

setenv 'uboot=u-boot.bin'
setenv 'kernel=uImage'
setenv 'bootargs_base=setenv bootargs console=ttymxc0,115200'
setenv 'loadaddr=0x90800000'
setenv 'bootargs_nand=setenv bootargs ${bootargs} ip=none ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rootwait rw'
setenv 'bootcmd_nand=run bootargs_base bootargs_nand;nand read ${loadaddr} 0x1000000 0x300000;bootm'
setenv 'bootcmd=run bootcmd_nand'

這樣的寫法會讓 bootenv 整齊許多

我們目前相關的 uboot env 如下

=> printenv
active_firmware=a
bootargs=console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs_a rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)
bootcmd=saveenv;nand read ${loadaddr} ${kernel_a_addr} 0x800000;nand read ${fdt_addr} ${dtb_a_addr} 0x100000;bootz ${loadaddr} - ${fdt_addr}
dtb_a_addr=0x00E00000
dtb_b_addr=0x08E00000
fdt_addr=0x83000000
fdt_high=0xffffffff
kernel_a_addr=0x00400000
kernel_b_addr=0x08400000
loadaddr=0x80800000
rootfs_a_mtd=4
rootfs_b_mtd=9

1040

觀看 https://www.xilinx.com/video/soc/u-boot-hush-shell-scripting.html

熟悉一下 u-boot 使用的 hush shell

1305

要怎麼來更新 uboot 的 env 呢

  • 重新編譯 uboot
  • 直接刷新 uboot env MTD partition

重新編譯 uboot 的意思是直接修改 uboot 預設的 env
不過我們還需要 firmware upgrade 時能夠刷新 uboot image
目前 m300 firmware v1.0 是不具有這樣的功能的

直接刷新 uboot env MTD partition - 我們目前已經具備這樣的機制了
我們在 linux 有 fw_printenv 以及 fw_setenv 這兩個 tool 可以直接讀寫 uboot env MTD partition 裡的 uboot EV

1325

參考 https://community.nxp.com/thread/254021

先試著拆解我們 uboot env bootargs

=> printenv bootargs
bootargs=console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs_a rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)
setenv bootargs_base="setenv bootargs console=ttymxc0,115200"
setenv bootargs_mtdparts="setenv bootargs ${bootargs} mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)"
setenv bootargs_rootfs_a="setenv bootargs ${bootargs} rootfstype=ubifs ubi.mtd=4 root=ubi0:rootfs_a"
setenv bootargs_rootfs_b="setenv bootargs ${bootargs} rootfstype=ubifs ubi.mtd=9 root=ubi0:rootfs_b"

setenv bootcmd_rootfs_a="nand read ${loadaddr} ${kernel_b_addr} 0x800000;nand read ${fdt_addr} ${dtb_b_addr} 0x100000;bootz \${loadaddr} - \${fdt_addr}"

1400

先幫忙把一些 m300 cpu board 作 mfgtool flash firmware...

1430

ariel 對 firmware upgrade 反應兩個問題

  • web firmware upgrade 常常到 3% 時才要他 login
  • bfirmware.sh 最好跟 bimage.sh 作個結合

1500

手上有一片 m300 cpu board web upgrade 在 90% umount 階段時自己重開機了

重新再做一次就沒發現同樣的問題

1550

明天跟生產單位會討論一下 m300 生產的問題

因為 m300 使用 freescale 所提供的 mfgtool 是我們公司之前都沒使用過的

ariel 希望我準備一下資料方便明天討論

主要是希望生產單位不要那麼緊張

先準備一下官方的 mfgtool 相關文件

P:\9_UserTemp\TEMP\jeffrey\m300\mfgtools\Document\V2

明天就 [Manufacturing Tool V2 Quick Start Guide.docx] 看一下即可

主要是讓生產單位知道這個工具很單純

而且我們會把繁瑣的部分準備好

1630

aaron 告知我們 m300 的 GitLab 新增了兩個 project

1805

目前搭配以下的 uboot env

=> printenv
actfirm=a
baudrate=115200
bootargs_a=setenv bootargs console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs_a rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)
bootargs_b=setenv bootargs console=ttymxc0,115200 ubi.mtd=9 root=ubi0:rootfs_b rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)
bootcmd=run bootargs_$actfirm nandread_$actfirm; bootz ${loadaddr} - ${fdt_addr}
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=3
console=ttymxc0
dtb_a_addr=0x00E00000
dtb_b_addr=0x08E00000
ethact=FEC1
ethprime=FEC
fdt_addr=0x83000000
fdt_high=0xffffffff
initrd_addr=0x83800000
initrd_high=0xffffffff
kernel_a_addr=0x00400000
kernel_b_addr=0x08400000
loadaddr=0x80800000
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)
nandread_a=nand read ${loadaddr} ${kernel_a_addr} 0x800000;nand read ${fdt_addr} ${dtb_a_addr} 0x100000;
nandread_b=nand read ${loadaddr} ${kernel_b_addr} 0x800000;nand read ${fdt_addr} ${dtb_b_addr} 0x100000;
panel=TFT43AB

Environment size: 1575/1048572 bytes

可以達到只要控制 actfirm 便可決定是 rootfs_arootfs_b