代码拉取完成,页面将自动刷新
这是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是老师之前写好的,最后查看了修改时间才能确定是否是新生成的。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。