qemu+chroot構建arm aarch64虛擬機


在X86環境下構建出arm虛擬機可以模擬arm環境進行開發、在arm linux的文件系統中安裝相應的庫文件,編譯arm版本等。

簡單介紹下在X86環境下構建ARM虛擬機的步驟。

 

1、x86環境安裝qemu-user-static

sudo apt-get install qemu-user-static

2、准備arm linux根文件系統

arm linux根文件系統可以直接下載干凈的版本

或者從運行的arm單板上進行備份獲取。

arm單板上備份根文件系統命令:

sudo tar -cvpzf rootfs.tgz --exclude=/proc --exclude=/mnt --exclude=/sys --exclude=/rootfs.tgz /

解壓根文件系統命令:

tar -xvpfz rootfs.tgz -C ./

3、構建虛擬機

創建rootfs目錄,在rootfs下執行根文件系統解壓命令,解壓完成后,copy qemu執行命令到arm文件系統中

sudo cp /usr/bin/qemu-arm-static usr/bin/
sudo cp /usr/bin/qemu-aarch64-static usr/bin/

在rootfs錄下創建proc、sys、host目錄

rootfs所在目錄下創建ch-mount.sh文件

#!/bin/bash

function mnt() {
    echo "MOUNTING"
    sudo mount -t proc /proc ${2}proc
    sudo mount -t sysfs /sys ${2}sys    
    sudo mount -o bind /dev ${2}dev
    sudo mount -o bind /run ${2}run 
    sudo mount --bind / ${2}host
    #sudo mount -vt tmpfs shm ${2}dev/shm
    #sudo mount -t /dev/shm ${2}dev/shm
    sudo chroot ${2}
}

function umnt() {
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    #sudo umount ${2}dev/shm
    sudo umount ${2}dev
    sudo umount ${2}run
    sudo umount ${2}host
}


if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
    mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
else
    echo ""
    echo "Either 1'st, 2'nd or both parameters were missing"
    echo ""
    echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
    echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
    echo ""
    echo "For example: ch-mount -m /media/sdcard/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi
ch-mount.sh

執行ch-mount.sh,創建虛擬機

sudo ./ch-mount.sh -m rootfs/

arm虛擬機准備完畢,可以在虛擬的arm環境上進行相應的操作,創建用戶、編譯arm版本、......

4、卸載虛擬機

在虛擬機環境中執行exit退出。然后執行命令卸載掛載的相關文件。

 

sudo ./ch-mount.sh -u rootfs/

 


免責聲明!

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



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