官术网_书友最值得收藏!

2.4 QEMU + RISC-V + Linux實驗平臺

本書少部分實驗(如指令集實驗和部分高速緩存偽共享實驗)可以在基于RISC-V的Linux主機上完成。基于RISC-V的Linux主機可以通過兩種方式獲取,一種是購買RISC-V開發板,另一種是使用QEMU+RISC-V+Linux實驗平臺。

下面介紹QEMU+RISC-V+Linux實驗平臺。Linux主機使用Ubuntu 20.04系統。

(1)安裝工具

首先,在Linux主機中安裝相關工具。

$ sudo apt-get install qemu-system-misc libncurses5-dev gcc-riscv64-linux-gnu
build-essential git bison flex libssl-dev opensbi

然后,在Linux主機系統中安裝RISC-V GCC編譯器的9.3版本。

$ riscv64-linux-gnu-gcc -v
gcc version 9.3.0 (Ubuntu 9.3.0-8ubuntu1) 

(2)下載倉庫

下載runninglinuxkernel_5.15的GIT倉庫并切換到master分支。

$ git clone https://github.com/runninglinuxkernel/runninglinuxkernel_5.15.git

(3)編譯內核并創建文件系統

runninglinuxkernel_5.15目錄中有一個rootfs_debian_riscv.tar.xz文件,這個文件采用Ubuntu Linux 20.04系統的根文件系統制作而成。

注意,該腳本會使用dd命令生成一個2GB大小的鏡像文件,因此主機系統需要保證至少有10 GB的空余磁盤空間。如果需要生成更大的根文件系統鏡像文件,可以修改run_rlk_ riscv.sh腳本。

首先,編譯內核。

$ cd runninglinuxkernel_5.15
$ ./run_rlk_riscv.sh build_kernel

執行上述腳本可能需要幾十分鐘時間,具體取決于主機的計算能力。

然后,編譯根文件系統。

$ sudo ./run_rlk_riscv.sh build_rootfs

注意,編譯根文件系統需要管理員權限,而編譯內核則不需要。執行完上述命令后,將會生成名為rootfs_debian_riscv.ext4的根文件系統。

(4)運行剛才編譯好的RISC-V版本的Linux系統

要運行run_rlk_riscv.sh腳本,輸入“run”即可。

$./run_rlk_riscv.sh run

運行結果如下。

rlk@ runninglinuxkernel_5.15 $ ./run_rlk_riscv.sh run
[   0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[   0.000000] No DTB passed to the kernel
[   0.000000] Linux version 5.15.0+ (rlk@master) (gcc version 9.3.0 (Ubuntu 
9.3.0-17ubuntu1~20.04)) #4 SMP Thu Sep 9 19:14:52 CST 2021
[   0.000000] initrd not found or empty - disabling initrd
[   0.000000] Zone ranges:
[   0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
[   0.000000]   Normal   empty
[   0.000000] Movable zone start for each node
[   0.000000] Early memory node ranges...
...
rlk login:

登錄系統時使用的用戶名和密碼如下。

用戶名:root。

密碼:123。

(5)在線安裝軟件包

QEMU虛擬機可以通過VirtIO-Net技術生成虛擬的網卡,并通過網絡地址轉換(Network Address Translation,NAT)技術和主機進行網絡共享。下面使用ifconfig命令檢查網絡配置。

root@ubuntu:~# ifconfig
enp0s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fec0::ce16:adb:3e70:3e71  prefixlen 64  scopeid 0x40<site>
        inet6 fe80::c86e:28c4:625b:2767  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:12:34:56  txqueuelen 1000  (Ethernet)
        RX packets 23217  bytes 33246898 (31.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4740  bytes 267860 (261.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到,這里生成了名為enp0s1的網卡設備,分配的IP地址為10.0.2.15。

可通過apt update命令更新Debian系統的軟件倉庫。

root@ubuntu:~# apt update

如果更新失敗,有可能是因為計算機系統中的時間比較舊,可以使用date命令設置日期。

root@ubuntu:~# date -s 2024-03-29 #假設最新日期是2024年3月29日
Sun Mar 29 00:00:00 UTC 2024

使用apt install命令安裝軟件包。比如,在線安裝GCC等軟件包。

root@ubuntu:~# apt install gcc build-essential

(6)在主機和QEMU虛擬機之間共享文件

主機和QEMU虛擬機可以通過NET_9P技術進行文件共享,這需要QEMU虛擬機和主機的Linux內核都使能NET_9P的內核模塊。本實驗平臺已經支持主機和QEMU虛擬機的文件共享,可以通過一個簡單方法來測試。

在Ubuntu主機上復制一個test.c文件到runninglinuxkernel_5.15/kmodules目錄。

$ cp test.c  runninglinuxkernel_5.15/kmodules

啟動并登錄QEMU虛擬機之后,檢查一下/mnt目錄中是否有test.c文件。

root@ubuntu:/# cd /mnt
root@ubuntu:/mnt # ls
README    test.c

后續的實驗(例如,第7章以及第14~16章的部分實驗)中會經常用到這個特性,如把編寫好的代碼文件復制到QEMU虛擬機。

主站蜘蛛池模板: 双桥区| 兴安盟| 房产| 山阴县| 射洪县| 迁安市| 马鞍山市| 徐闻县| 宁陕县| 贵阳市| 嘉峪关市| 增城市| 丹东市| 贵溪市| 南昌县| 开江县| 永胜县| 淄博市| 通州市| 湖南省| 探索| 秀山| 西华县| 方城县| 白山市| 额济纳旗| 渑池县| 海宁市| 涟源市| 乐昌市| 文水县| 辽阳市| 海南省| 石景山区| 胶南市| 洪雅县| 新巴尔虎左旗| 武山县| 黄山市| 邛崃市| 阿勒泰市|