您尚未登录。

楼主 # 2021-12-16 00:27:58

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 389
积分: 338

大佬求助,使用rust开发f1c200,遇到点问题请指导下

受到了论坛大佬帖子的启发,也想做个f1c200的快速启动loader看下能不能尽快启动系统。
最近在学习rust,所以正好使用rust来练练手,也算增加点新血液吧。
由于rust没有发现带armv5的target目标,这里就用了下armv5te-unknown-linux-gnueabi的目标。
由于后端链接使用的是arm-none-eabi,所以基本上只用cargo管理项目,rust生成中间代码,gcc生成汇编和C程序
最后用gcc链接便可运行。
目前只实现了最简单的led点亮,和串口输出功能。
内存初始化代码,借用xboot大佬代码使用ffi实现,mmu等参照从写。
目前用release版本大约在3.4k,还是能满足基本,rust抽象还是相当爽的。

目前遇到一个问题,小弟实在没看出来哪里有毛病,系统在初始化mmu后直接跑飞了,我用反汇编看了
实在没看出哪里有毛病。求大神指点迷津,没思路了。

    pub fn turn_on(&self) {
        mmu_ttb_set(self.base);
        mmu_inv_tlb();
        mmu_domain_set(3);
        mmu_enable();
        crate::led_on(); //这里执行不到了
        icache_enable();
        dcache_enable();
    }

源代码项目:https://github.com/shaoxi2010/loader

离线

楼主 #2 2021-12-19 21:53:50

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 389
积分: 338

Re: 大佬求助,使用rust开发f1c200,遇到点问题请指导下

这个问题我找到原因了,还是自己迁移代码时将MMU的逻辑写错误了,反复对比汇编和ir发现逻辑行为不符合。
挂掉的原因应该是页表初始化问题,访问直接就异常了,目前通过qemu调试已经可以了等下实体机测试下就知道了。

考虑到启动需要解压缩和修改设备树信息,还是觉得优先打开cache要合理的多。

开MMU主要应对之前发现的两个问题
1. SRAM下栈变量和全局变量访问速度很慢,严重的拖慢了高频次操作
2. 不开启cache下DDR下的访问速度也是很难接受的

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn