对于编写应用软件的程序员来说,内存被踩(变量被意外覆盖)是很难调试的问题。
对于操作系统软件开发者来说,应用层的问题都简单许多,因为应用程序的问题再大也是发生在一个进程里,不至于影响整个系统。
今年上半年,格蠹在准备幽兰的系统镜像时,遇到声音子系统工作不好,花了很多时间把这个问题解决好后,我写了一篇文章,叫《比内存被踩还难调试的问题》。

最近几个月,格蠹正在进行一个代号为“子游”的项目。这个项目的目标是把UEFI运行在幽兰上(Enable UEFI on Ulan,EUU)。幽兰本来是使用u-boot做内核的loader。u-boot具有短小精悍的优点,在arm生态中很流行。但是与UEFI相比,u-boot缺少太多先进特征,比如缺少动态的模块加载能力,缺少可以与用户交互的GUI界面等。
子游项目是以开源的edk2-rk3588项目为基础:
https://github.com/edk2-porting/edk2-rk3588
这个开源项目的目标就是为RK3588平台开发基于EDK2的UEFI固件(EDK2 UEFI firmware for Rockchip RK3588 platforms)。EDK2是Intel开源出来的一台UEFI实现,以前主要是用在x86生态中。
子游项目最初的问题是访问github速度很慢,而这个项目又包含很多子项目,所以花了些冤枉时间在补齐缺少的子项目文件上。
子游项目的开发环境就是幽兰代码本,使用GNU工具链编译。编辑代码则用VS Code。对于EDK2这样体量的项目,在幽兰上可以非常轻松的进行构建,发出build命令后,几秒钟后就完成编译、链接并且自动产生镜像文件了。
5824+1 records in
5824+1 records out
5964288 bytes (6.0 MB, 5.7 MiB) copied, 0.0728761 s, 81.8 MB/s
+ cp /gewu/edk2-rk3588/workspace/RK3588_NOR_FLASH.img /gewu/edk2-rk3588/
+ set +x
Build done: RK3588_NOR_FLASH.img
最初,我们使用瑞芯微的工厂工具(rkdevtool)把编译好的镜像刷到幽兰的NOR FLASH中,但是速度较慢,而且偶尔有错误发生。于是,我们改为使用SD
固件开发:比声音卡顿更难调试的问题

在开发UEFI固件时,遇到一个导致系统突然断电的难题,表现为调试信息在SD卡启动后突然停止。经过排查,发现是电源管理集成电路(PMIC)配置错误,修复后成功解决问题。固件开发需要深入硬件知识,其错误可能导致严重后果。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



