本博客内容基于《自己动手写CPU》这本书
上一篇博客介绍了实现一条ori指令,但用到的寄存器初始化文件是已经写好了的,下面我们学习如何利用CNU工具链交叉编译。
虚拟机和GNU工具链的安装
虚拟机的安装
上面是我安装虚拟机看的博客,绝对不坑!按照这个教程就可以安装管理虚拟机的软件,其中vmware workstation是收费的,而vmware player是免费的,我们暂且应该也不需要用到太多功能,下载vmware player就可以。
ubuntu镜像文件从这里下载,也是wnf提供的网址。
安装成功之后,安装VMware Tool
共享文件夹
主机与虚拟机之间传递文件要用到的,在这里我们解压文件需要共享文件夹。
不用看完,下面“2 samba服务器的搭建”与我们无关。
GNU工具链的安装
这个我真的踩了n多的坑,甚至中间还差点要放弃,最后看了 安装GNU工具链 才完成工具链的安装。
利用GNU交叉编译
首先按照书中内容编写汇编文件
编译汇编代码
mips-sde-elf-as -mips32 inst_rom.S -o inst_rom.o
将编译得到的可重定位目标文件(二进制)通过链接转化为可执行文件
按照书中编写链接描述脚本
mips-sde-elf-ld -T ram.ld inst_rom.o -o inst_rom.om
得到.bin文件
mips-sde-elf-objcopy -O binary inst_rom.om inst_rom.bin
格式转化
./Bin2Mem.exe -f inst_rom.bin -o inst_rom.data
编写Makefile文件
为得到存储器初始化文件,我们每次都需要输入4条命令,有点麻烦。这时候就需要Makefile文件,有了Makefile文件我们就可以在shell中输入以下指令就可以完成所有过程
make all
简单介绍一下Makefile文件(书中)
该文件前半部分定义一些变量,比如将CC定义为(mips-sde-elf-as)其实如上述提到的编译代码,后半部分定义了目标,采用的语法
目标: 依赖文件
命令