7. 升级系统组件¶
为了保证系统的稳定运行,在修复已知BUG或添加新功能后,我们会及时发布系统镜像更新包。
然而,用户在使用板卡一段时间后,往往已经对系统进行了个性化修改,不希望完全重新烧录整套镜像; 同时,也有部分用户希望基于SDK对某些模块进行自定义开发,而不想重新编译整个系统。
在这种情况下,用户可以选择单独升级系统的部分组件, 以实现功能更新、问题修复或定制化扩展,而无需破坏原有系统环境,从而更灵活地维护与优化系统。
整个系统镜像按分区表进行划分,可以分为4部分。
boot分区
env分区
kernel分区
rootfs分区
我们可以对这四个分区进行单独更新升级
分区烧录的方法可以参考镜像烧录章节,以下是对各分区的详细介绍和判断是否需要升级的方法
7.2. boot分区¶
包含前级loader(GSL)和次级loader(u-boot)。其中GSL中包含起始阶段的寄存器配置参数,包括DDR参数和引脚复用配置。 u-boot则负责进一步初始化外设硬件,提供一些高级功能并启动Linux内核。
一般情况下boot分区由于功能简单、只在板卡启动时运行一次,很少对boot的代码进行修改。又因为烧录boot分区需要使用串口烧录,步骤繁琐,所以很少需要更新boot分区。
那么在什么情况下需要更新boot分区呢?
用户在自行编译SDK时,如果修改了U-Boot表格、GSL驱动代码、U-Boot源码或配置文件,则需要重新编译生成boot_image.bin并重新烧录,以确保改动生效。
在官方发布新版系统镜像时,可先查看 镜像更新说明 。例如,在示例更新日志中显示,20251010 版本的镜像在 boot 分区中新增了一项功能支持。 若通过串口查看启动日志发现当前板卡中U-Boot的编译日期为20250928,早于镜像更新日期,说明当前系统未包含此功能更新,此时应烧录boot分区进行升级。
7.3. env分区¶
保存u-boot使用的环境变量。其中最重要的是bootcmd和bootargs,bootcmd是u-boot启动Linux内核的命令,bootargs是传给Linux内核的启动参数。
用户在自行编译SDK时,如果修改了osdrv/tools/pc/uboot_env/env_text目录下的环境变量源文件,则需要重新编译生成对应存储类型的env.bin并重新烧录,以确保改动生效。
在官方发布新版系统镜像时,可先查看 镜像更新说明 。例如,在示例更新日志中显示,20251010版本的镜像在env分区中新增一个变量,修改一个变量。
可以通过串口,在板卡上电时按住空格键来登录到u-boot的命令行中,用printenv查看当前环境变量。如果不包含镜像更新说明中的修改, 则可以重新烧录env镜像或者手动使用setenv命令修改,并使用saveenv命令保存修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 打印当前环境变量
printenv
# 设置一个原本没有的变量=新增变量
setenv num 1
# 设置一个原本就有的变量=修改变量(中间有空格的变量要用"")
setenv bootargs "mem=500M console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p4 rootfstype=ext4 blkdevparts=mmcblk0:512K(boot),512K(env),11M(kernel),-(rootfs.ext4)"
# 设置一个原本就有的变量的值为空=删除变量
setenv num
# 保存变量
saveenv
|
7.4. kernel分区¶
kernel分区中保存了Linux内核镜像,在系统启动时,U-Boot从kernel分区读取并加载Linux内核镜像到内存指定位置,然后跳转至内核入口地址执行。 随后,系统进入由Linux内核主导的运行阶段,内核作为核心组件负责硬件资源管理与上层软件的交互。
用户在自行编译SDK时,如果修改了open_source/linux目录下的源码文件,则需要重新编译生成对内核镜像uImage_ss928v100并重新烧录,以确保改动生效。
在官方发布新版系统镜像时,可先查看 镜像更新说明 。例如,在示例更新日志中显示,20251010版本的镜像在内核中有3条修改信息。 可以通过登录终端,使用uname -a命令查看当前板卡中内核的编译日期为20251014,晚于镜像更新日期,说明当前内核已包含此功能更新,则可以不用更新kernel分区。
需要注意的是,仅更新内核分区镜像,不会更新被编译为模块(ko)的驱动文件,这些模块文件在编译时会打包进根文件系统镜像中。如果修改的内容涉及到内核模块,请一并更新根文件系统。
7.5. rootfs分区¶
rootfs分区中保存了系统的根文件系统,它包含了Linux运行所需的基本目录结构、系统库、驱动模块以及用户空间程序。 在内核启动完成后,系统会将rootfs挂载为根目录,从而提供运行环境,使用户空间的服务与应用程序能够正常启动和运行。
rootfs分区中的部分内容依赖于特定内核版本,如果更新rootfs分区,建议一并更新kernel分区。
如果要单独更新rootfs分区中的某个文件或程序,则可以使用U盘复制、网络传输登方式,新增或覆盖原有的文件。
