Skip to content

Latest commit

 

History

History
105 lines (77 loc) · 3.33 KB

环境搭建.md

File metadata and controls

105 lines (77 loc) · 3.33 KB

环境搭建_Win10_WSL2_Ubuntu20.04

一、准备

  • 虚拟机(VMware workstation)

  • Linux操作系统(Ubuntu 20.04 LTS)

  • qemu模拟器(在qemu模拟器上面运行kernel和compiler toolchain)

二、测试当前环境

操作系统是用的是Ubuntu 20.04版本,默认此时你已经在虚拟机中装好了Linux操作系统。

$  cd ~   进入当前用户目录。
$  objdump -i  第二行或第三行出现elf32-i386。
$  gcc -m32 -print-libgcc-file-name

 控制台出现/usr/lib/gcc/i486-linux-gnu/version/libgcc.a or /usr/lib/gcc/x86_64-linux-gnu/version/32/libgcc.a
如果控制台出现以上输出,那么当前工具链是没有问题的。如果没有这样的输出,输入下面一下指令:

$  sudo apt-get install -y build-essential gdb
然后再分别输入objdump -i和 gcc -m32 -print-libgcc-file-name指令,观察控制台是否出现相同的结果。 出现如期的结果表示你的工具链已经编译完成。

三、在当前用户的目录下,使用git 拉取jos和qemu

$ sudo git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab  #拉取jos
$ sudo git clone https://github.com/mit-pdos/6.828-qemu.git qemu    #拉取qemu
//将qemu移至lab目录下
$ cd lab
$ sudo mkdir qemu
$ cd ..
$ sudo mv qemu/* lab/qemu

四、安装qemu

//进入lab目录下的qemu目录
$ cd lab
$ cd qemu
//安装qemu需要的包。
$ sudo apt-get install libsdl1.2-dev
$ sudo apt-get install libglib2.0-dev
$ sudo apt-get install libz-dev
$ sudo apt-get install libpixman-1-dev
$ sudo apt-get install libtool*

//如果创建虚拟机时,安装的是64位系统,系统自带的是64位的gcc,但是开发环境需要32位的gcc。
使用以下命令提供32位的gcc, 当前操作在qemu文件夹中

$ sudo apt-get install gcc-10-multilib//必须安装对应版本
//进入qemu,再进入qga文件夹,为commands-posix.c添加头文件<sys/sysmacros.h>
$ cd qga
$ sudo vim commands-posix.c # 加上头文件 
//在文件底部添加QEMU_CFLAG+=-w
//避免[-Werror=deprecated-declarations]等待各式错误,踩坑很久。 还有在下面./configure的时候加上一句"CFLAGS=-Wno-error"才行!!!
$ cd qemu 
$ sudo vim Makefile 

五、配置qemu模拟器

$ CFLAGS=-Wno-error ./configure --disable-kvm --target-list="i386-softmmu x86_64-softmmu"

//使用make 和make install
$ sudo make -j8
$ sudo make install

六、最后,在lab目录执行make qemu

$ sudo make qemu-nox  # 加上"-nox"是不要图形化界面

使用命令:qemu-system-i386 ,出现qemu界面

问题1:如果出现 error: undefined reference to __udivdi3

解决办法:没有支持32位gcc环境,==因为我是gcc10.3.0,所以scc-10-multilib,使版本匹配==使用命令:sudo apt-get install gcc-10-multilib

问题2:如果出现:undefined reference to major 和 undefined reference to minor

解决办法:在/qemu/qga/commands-posix.c 中加上头文件 <sys/sysmacros.h>

问题3:如果出现error : Could not initialize sdl

解决办法:在最后一步,在lab目录中使用sudo make-nox来编译

img 参考博客_1

参考博客_2