# Install and Build QEMU simulator environment : ubuntu-20.04.2.0-desktop-amd64 ## 1. Install dependency package ``` sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev git libglib2.0-dev libfdt-dev libpixman-1-dev libncurses5-dev libncursesw5-dev ``` ## 2. Make new directory mkdir riscv-qemu && cd riscv-qemu ## 3. Build riscv-gnu-toolchain 參考[這個](https://hackmd.io/@nx1bTzFpQvaKD_yxYRmBaQ/Skpx_8tSO) ## 4. Download QEMU 在riscv-qemu的目錄下 ``` wget https://download.qemu.org/qemu-5.2.0.tar.xz tar xvJf qemu-5.2.0.tar.xz ``` ## 5. Compile and install QEMU cd qemu-5.1.0/ ./configure --target-list=riscv64-softmmu,riscv64-linux-user --prefix=/home/電腦名稱/riscv-qemu/qemu make -j $(nproc) sudo make install target為安裝模式 riscv64-softmmu 為system-mode,riscv64-linux-user為user-mode,記得都要裝。 ## 6. Add qemu into PATH export PATH=$PATH:/home/電腦名稱/riscv-qemu/qemu/bin 怕麻煩直接加入bashrc中。 加完後可以檢查一下是否安裝成功 ``` qemu-system-riscv64 --version ``` ## 7. Make linux kernel git clone https://github.com/torvalds/linux cd linux ## 8. Configure and Compile make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- -j $(nproc) 若CROSS_COMPILE無法找到riscv64-unknown-linux-gnu-記得直接把riscv64-unknown-linux-gnu-的絕對路徑打上去,例如CROSS_COMPILE=$RISCV/bin/riscv64-unknown-linux-gnu-這樣 ## 9. Make rootfs #### 1. back to riscv-qemu #### 2. 之後下載busybox ``` git clone https://github.com/mirror/busybox cd busybox ``` #### 3. Setting busybox ``` CROSS_COMPILE=riscv64-unknown-linux-gnu- make menuconfig ```  進入Setting  進入Build Option中,將Build static binary (no shared libs)點開,退出並保存。 #### 4. Compile and install CROSS_COMPILE=riscv64-unknown-linux-gnu- make -j $(nproc) CROSS_COMPILE=riscv64-unknown-linux-gnu- make install ## 10. Make file system #### 1. back to riscv-qemu #### 2. make image qemu-img create rootfs.img 1g mkfs.ext4 rootfs.img #### 3. mkdir rootfs sudo mount -o loop rootfs.img rootfs cd rootfs sudo cp -r ../busybox/_install/* . sudo mkdir proc sys dev etc etc/init.d #### 4. make RC file cd etc/init.d/ sudo touch rcS sudo vim rcS 編輯該文件的內容為下 ``` #!/bin/sh mount -t proc none /proc mount -t sysfs none /sys /sbin/mdev -s ``` #### 5. 修改rcS文件權限,以利busybox運行此文件 sudo chmod +x rcS #### 6. 退出rootfs目錄(回到riscv-qemu)並卸載文件系統 sudo umount rootfs ## 11. Execute QEMU system-mode qemu-system-riscv64 -M virt -m 256M -nographic -kernel linux/arch/riscv/boot/Image -drive file=rootfs.img,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -append "root=/dev/vda rw console=ttyS0" 看到此畫面代表成功  ## 12. Execute QEMU user-mode 有些情況在user mode的除錯較方便,只要將C檔案編譯成ELF文件後 ``` riscv64-unknown-elf-gcc filename.c -o output ``` 執行 ``` qemu-riscv64 output ``` 便可以得到和system mode一樣的結果
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up