CentOS7使用Qemu模擬ARM64


准備

RPM包安裝

yum安裝交叉編譯工具

yum install -y binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu bison flex glib2 glib2-devel pixman-devel bc

手動安裝glibc

yum庫中沒有glibc-aarch64,所以需要手動安裝相應的包。在該網站下載以下連個rpm包進行安裝

  • glibc-aarch64-linux-gnu
  • glibc-aarch64-linux-gnu-devel

下載源碼包

Linux源碼

使用wget下載Linux源碼(https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.77.tar.xz)或者在CSDN上下載
下載

busybox

https://busybox.net/downloads/busybox-1.24.2.tar.bz2

qemu

qemu支持ARM64目前只能通過源碼包形式安裝
https://download.qemu.org/qemu-4.1.0.tar.xz

拷貝頭文件

在編譯時缺少一些頭文件,可以將x86下的copy到aarch64下

cp -r /usr/include/rpc/* /usr/aarch64-linux-gnu/include/rpc/

安裝

qemu

安裝命令

# 解壓qemu安裝包進入其目錄執行以下命令
./configure --target-list=aarch64-softmmu,aarch64-linux-user --enable-virtfs --enable-debug && make -j4 && make install

Linux

編譯

# 設置環境變量
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
# 配置編譯選項
make defconfig 
make menuconfig 
# 編譯
make -j4

busybox

配置

執行make menuconfig命令進行配置,以下兩個選項需要設置

  • Busybox Setting -> Build Options -> static binary(enable)
  • Networking Utilities -> inetd(disable)
  • Busybox Setting -> BusyBox installation prefix(../rootfs)

編譯

make -j4 && make install

編譯完成后在busybox的同級目錄會生成一個rootfs目錄

制作文件系統

進入rootfs,執行以下命令

mkdir dev etc mnt 
mkdir -p etc/init.d

進入etc/init.d中創建文件rcS,在文件中加入以下內容,並修改rcS為可執行

mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

在etc/ 目錄下新建一個inittab文件,加入以下內容

::sysinit:/etc/init.d/rcS 
::respawn:-/bin/sh 
::askfirst:-/bin/sh 
::ctrlaltdel:/bin/umount -a -r 

在dev目錄下執行以下命令

mknod console c 5 1 
mknod null c 1 3

在rootfs目錄執行以下命令

find . | cpio -o -H newc > rootfs.cpio 
gzip -c rootfs.cpio > rootfs.cpio.gz

至此,rootfs中的rootfs.cpio.gz就是制作好的文件系統

虛擬機管理

虛擬機啟動

qemu-system-aarch64 -cpu cortex-a57 -machine type=virt -nographic -smp 1 -m 512 -kernel Image -append "rdinit=/linuxrc console=ttyAMA0" -initrd rootfs.cpio.gz -device virtio-scsi-device
qemu-system-aarch64 二進制文件,提供模擬aarch64架構的虛擬機進程
-m 2048 分配2048MB內存
-M virt 模擬成什么服務器,我們一般選擇virt就可以了,他會自動選擇最高版本的virt
-cpu cortex-a72 模擬成什么CPU,其中cortex-a53\a57\a72都是ARMv8指令集的
-smp 2,cores=2,threads=1,sockets=1 2個vCPU,這2個vCPU由qemu模擬出的一個插槽(socket)中的2個核心,每個核心支持一個超線程構成。
-bios xxx 指定bios bin所在的路徑
-device xxx 添加一個設備,參數可重復
-drive 添加一個驅動器,參數可重復
-net 添加網絡設備

GDB調式

安裝

下載GDB源碼包GDB, lasted version(suggestion)

編譯&安裝

./configure --target=aarch64-linux-gnu --program-prefix=aarch64-linux- --prefix=/usr/local/aarch64_gdb
make && make install


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM