SmartAudio/package/allwinner/misc-upgrade/readme.txt

221 lines
9.4 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#增加说明 luckylau
#修改2016-4-14 增加分区相关说明删除target_sys中usr.img部分增加大容量升级说明
#修改2016-3-23 初始版本
#authorhenrisk
AW-OTA使用须知
由于实际应用中存储介质大小各异其相应OTA方案也会不同。对于小于32M一般为spinor的介质需要预先设定
make menuconfig
Target Images --->
*** Image Options ***
[*] For storage less than 32M, enable this when using ota
选中该配置项后rootfs的/usr会被分拆出部分生成usr.squashfs(usr.img)存放在extend分区并与recovery镜像boot_initramfs复用该分区以此起到节省存储空间的作用。
而对于大容量介质建议不选中该配置项即不需要usr.img和extend分区而只需要添加recovery分区这样在OTA升级时会省去很多麻烦。
不管是小容量还是大容量都要在make之前选中应用包misc-package
make menuconfig
Allwinner --->
<*> misc-upgrade........................... read and write the misc partition
一、分区定义:
boot分区存内核镜像
rootfs分区基础系统镜像分区/lib, /bin, /etc, /sbin等非/usr非挂载其他分区的路径wifi支持环境alsa支持环境、OTA环境
extend分区扩展系统镜像分区/usr 应用分区)
上面三个分区为升级分区
private分区存储SN号分区
misc分区系统状态、刷机状态分区
UDISK分区用户数据分区/mnt/UDISK
overlayfs分区存储overlayfs覆盖数据
上面分区为不升级分区
二、分区大小注意事项:
分区大小在方案使用sys_partition.fex中定义
size的算法如 8192/2/1024 = 4M
a配置boot分区大小boot分区大小需要依赖内核配置需要小于等于sys_partition.fex中定义的boot标签的定义
如:
[partition]
name = boot
size = 8192
downloadfile = "boot.fex"
user_type = 0x8000
boot分区镜像大小需要在menuconfig中预先设定
make menuconfig
Target Images --->
*** Image Options ***
(4) Boot filesystem partition size (in MB)
brootfs分区的大小不需要通过make menuconfig去设定直接根据镜像大小修改分区文件即可。
1对于一些小容量flash的方案如16M需在/bin 下存放联网逻辑程序、版本控制程序、下载镜像程序、播报语音程序以及语音文件这些文件在编译时应该install到/bin或者/lib下
可以在固件编译完后查看bin/sunxi(sun5i)/下rootfs.img的大小在决定sys_partition.fex中rootfs分区的大小
\*0*/ $ ll bin/sun5i/rootfs.img
-rw-r--r-- 1 heweihong heweihong 1835008 4月 14 16:44 bin/sun5i/rootfs.img
2对于大容量flash的方案如128M以上或者有足够的flash空间存相关镜像不需要1中那些OTA额外的程序直接查看rootfs.img的大小设定分区文件即可。
cextend分区的大小需要考虑多个方面
1编译后 usr.img的大小
2make_ota_image后initramfs镜像的大小make_ota_image见后面说明
如:
\*0*/ $ ll build_dir/target-arm_cortex-xxxxxxxx/linux-sun5ilinux-sunxi/
-rw-r--r-- 1 heweihong heweihong 479232 4月 14 16:44 usr.squashfs
-rwxr-xr-x 1 heweihong heweihong 5510192 4月 14 16:44 zImage-initramfs*
取两个最大值,并增加一些余量即可
并把这个值设置为initramfs镜像的大小
make menuconfig
Target Images --->
*** Image Options ***
(8) Boot-Recovery initramfs filesystem partition size (in MB)
d其他分区如private、misc等使用默认的大小即可
e剩下的空间全部自动分配进入UDISK分区一定要留取一定空间给UDISK分区至少可以格式化挂载一些OTA过程会在里面写一些中间文件小容量flash的方案也要保证有256K~512K的空间
特别注意这些分区大小不能通过OTA去修改的所以对于大容量flash的方案应该在满足分区条件限制如上面adc三点的情况下留有足够的余量满足后续OTA增加内容的需求。
对于小容量flash的方案需要在增加内容是调节相关分区的大小。
三、misc-upgrade升级
1. misc-upgrade 是基于小容量flash方案重新划分分区后以misc分区、extend分区为媒介设计的OTA方案
2. OTA镜像包SDK编译说明(SDK根目录)
环境变量:
source scripts/setenv.sh
编译命令:
make_ota_image (在新版本代码已经成功编译出烧录固件的环境的基础上打包OTA镜像)
make_ota_image --force (重新编译新版本代码然后再打包OTA镜像)
在执行make_ota_image之前需要配置支持ramdisk并选用xz压缩cpio
make menuconfig
target Images --->
[*] ramdisk --->
--- ramdisk
Compression (xz) --->
3. OTA镜像包说明
\*0*/ $ ll bin/sunxisun5i/ota/
?????? 20856
-rw-rw-r-- 1 heweihong heweihong 5731339 3?? 23 15:48 ramdisk_sys.tar.gz
-rw-rw-r-- 1 heweihong heweihong 10335244 3?? 23 15:48 target_sys.tar.gz
-rw-rw-r-- 1 heweihong heweihong 5116895 3?? 23 15:48 usr_sys.tar.gz
三个tar包就是OTA的压缩镜像包
ramdisk_sys.tar.gzramdisk镜像要升级内核分区、rootfs分区时使用防止烧写过程掉电导致机器变砖
target_sys.tar.gz 系统镜像升级内核分区、rootfs分区
usr_sys.tar.gz 应用分区镜像升级extend分区只需要使用这个镜像
----------------------------------------------------------------
\*0*/ $ ll bin/sunxi/ota/*_sys/
bin/sunxi/ota/ramdisk_sys/:
-rw-r--r-- 1 heweihong heweihong 7340032 4月 16 12:50 boot_initramfs.img
bin/sunxi/ota/target_sys/:
-rw-r--r-- 1 heweihong heweihong 3145728 4月 16 12:49 boot.img
-rw-r--r-- 1 heweihong heweihong 2883584 4月 16 12:49 rootfs.img
bin/sunxi/ota/usr_sys/:
-rw-r--r-- 1 heweihong heweihong 2752512 4月 16 12:49 usr.img
这四个镜像包为不压缩的img包。
4. 小机端OTA升级命令
必选参数:-f -p 二选一
aw_upgrade_process.sh -f 升级完整系统内核分区、rootfs分区、extend分区
aw_upgrade_process.sh -p 升级应用分区extend分区
对于大容量用aw_upgrade_normal.sh替代aw_upgrade_process.sh
可选参数: -l-d -u, -n
a对于大容量flash方案可以使用本地镜像如主程序下载校验好三个镜像后ramdisk_sys.tar.gztarget_sys.tar.gz、usr_sys.tar.gz
存在/mnt/UDISK/misc-upgrade中调用上的命令对于自动烧写分区就算期间掉电重启后升级程序也能自动完成烧写不需要依赖网络。
-l arg带路径参数。
aw_upgrade_process.sh -p(-f) -l /mnt/UDISK/misc-upgrade (注mnt前的根目录"/"最好带上misc-upgrade后不要带"/")
-l参数其他-d、-u、-n参数无效使用压缩镜像包
b对于小容量flash方案不能使用-l参数升级区间出错重启后还需要根据相关的联网下载程序获取镜像见第5点说明
-d arg -u arg同时使用-d 参数为可以ping通的OTA服务器的地址、-u 参数为镜像的下载地址
-n 一些小ddr的方案如剩余可使用内存在20m以下的方案可以使用这个参数shell会直接请求下载不压缩的4个img文件这样子设备下载后不需要tar解压减少内存使用。
aw_upgrade_process -f -d 192.168.1.140 -u http://192.168.1.140/
升级shell会先ping -d 参数ping 192.168.1.140ping通过后会根据升级命令和系统当前场景请求下载
无-n参数
http://192.168.1.140/ramdisk_sys.tar.gz
http://192.168.1.140/target_sys.tar.gz
http://192.168.1.140/usr_sys.tar.gz
有-n参数
http://192.168.1.140/boot_initramfs.img
http://192.168.1.140/boot.img
http://192.168.1.140/rootfs.img
http://192.168.1.140/usr.img
使用-n参数的方案需要部署上服务器上的镜像是boot_initramfs.img, boot.img, rootfs.img, usr.img
不使用-n参数的方案需要部署上服务器上的镜像是ramdisk_sys.tar.gz, target_sys.tar.gz, usr_sys.tar.gz
5. 脚本接口说明:
对于小容量flash的方案没有空间存储镜像相关镜像只会存在ram中断电就会丢失。
假如升级过程断电,需要在重启后重新下载镜像。
aw_upgrade_vendor.sh设计为各个厂家实现的钩子SDK上只是个demo可以随意修改。
实现联网逻辑
check_network_vendor(){
return 0 联网成功可以ping通OTA镜像服务器
return 1 联网失败
}
请求下载目标镜像, $1ramdisk_sys.tar.gz $2/tmp
download_image_vendor(){
# $1 image name $2 DIR $@ others
rm -rf $2/$1
echo "wget $ADDR/$1"
wget $ADDR/$1 -P $2
}
开始烧写分区状态:
aw_upgrade_process.sh -p 主动升级应用分区的模式下返回0开始写分区 1不写分区
aw_upgrade_process.sh -f 不理会这个返回值
upgrade_start_vendor(){
# $1 mode: upgrade_pre,boot-recovery,upgrade_post
#return 0 -> start upgrade; 1 -> no upgrade
#reutrn value only work in nornal mode
#nornal mode: $NORMAL_MODE
echo upgrade_start_vendor $1
return 0
}
写分区完成
upgrade_finish_vendor(){
#set version or others
reboot -f
}
-f (-n)调用顺序:
check_network_vendor ->
upgrade_start_vendor ->
download_image_vendor (ramdisk_sys.tar.gz, -n 为 boot_initramfs.img)->
内部烧写、清除镜像逻辑(不让已经使用镜像占用内存) ->
download_image_vendor(target_sys.tar.gz, -n 为 boot.img rootfs.img) ->
内部烧写、清除镜像逻辑(不让已经使用镜像占用内存) ->
download_image_vendor(usr_sys.tar.gz, -n 为 usr.img) ->
内部烧写、清除镜像逻辑(不让已经使用镜像占用内存) ->
upgrade_finish_vendor
-p调用顺序
check_network_vendor ->
download_image_vendor (usr_sys.tar.gz) ->
upgrade_start_vendor ->
检测返回值,烧写 ->
upgrade_finish_vendor
6. 相关系统状态读写
相关的信息存储在misc分区OTA升级不会清除这个分区重新烧写镜像会擦除
读 read_misc [command] [status] [version]
command 表示升级的系统状态shell脚本处理使用
status 自由使用,表示用户自定义状态
version 自由使用,表示用户自定义状态
写 write_misc [ -c command ] [ -s status ] [ -v version ]
-c 不能随意修改只能有aw-upgrade shell修改
-s -v 自定义使用