# 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.