NJU PA1 series lab
PA1.0:
畅玩马里奥:但是一开始还是不可畅玩马里奥的,心情非常的sad。后来上网冲浪了一会,发现是: /home/han/ics2021/abstract-machine/am/src/native/platform.h 中的: uint8_t sigstack[8192]; 导致的(之前中括号里面写的并不是8192,是英文字母,将字母改成8192就可以流畅运行马里奥了 :) ) 【昨天做的,差不多已经忘记了错误代码是什么了。。。。】
如图:)
非常的happy !
觉得编译有点慢?电脑是有多个cpu的电脑,可以同时在多个cpu上进行编译处理(真是人才)
使用lscpu来查看自己的电脑是几核电脑 :》
十分的开心发现,居然是八核的,有8个cpu
所以在编译的时候使用了全部8个cpu来进行编译处理:
一开始编译用的命令是:make ARCH=native run mainargs=mario
现在编译所用的命令是:make ARCH=native run mainargs=mario -j8(数字根据自己电脑是几核的cpu来决定)
一开始的编译时间要远远高于8核一起编译的时间:一开始应该是11s多,8核一起编译之后应该只剩3-4s左右了(忘记记录了。。。。)
我们清除所有编译结果之后重新编译, 源文件并没有发生任何变化, 按道理编译出来的目标文件也应该和上一次编译结果完全相同. 既然这样, 那我们能不能把这些目标文件以某种方式存起来, 下次编译的时候如果发现源文件没有变化, 就直接取出之前的目标文件作为编译结果, 从而跳过编译的步骤呢?
PA教程上面的这句话非常的重要,其实之前用编译的时候我也想过同样的话:目标文件如果和之前一样的话,那么我们就可以将目标文件保存起来,之后再执行相同的命令的时候,直接取出之前的目标文件作为结果即可!!!
有一个工具叫Ccache 应该是叫这样的名字(C和cache要区分开)
我们可以将gcc的路径改到这个Ccache的路径下面,这样就可以完成上述的操作!
但是这个改路径的操作花费了我大概3h的时间来找相关的文档:一开始我去阅读man Ccache,发现并没有什么东西和改路径相关的(可能是我看的太快了),之后我又上https://wiki.archlinux.org/title/Ccache_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
这个网站上面找了一下,果然就被我找到了 :)
原来是要添加一行命令:export PATH="usr/lib/ccache/bin:$PATH" 到~/ .bashrc当中去,我联想到一开始我在浏览etc的时候就看到了这个文件bash.bashrc所以我觉得应该就是这个文件了
果断sudo vim bash.bashrc 在最后一行添加了代码 export PATH="usr/lib/ccache/bin:$PATH" 就可以了,最后的结果如图
完成!
之后,在PA1中又写到可以体验一下Ccache的效果了,所以我又去实验了一下:
一开始使用的时间大概是14s左右,比之前直接make 的速度还要慢,之后make clean了一下,之后又再次编译,得到的time 大概不到两秒,还是非常之快的!!!
2022.07.22 上午(一早上就做了一个编译,gcc路径的修改和Ccache的运用,效率还是不高的 :( )
2022.07.22 下午
这个系列PA所做的事情就是:通过模拟,在GNU/Linux上模拟出一套硬件世界;编写一个可以运行程序的程序(new bee)
ISA:instruction set architecture 是一种规范 例如x86/ mips32 /riscv32
先用riscv作为 ISA来进行PA(主要是找了一圈实在没有办法改ISA【可能是我笨,二周目的时候再用x86 ; ) 】) ----> 花了我一个小时来寻找怎么改ISA 用make menuconfig命令之后,terminal竟然显示
(真的不知道怎么回事,二周目的时候在用x86刷一遍)!!!!
我找到怎么解决ISA使用X86来解决了,上图说是bison NO such file or directory 所以我们只需要安装bison和flex就可以了,直接sudo apt-get install bison & flex即可!!!(改成x86作为自己的ISA)
2022.07.28 明天看Makefile编译
2022.08.01 Makefile还是没看,把报错的assertion failed ‘0’解决了!!!
这个bug困扰了大概有一周左右!,之前一直不知道。之后仔细阅读了一下gitbook和source code 才发现 init.c 文件,怪不得我怎么修改其他的参数值都没有用 TAT 。
如下,
这是原始的text中img的值,修改过img【】中的第一个值之后 0x800002b7 -> 0x80000000 (肯定还有其他的改法,要使pc的值在0x00000000-0x7fffffff之间就可以了,两端都可以取等号)
最后的结果如下图!:
(似乎还是有点点不对,但是已经接近正确答案了。。。。)算是有点小突破!