开发日志[第三周]:利用svd2rust工具生成的寄存器库重构rknpu驱动 & 完成NPU驱动基于wfi的事件处理机制 & 修复axvisor上rsext4文件系统的错误 #3
Dirinkbottle
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
第三周开发日志(2.8-2.14)
工作总结
sync_to_disk调用修复修复 Axvisor 上 rsext4 文件系统磁盘数据不一致问题
问题
block is free(双重释放,原来没有正确把1写回位图) (位图实际扫描使用的Block和超级块中的Block不一致)错误,磁盘数据损坏分析
Linux 客户机的问题是由于 Axvisor 在启动客户机的最后时刻调用
mount_virtual_fs时没有刷新文件系统,导致文件系统不一致。Linux 启动时进行文件系统完整性校验,发现不一致后拒绝启动,随后关机导致缓存丢失,最终造成文件系统损坏。根源在于 rsext4 为提升运行时性能设计了多级缓存机制,但 Axvisor 在集成 rsext4 时,没有在文件写操作后进行数据同步。如果客户机修改文件后立即关机,缓存仍停留在内存中,不可避免地导致磁盘数据不一致。
解决方案
在 rsext4 的
ext4fs.rs访问层中,对所有写操作调用sync_to_disk函数,确保数据及时同步到磁盘。虽然会带来一定的性能损失,但保证了文件系统的一致性。开发板环境踩坑
本周在板端遇到了一系列棘手的环境问题,花了不少时间排查:
U-Boot 与启动链问题
loady加载内核,debug 内核每次都要通过串口传内核很慢,每次修改都需要完整烧录StarryOS内核后续 NPU 驱动工作开发路线决策
最初尝试将 NPU 驱动集成到 StarryOS 主线,但 HAL 层架构
axhal与somehal存在冲突,RK3588 平台级代码集成涉及整个架构的大修改。为专注于 NPU 驱动核心功能开发,决定先在 StarryOS NPU 版本上开发,待主要功能完成后再移植回主线。svd2rust 寄存器库重构
基于 svd2rust 工具重构 rknpu 驱动的寄存器访问层。
改进
通过 svd2rust 从 SVD 描述文件生成类型安全的寄存器库
rknpu-regs,每个寄存器字段都有明确的类型和文档:成果
RknpuCore结构体封装了各功能块的访问方法,提供统一接口注释
利用 AI 为
axnpu驱动代码添加了详细的中文注释(关键函数的调用流程和参数说明)既方便自己学习 NPU 硬件细节,也降低了后续开发和他人协作的门槛。
基于 WFI 的异步中断处理
实现了 NPU 任务完成的异步等待机制:
这为后续多核并发任务提交打下了基础——每个 NPU 核心可以独立触发中断,CPU 侧可以并行等待多个核心的完成通知。
Beta Was this translation helpful? Give feedback.
All reactions