QEMU用户模式ARM仿真 - qemu-arm-static

https://blog.youkuaiyun.com/yanceylu/article/details/108570423

嵌入式开发有时会在ARM设备上使用ubuntu文件系统。开发者常常会面临这样一个问题,想预先交叉编译并安装一些应用程序,但是交叉编译的环境配置以及依赖包的安装十分繁琐,并且容易出错。想直接在目标板上进行编译和安装,但是ARM的资源和处理能力有限,会非常耗费时间。在这里给大家推荐一个ubuntu下好用的工具qemu-arm-static,这是QEMU用户模式下的ARM仿真器。

通过qemu-arm-static,我们在x86的ubuntu PC机上,可以模拟ARM处理器,就像运行在ARM上一样进行各种操作。这样既实现了ARM环境,又利用了x86 PC的处理能力

  1. Install 18.04 base
$ mkdir ~/rootfs && cd ~/rootfs 
$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/18.04.2/release/ubuntu-
base-18.04.2-base-arm64.tar.gz 
$ mkdir ubuntu-rootfs 
$ tar -xvf ubuntu-base-18.04.2-base-arm64.tar.gz -C ubuntu-rootfs 
$ cd ubuntu-rootfs 
$ ls 

4.Install qemu-user-static on PC to simulate arm64 environment

$ apt-get install qemu-user-static 
$ cp /usr/bin/qemu-aarch64-static  usr/bin 
$ cp -b /etc/resolv.conf etc/ 

5.Simulate arm64 environment

$ cd ../ 

$ vi ch-mount.sh 

(copy the content to 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 /dev/pts ${2}dev/pts    
    sudo chroot ${2} 
} 
function umnt() { 
    echo "UNMOUNTING" 
    sudo umount ${2}proc       sudo umount ${2}sys 
    sudo umount ${2}dev/pts 
    sudo umount ${2}dev 
} 
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 

(chroot to arm64 filesystem)

$ ./ch-mount.sh -m ubuntu-rootfs/ 

6.Install package and configuration

# chmod 777 tmp 
#echo nameserver 8.8.8.8 > /etc/resolv.conf  or  #echo nameserver 8.8.4.4 > /etc/resolv.conf 

# apt-get update 
Install package you need 

apt-get install \ 
  language-pack-en-base \ 
  sudo \ 
  ssh \ 
  net-tools \ 
  network-manager \ 
  iputils-ping \ 
  rsyslog \ 
  bash-completion \    htop \ 
  resolvconf \ 
  dialog \ 
   vim 

apt-get install v4l-utils alsa-utils git gcc less resolvconf autoconf autopoint libtool 
bison flex gtk-doc-tools glib-2.0 libglib2.0-dev libpango1.0-dev libatk1.0-dev kmod 
pciutils 
  1. Add user
$ useradd -s '/bin/bash' -m -G adm,sudo yourusername 
$ echo "Set password for yourusername:" 
$ passwd yourusername 
$ echo "Set password for root:" 
$ passwd root 
3) Set host name 
$ echo 'ubuntu.yourusername' > /etc/hostname 

8.Configure the serial port

$ sudo cp -ra /home/sk/bld_server2/users/skamiya/yocto/L4.14.98/imx-yocto-bsp-
ft/build-8qxpmek-xwayland/tmp/work/imx8qxpmek-poky-linux/systemd-
serialgetty/1.0-r5/image/*    ubuntu-rootfs/ 
<think>好的,我现在需要帮助用户了解如何进入QEMU用户模式。首先,我要回忆一下QEMU的基本知识。QEMU是一个模拟器,支持两种主要模式:系统模式用户模式。系统模式会模拟整个计算机系统,而用户模式则专注于运行不同架构的程序。用户可能已经知道系统模式,现在想转向用户模式的使用。 接下来,我需要确认用户模式的具体启动方法。根据之前的引用,用户模式QEMU可以运行单个程序,不需要启动完整操作系统。这时候应该使用qemu-<arch>这样的命令,比如qemu-x86_64来运行对应架构的可执行文件。 然后,我需要检查安装步骤是否正确。引用中提到在Linux上安装QEMU,可能用户是在Linux环境下操作。但用户模式的安装是否需要额外步骤?一般来说,安装QEMU用户模式工具应该已经包含,比如qemu-user-static包。可能需要提醒用户安装相关包。 另外,用户可能遇到动态链接库的问题,需要说明使用-L参数指定库路径。或者静态编译程序来避免依赖问题。这些都是常见问题,应该包含在回答中。 还要考虑是否需要给出具体的例子,比如运行一个ARM程序,使用qemu-arm加上参数。这样用户能更直观地理解步骤。同时,生成相关问题的时候,可以涉及用户模式的应用场景、与系统模式的区别,以及常见错误的解决方法,这样用户能进一步学习。 最后,确保回答结构清晰,分步骤说明,并验证命令的正确性。可能还需要提醒用户注意架构匹配,比如编译的程序必须与QEMU的目标架构一致。这样用户在实际操作时不会混淆。</think>### QEMU用户模式启动方法 QEMU用户模式允许直接在宿主机上运行不同架构的可执行文件,无需启动完整虚拟机。以下是具体步骤: --- #### 1. **安装用户模式工具** 在Linux系统中需安装`qemu-user-static`包以支持用户模式仿真: ```bash sudo apt-get install qemu-user-static # Debian/Ubuntu sudo pacman -S qemu-user-static # Arch Linux sudo yum install qemu-user-static # CentOS/Fedora ``` --- #### 2. **运行目标架构程序** 使用`qemu-<arch>`命令直接运行对应架构的可执行文件,例如: ```bash qemu-x86_64 ./hello_world # 运行x86_64程序 qemu-arm ./arm_program # 运行ARM架构程序 qemu-aarch64 ./aarch64_app # 运行AArch64程序 ``` --- #### 3. **处理依赖问题** - **动态链接库**:若程序依赖宿主系统不存在的库,需通过`-L`指定目标架构的库路径: ```bash qemu-arm -L /usr/arm-linux-gnueabi ./arm_program ``` - **静态编译**:推荐将程序静态编译以规避依赖问题: ```bash arm-linux-gnueabi-gcc -static arm_program.c -o arm_program ``` --- #### 4. **验证用户模式** 使用`-version`参数确认QEMU用户模式已就绪: ```bash qemu-arm -version # 输出QEMU版本及支持的架构 ``` --- ### 关键特性 - **轻量高效**:仅仿真CPU系统调用,资源占用低[^1] - **跨架构调试**:支持ARM/MIPS/RISC-V等架构程序调试[^2] - **容器兼容**:常用于跨架构容器运行(如Docker多架构镜像) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值