4 Star 0 Fork 0

王旭 / 王旭 2018K8009929039

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
这是project1的简介
本次实验要完成Bootblock.S head.S creatimage.c三个代码的补全和编译上板验证
Bootblock由bios从sd卡第一个扇区拷贝到内存0x50200000的位置,共512B的大小。本次实验中要完成一个输出语句功能,接口老师都已经写好,只需要把要输出的地址传入a0寄存器再调用写好的宏替换即可。SBI_CALL与li a7,完全对应等价,之后的SBI_CONSOLE_PUTSTR和SBI_SD_READ只是一个操作号,为9和11,根据a7寄存器的值不同执行ecall命令有不同的功能。之后的功能是将kernel从sd卡写入内存,并跳转到kernel的第一条指令位置。Kernel的长度约定写在os_size_loc位置,具体的长度我们在creatimage生成镜像的时候计算完成,要写入的地址是从0x50201000开始。C-score需要将kernel写在0x50200000,所以在写入kernel之前再从sd卡写入一份Bootblock,从0x50200000往后偏移kernel长度作为存放地址,并且跳转到考入kernel对应的指令位置,继续执行S-score的功能。
Head.s文件要进行bss段的清零和栈指针的设置,这些东西在c语言中本来是默认成立的,但是现在需要主动来依靠汇编语言来实现。
Bootblock与Kernel编译后的二进制文件有文件头、程序头和对应的segement,而镜像文件image只是将前两者的segement写入拼接而成。文件头中有程序头数量和长度还有位置的域,利用之读出程序头后再从程序头的域中找出对应的位置和大小。实际拷贝了2个segement。在每次运行static void write_segment函数时计算写入image中的字节数,并且最后写在约定好的位置即os_size_loc。调试的时候总怀疑实际运行的creatimage是老师之前写好的,最后查看了修改时间才能确定是否是新生成的。

空文件

简介

暂无描述 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/ssred/project1.git
git@gitee.com:ssred/project1.git
ssred
project1
王旭 2018K8009929039
master

搜索帮助