使用QEMU模擬搭建ARM開發平台

2021-07-03 08:17:06 字數 4077 閱讀 7873

tags: qemu

安裝交叉編譯工具鏈

將下列源新增到/etc/apt/sources.list或在/etc/apt/sources.list.d/目錄下新建乙個檔案debian-arm-toolchain.list。

#

# -- emdebian cross toolchains

## deb unstable main

# deb testing main

deb squeeze main

然後,執行

#apt-get update

#apt-get install gcc-4.4-arm-linux-gnueabi

安裝工具鏈的方法可以參考

安裝qemu

#apt-get install qemu-system

$cd

$home

$tar

xjf linux-2.6.39.2.tar.bz2

$make

mrproper

#保證原始乾淨環境

$make

arch

=arm versatile_defconfig #使用versatile平台預設配置

$make

arch

=arm cross_compile

=arm-linux-gnueabi- all #編譯

幾分鐘過後,arch/arm/boot/zimage即生成了,然後使用qemu模擬。之所以選擇versatile平台,是因為qemu可以完全模擬。

$cp

arch/arm/boot/zimage$home/versatile-zimage

$qemu

-system-arm-m versatilepb-kernelversatile-zimage -m 128m

由於沒有提供根檔案系統,所以kernel會崩潰,由於找不到合適的root掛載項。下面製作乙個最小的initramfs,使其可以正常執行。

$mkdir

$home/versatile-initramfs

$cd$home/versatile-initramfs

$cat > init.c <> #include

> #include

> int main(void)

>

> eof

然後,編譯並且將其打包成initramfs。

$arm-linux-gnueabi-gcc -static -o init init.c

$rminit.c

$find. |

cpio -o -h newc

|gzip > ../versatile-initrd

$qemu

-system-arm -m versatilepb -kernel versatile-zimage -initrd

versatile-initrd -m 128m

tags: 

qemu

$tar xjf busybox-1.18.5.tar.bz2

$cd busy box-1.18.5

$make

arch

=arm cross_compile

=arm-linux-gnueabi- defconfig

$make

arch

=arm cross_compile

=arm-linux-gnueabi- menuconfig

選擇將busybox編譯成靜態檔案, "busybox settings --> build options"

$make

arch

=arm cross_compile

=arm-linux-gnueabi- install

編譯安裝完成後,會在當前目錄下生成_install目錄,此為預設的安裝目錄,也可以在busybox settings中設定為別的目錄。現在製作initramfs。

$cd _install

$find . | cpio -o -h newc | gzip $home/versatile-busybox

現在用qemu模擬。

$cd

$home

$qemu

-system

-arm-m

versatilepb

-kernel

versatile

-zimage

-initrd

versatile

-busybox-m

128m

-"root=/dev/ram rdinit=/bin/sh"

這裡如果不加rdinit=/bin/sh,那麼/linuxrc將會試圖掛載根檔案系統,並且執行新根檔案系統中的init,由於我們沒有另外的真正的根檔案系統,所以使用rdinit=/bin/sh,啟動到sh中,敲入回車,將會出現shell命令提示符。在當前root中,沒有/proc,/sys存在,所以例如mount等這些以來/proc, /sys的命令不能正常工作。在虛擬機器中執行

#mkdir /proc /sys

#mount -t proc proc /proc

#mount -t sysfs sysfs /sys

也可以將其加入到啟動指令碼中,關閉虛擬機器,然後修改versatile-busybox

$cd busybox-1.18.5/_install

$mkdir -p etc/init.d

$cd etc/init.d

$cat > rcs <#!/bin/sh

>mkdir /proc /sys

>mount -t proc proc /proc

>mount -t sysfs sysfs /sys

>mdev -s

eof$chmod +x rcs

$cd busybox-1.18.5/_install

$find . | cpio -o -h newc | gzip > $home/versatile-busybox

現在用qemu模擬

$

qemu

-system

-arm-m

versatilepb

-kernel

versatile

-zimage

-initrd

versatile

-busybox-m

128m

-"root=/dev/ram rdinit=/sbin/init"

注意這裡的rdinit=/sbin/init,前面之所以是rdinit=/bin/sh,是因為/sbin/init會執行/etc/init.d/rcs,而前面並沒有建立這個檔案,所以會列印很多錯誤!特別是由於沒有啟動mdev。

使用 qemu 模擬器搭建 arm 執行環境(一)

一.流程 1 安裝交叉編譯工具鏈 2 安裝 qemu 模擬器 3 編譯 arm 架構 u boot 4 用 u boot 測試 qemu 是否正常啟動 二.原理 qemu 是乙個在 linux 上廣泛使用的可以模擬 arm 的模擬器。在進行嵌入式系統的開發時,執行程式的目標平台通常具有有限的儲存空間...

從零使用qemu模擬器搭建arm執行環境

再續 從零使用qemu模擬器搭建arm執行環境 早在2011年的時候,跟當時同事一起討論,做linux系統開發正處於整個linux開發中間層,沒有上層的c c 業務和資料庫的開發經驗,也沒有底層的核心和驅動開發經驗,到底路該如何走 基於對linux系統開發的理解和核心的興趣,認為選擇linux核心開...

Ubuntu上使用QEMU模擬Ubuntu

install qemu on ubuntu 1 sudo apt get install kvm qemu libvirt bin virtinst virt manager virt viepwer qemu,kqemu,kvm,qemu kvm,libvirt關係 qemu的三種執行模式 2 ...