AllWinner T113 升级篇
基于嵌入式Linux平台升级分成app和bsp升级。
APP 升级:可以使用OPKG或者dpkg,一般嵌入式平台都是opkg来制作升级ipk包。
制作ipk参考路径:注意:建议每次的包名称一样,增加后缀版本号,这样每次升级和卸载包名一样。
制作.ipk安装文件 | hocgin (๑`灬´๑)
How to create an ipk
制作.ipk安装文件
.ipk
本质是tar.gz
格式的压缩包, 按照某种规范格式(类似.deb包
)进行 …
前言
.ipk
本质是tar.gz
格式的压缩包, 按照某种规范格式(类似.deb包
)进行压缩而成的。- 当我们对它的内容进行操作时候所使用的用户即是它安装后所拥有的用户和权限(
sudo chown root:root -R .
)。 - 已经存在的文件并不能进行替换, 切记。
文件介绍
1234 |
.├── control.tar.gz # 安装/卸载 脚本├── data.tar.gz # 二进制/配置文件..└── debian-binary # 固有文件 |
control.tar.gz 内容
1234 |
.├── control # 文件介绍[包括: 依赖/版本/架构/作者..]├── postinst # 安装脚本└── postrm # 卸载脚本 |
control
此处举个栗子
1234567 |
Package: IPKName # .ipk NAMEVersion: 1Section: netPriority: optionalArchitecture: ar71xx # 系统架构Maintainer: hocgin Description: my first ipk |
postinst 安装脚本
因为前言的
3
原因, 当我们需要对已存在文件进行修改时, 只能使用写入的方式进行修改。
例如:
12 |
#!/bin/shecho "installed done" > /tmp/ipk.log |
postinst 卸载脚本
自己约的X🤣。。
例如:
12 |
#!/bin/shrm -rf /tmp/ipk.log |
打包~
1 |
sudo tar -czf control.tar.gz * |
data.tar.gz
此处完全是根据你要增加的脚本按根目录进行存放的。
例如:
1234567891011121314151617181920 |
.├── bin│ ├── ss-redir│ └── ss-tunnel├── data.tar.gz├── etc│ ├── dnsmasq.d│ │ ├── address.conf│ │ ├── dns.conf│ │ ├── ipset.conf│ │ ├── option.conf│ │ └── server.conf│ ├── pdnsd.conf│ └── shadowsock.json├── root│ ├── addDnsmasq.sh│ └── changeService.sh└── usr └── sbin └── pdnsd |
打包~
1 |
sudo tar -czf data.tar.gz * |
最后
将三个文件放在一起进行打包
1 |
sudo tar -czf mIPK.ipk * |
BSP升级:
一般linux BSP升级只需要进行kernel的升级,so的升级直接替换更新。而kernel image的升级涉及到系统异常状态可能导致系统不能起来。
所以在Linux平台最常使用的方法:使用应用层使用u-boot-fw工具,fw_printenv,fw_setenv两个命令,可以在应用层修改uboot阶段env参数。来改变启动流程。
1、新增一个boot分区,改成bootA和bootB两个分区,分区中kernel image都是一样的。
2、在uboot中启动参数配置env.cfg中,需要增加备份启动流程,也就是在启动异常情况下(启动三次失败),直接进入altbootcmd命令来启动内核。
3、增加一些配置,env.cfg
boot_partition=bootAupgrade_available=1bootcount=1bootlimit=3
uboot defconfig打开宏。
CONFIG_BOOTCOUNT_LIMIT=y
4、修改分区直接dd替换内核image。
dd if=boot.fex of=/dev/mmcblk0p4
5、开机后配置为
fw_setenv upgrade_available 0fw_setenv bootcount 1
6、开始进行升级时需要打开配置
fw_setenv upgrade_available 1fw_setenv bootcount 1