手把手教你在QEMU上運(yùn)行RISC-V Linux
今天教大家在QEMU模擬器上運(yùn)行一個RISC-V Linux
一個RISC-V Linux包括:
opensbi
linux
根文件系統(tǒng)
1、下載RISC-V工具鏈
自己下載工具鏈源碼進(jìn)行編譯容易配錯選項(xiàng),我們使用編譯好的工具鏈即可。
網(wǎng)址:https://toolchains.bootlin.com
這個網(wǎng)站提供了一些已經(jīng)編譯好的工具鏈,我們從中下載即可。
arch選擇risCV64-lp64d,libc選擇glibc,然后點(diǎn)擊下載。
stable是穩(wěn)定版,bleeding-edge是最新的,可根據(jù)需要選擇,這里我們選擇bleeding-edge。

下載后解壓:
將risCV64-lp64d--glibc--bleeding-edge-2022.08-1/bin路徑添加到PATH環(huán)境變量中:
2、安裝QEMU
QEMU官網(wǎng):https://www.qemu.org/
下載安裝:
3、編譯opensbi
下載opensbi:
編譯:
編譯完后生成的固件在build/platform/generic/firmware/
目錄下:

生成的固件有三種類型:dynamic、jump和payload
dynamic:帶有動態(tài)信息的固件
jump:指定下一級的boot地址跳轉(zhuǎn)
payload:包含下一級boot的二進(jìn)制內(nèi)容,通常是uboot/linux
這里我們使用jump類型固件,OpenSBI運(yùn)行后,可以直接跳轉(zhuǎn)到kernel運(yùn)行。
因?yàn)閛pensbi本身就是一個bootloader,因此可以不使用uboot引導(dǎo)kernel,通過opensbi的jump固件,可以直接跳轉(zhuǎn)到kernel啟動。
4、編譯kernel
Linux內(nèi)核官網(wǎng):www.kernel.org
選擇當(dāng)前穩(wěn)定版5.19.16下載

解壓kernel:
編譯:
編譯完成后,在arch/riscv/boot下生成Image:

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ? ?


5、制作rootfs
文件系統(tǒng)可以用busybox、buildroot等工具制作,busybox需要自己一步一步的做出來,過程比較麻煩。更便捷的做法是使用buildroot,它可以自動幫我們完成。
下載地址:https://buildroot.org/download.html

下載后解壓:
進(jìn)入buildroot菜單配置界面:
選擇RISC-V架構(gòu)

選擇ext文件系統(tǒng)類型:

保存后編譯:
編譯需要花一些時間,buildroot前期大部分時間去編譯工具鏈了。 編譯完后,生成文件在output/images
目錄下:

rootfs.ext2是我們需要用到的。
6、運(yùn)行
將fw_jump.elf、Image、rootfs.ext2拷貝到當(dāng)前目錄下:

新建start-qemu.sh
腳本,輸入以下內(nèi)容:
修改權(quán)限:
chmod 777 start-qemu.sh
運(yùn)行start-qemu.sh啟動RISC-V Linux:

輸入root回車登錄:

成功進(jìn)入Linux!
buildroot搭建環(huán)境
前面我們用buildroot制作了文件系統(tǒng),但buildroot其實(shí)可以幫我們搭建一套完整環(huán)境,包括工具鏈、opensbi、linux、文件系統(tǒng)等等,只需要簡單配置一下,即可自動幫我們完成,非常方便。下面教大家使用buildroot搭建一個qemu risCV64 linux系統(tǒng)。
使用默認(rèn)的qemu_risCV64配置進(jìn)行編譯:
接下來就是漫長的等待,可能需要幾個小時。 編譯完后,生成文件在output/images目錄下:

可以看到opensbi、Image、rootfs都做好了,包括qemu的下載編譯也會幫我們自動完成。可以直接運(yùn)行start-qemu.sh:

使用buildroot搭建環(huán)境,幾乎什么都不需要做,非常方便!要注意的就是確保網(wǎng)絡(luò)暢通,網(wǎng)絡(luò)不流暢buildroot可能會中斷。
總結(jié)
學(xué)習(xí)RISC-V Linux搭建環(huán)境是第一步,有了環(huán)境才能更好的去跟蹤源碼調(diào)試,當(dāng)然如果有開發(fā)板更好。以上是我在qemu上搭建RISC-V Linux的總結(jié),希望對大家有幫助。
原文作者:嵌入式Linux充電站
