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_a
或rootfs_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
- http://192.168.0.242/RD/build-m300
- m300 build 環境的 docker image
- http://192.168.0.242/RD/m300-jenkins
- m300 build server
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_a
或 rootfs_b