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之间就可以了,两端都可以取等号)

最后的结果如下图!:

(似乎还是有点点不对,但是已经接近正确答案了。。。。)算是有点小突破!

 

posted @ 2022-07-22 11:20  Dyral_HAN  阅读(513)  评论(0编辑  收藏  举报