iT邦幫忙

0

[gem5][riscv][linux] 在 gem5 上運行 linux kernel ( 使用 buildroot )

  • 分享至 

  • xImage
  •  

系列文章 : [gem5] 從零開始的 gem5 學習筆記

在這一篇裡,我們希望可以在 gem5 上開機 linux kernel,並紀錄下每一個過程中使用的指令。

Clone configuration script

從 github 上,把寫好的 gem5 configuration script 抓下來。

git clone https://github.com/TommyWu-fdgkhdkgh/gem5-boot-riscv-linux.git 
cd ./gem5-boot-riscv-linux

Build root filesystem ( Buildroot )

git clone git@github.com:buildroot/buildroot.git
cd buildroot
git checkout 56c6862bc81ef41c0fe012677eafa24381b1f76c

# use default configuration for RISC-V 64-bit virt QEMU/gem5
make qemu_riscv64_virt_defconfig


使用 menuconfig 去進行設定,在這邊我們希望可以輸出 ext4 檔案。

# enable ext4 filesystem 
make menuconfig

Filesystem images --->
ext2/3/4 variant (ext4) --->
ext4



關掉網路介面,加速開機速度

# Build the root filesystem
make -j$(nproc)

# (Optional) Hack to bypass the  network "waiting for eth0" delay during boot
sed -i 's/^auto eth0/#auto eth0/' output/target/etc/network/interfaces
make -j$(nproc)

Compile Linux Kernel

在這一步,我們可以直接使用 buildroot 的 toolchain。

git clone --depth 1 -b v6.8 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

# generate default RISC-V configuration
make ARCH=riscv CROSS_COMPILE=$(realpath ../buildroot/output/host/bin)/riscv64-buildroot-linux-gnu- defconfig

# Compile both the vmlinux ELF (needed for debugging) and the Image (used as payload)
make ARCH=riscv CROSS_COMPILE=$(realpath ../buildroot/output/host/bin)/riscv64-buildroot-linux-gnu- vmlinux Image -j$(nproc)

Compile OpenSBI

在這一步,我們一樣可以直接使用 buildroot 的 toolchain。
因為 OpenSBI 會把 linux kernel 當作 payload,所以在編譯 OpenSBI 之前,需要先編譯 linux kernel。

git clone https://github.com/riscv-software-src/opensbi.git
cd opensbi
git checkout 0b041e58c0787f76325da5081e41a13bf304d328

make CROSS_COMPILE=$(realpath ../buildroot/output/host/bin)/riscv64-buildroot-linux-gnu- PLATFORM=generic FW_PAYLOAD_PATH=$(realpath ../linux/arch/riscv/boot/Image) -j$(nproc)

Build gem5

git clone git@github.com:gem5/gem5.git 
cd gem5
git checkout 7a2b0e413d06c5ce7097104abef3b1d9eaabca91

# Build the RISC-V gem5 binary
scons build/RISCV/gem5.opt -j$(nproc)

Run the simulation

終於可以開始進行模擬了 !

./gem5/build/RISCV/gem5.opt ./run_riscv.py --cpu-type=minor

然後可以再另外一個視窗,進入 gem5 裡 guest OS 的 shell

./gem5/util/term/gem5term 3456

將指令整理成 Makefile

在這個 repo ( https://github.com/TommyWu-fdgkhdkgh/gem5-boot-riscv-linux ) 裡面,已經有把所有需要用到的指令整理成 Makefile 了! 所以想要復現的話,可以用下變得指令簡單達成。

# 編譯 buildroot
make buildroot/build

# 編譯 linux kernel
make linux/build

# 編譯 OpenSBI
make opensbi/build

# 編譯 gem5
make gem5/build

# 運行 gem5
make gem5/run

# 進入 gem5 的 terminal
make gem5/term

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言