《CPU设计实战》lab3记录

在历经仿真错误后,才发现需要先用linux虚拟机编译,可能生成trace的时候需要这里面的文件吧

步骤

  1. 编译测试程序
    将lab3文件夹下的soft/func目录设置为虚拟机共享目录,进入虚拟机的linux操作系统中(这里使用WSL2)进入soft/func目录,运行make clean ,在运行make。回到win操作系统,确保soft/func/obj下的内容是最新的。
    《CPU设计实战》lab3记录_第1张图片

图 WSL ubuntu 安装
可能自己的D盘是个机械键盘吧,搭载不上去
《CPU设计实战》lab3记录_第2张图片
图 在wsl中进入soft/func目录

《CPU设计实战》lab3记录_第3张图片
图 没有装make ,装一下
《CPU设计实战》lab3记录_第4张图片

图 安装mips-gcc 交叉编译工具
交叉编译工具
《CPU设计实战》lab3记录_第5张图片
图 将交叉编译工具添加到环境变量
《CPU设计实战》lab3记录_第6张图片
《CPU设计实战》lab3记录_第7张图片

图 bashrc文件内容

export PATH=/opt/gcc-4.3-ls232/bin:$PATH

《CPU设计实战》lab3记录_第8张图片

TOPDIR=$(shell pwd)

export LD_PRELOAD =
CFLAGS := -D_KERNEL -fno-builtin -mips1 -DMEMSTART=0x80000000 -DMEMSIZE=0x04000 -DCPU_COUNT_PER_US=1000 -I $(TOPDIR)/include 
CFLAGS += -fno-reorder-blocks -fno-reorder-functions -EL

OBJDIR = ./obj

export TOPDIR AR CFLAGS
export CROSS_COMPILE ?= mips-linux-

all:
	make compile

compile:main.bin main.data convert
	./convert
	mkdir -p $(OBJDIR)
	mv main.elf  $(OBJDIR)/.
	mv test.s    $(OBJDIR)/.
	mv main.bin  $(OBJDIR)/.
	mv main.data $(OBJDIR)/.
	mv *.coe     $(OBJDIR)/.
	mv *.mif     $(OBJDIR)/.

main.bin:main.elf
	${CROSS_COMPILE}objcopy -O binary -j .text $< $@ 

main.data:main.elf
	${CROSS_COMPILE}objcopy -O binary -j .data $< $@ 

main.elf: start.o libinst.a 
	${CROSS_COMPILE}gcc -E -P -Umips -D_LOADER -U_MAIN $(CFLAGS) bin.lds.S -o bin.lds
	${CROSS_COMPILE}ld -g -EL -T bin.lds  -o $@ start.o -L . -linst
	${CROSS_COMPILE}objdump -alD $@ > test.s

libinst.a:
	make -C inst $(TOPDIR)/$@

convert:convert.c
	gcc  $(ALIGNED) -o convert  convert.c

clean:
	rm -f *.o *.a 
	rm -rf obj
	make -C inst clean

reset:
	make clean
	rm -f bin.lds convert

help:
	@echo "################################################################"
	@echo "### help for compiling func"
	@echo "################################################################"
	@echo "### options:"
	@echo "###     make      : get compiled result, which is saved in ./obj"
	@echo "###     make clean: remove *.o, *.a, and ./obj"
	@echo "###     make reset: "make clean" and remove convert, bin.lds"
	@echo "###     make help : show help information"
	@echo "###############################################################"

-include rules.make

这个提供的Makefile是一个用于构建针对MIPS体系结构目标的项目的构建脚本。以下是对该Makefile中主要组件和目标的解释:

  1. 变量:

    • TOPDIR:存储当前工作目录。
    • LD_PRELOAD:一个看起来为空的环境变量。
    • CFLAGS:编译器标志,包括各种选项和包含目录。
    • OBJDIR:指定存储目标文件的目录。
    • CROSS_COMPILE:指定用于构建项目的交叉编译器前缀(例如,mipsel-linux-)。
  2. 目标:

    • all:默认目标,依赖于compile目标。
    • compile:一个用于编译项目的目标。它依赖于其他一些目标(main.binmain.dataconvert)并将生成的文件移动到$(OBJDIR)目录。
    • main.binmain.data:用于从main.elf可执行文件创建二进制文件的目标,使用objcopy工具。
    • main.elf:一个目标,将目标文件(start.olibinst.a)链接成一个ELF可执行文件(main.elf)。它还生成汇编代码清单(test.s)。
    • libinst.a:一个目标,似乎通过调用inst目录中的另一个Makefile来构建一个库(libinst.a)。
    • convert:一个目标,用于从convert.c构建一个名为convert的可执行文件。
    • clean:一个目标,用于清理已构建的文件和目录,包括删除目标文件、库和obj目录。它还在inst目录中调用make clean
    • reset:一个目标,用于清理项目并删除convert可执行文件和bin.lds文件。
    • help:一个目标,提供如何使用Makefile的信息。
  3. 规则: -include rules.make 行表明可能会从外部文件rules.make中包含额外的规则和配置信息。

  4. 使用: 要使用这个Makefile,可以在项目目录中从命令行运行各种目标,如makemake cleanmake resetmake helpmake命令将构建项目并将编译后的文件放置在obj目录中。

在使用此Makefile之前,请确保已经设置了用于构建MIPS代码的必要的交叉编译器(mips-linux-gcc)和依赖项。此外,您可能需要检查inst目录的Makefile和依赖项,以确保其正确构建。

这个Makefile非常特定于它所属的项目,并假定了某些目录结构和依赖项。在使用之前,请确保这些都已设置好。

《CPU设计实战》lab3记录_第9张图片

你可能感兴趣的:(CPU设计实战,CPU设计实战,WSL)