用qemu-system-arm搭建arm11环境

本文介绍如何在Ubuntu 10.04上使用QEMU-system-arm建立ARM11的模拟运行环境,包括内核编译、文件系统制作及网络配置等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用qemu-system-arm搭建arm11环境


以下方法将在ubuntu 10.04主机上,利用qemu-system-arm安装一个arm11的操作系统。系统采用nfs方式挂载文件系统,可以用来模拟arm11的运行环境,学习arm11汇编。
安装qemu-system-arm
  • sudo add-apt-repository ppa:linaro-maintainers/tools
    sudo apt-get update
    sudo apt-get install qemu-system
  • 安装好后,可以执行以下命令查看版本
  • qemu-system-arm --version
    QEMU emulator version 0.15.50 (Debian 0.15.50-2011.08-0ubuntu4~ppa10.04.1),
    Copyright (c) 2003-2008 Fabrice Bellard
编译arm11的内核
  1. 创建文件夹~/arm/kernel,并切换工作目录
    • mkdir ~/arm
      mkdir ~/arm/kernel
      cd ~/arm/kernel
  2. 下载EABI的TAR包
    • wget https://sourcery.mentor.com/sgpp/lite/arm/portal/package8734/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
      tar xjvf arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
  3. 下载、解压,为内核打上armv6支持的补丁
    • wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.4.tar.bz2
      tar -xvf linux-3.0.4.tar.bz2
      wget http://thoronir.net/raspi-dev/linux-arm.patch
      patch -p1 -d linux-3.0.4/ < linux-arm.patch
  4. 设置内核编译选项
    • cd linux-3.0.4
      make ARCH=arm versatile_defconfig
      make ARCH=arm menuconfig
    • General Setup —>Cross-compiler tool prefix
      (We need to enter the path of the toolchain followed by ‘/bin/arm-none-eabi-’)
    • System Type —>
       
      [*] Support ARM V6 processor
      [*] ARM errata: Invalidation of the Instruction Cache operation can fail
    • Kernel Features —>
       
      [*] Use ARM EABI to compile the kernel
      [*] Allow old ABI binaries to run with this kernel
    • Bus Support —>
       
      [*] PCI Support
       
      Device Drivers —>SCSI Device Support —>
       
      [*] SCSI Device Support
      [*] SCSI Disk Support
      [*] SCSI CDROM support
      [*] SCSI low-lever drivers —>
      [*] SYM53C8XX  Version 2 SCSI support
    • Device Drivers —>Generic Driver Options—>
       
      [*] Maintain a devtmpfs filesystem to mount at /dev
      [*] Automount devtmpfs at /dev, after the kernel mounted the root
    • File systems —>Pseudo filesystems—>
       
      [*] Virtual memory file system support (former shm fs)
    • Device Drivers —>Input device support—>
       
      [*] Event interface
    • Device Drivers —>
       
      [*] Real Time Clock ->
  5. 编译内核
    • make ARCH=arm
制作文件系统
  1. 新建文件系统目录并下载文件
    • cd ~/arm
      mkdir debian_armel_squeeze
      sudo debootstrap --foreign --arch armel squeeze debian_armel_squeeze http://ftp.tw.debian.org/debian
  2. 安装内核模块
    • cd linux-3.0.4
      sudo make ARCH=arm INSTALL_MOD_PATH=../debian_armel_squeeze modules_install
  3. 复制zImage
    • cd ~/arm
      cp kernel/linux-3.0.4/arch/arm/boot/zImage .
配置NFS服务
  1. 如果没有安装NFS,先安装NFS软件包
    • sudo apt-get install nfs-kernel-server nfs-common
  2. 配置NFS
    1. 打开配置文件
      sudo vim /etc/exports
    2. 添加服务路径,在配置文件中加入一行
      /home/darkofday/arm/debian_armel_squeeze  *(rw,sync,no_root_squash)
    3. 保存并重启nfs服务
      sudo service nfs-kernel-server restart
配置网络
配置网络后,主机ubuntu和虚拟的arm11系统就在同一网段,以bridge方式连接.如果您的计算机是在路由器下面,配置网络完成之后,虚拟机arm11系统和ubuntu均能访问外网.
  1. 打开TUN/TAP选项
    1. 查看选项是否已经打开
      grep CONFIG_TUN= /boot/config-`uname -r`
    2. 查看/dev/net/tun是否存在,如果不存在,可以创建它
      mknod /dev/net/tun c 10 200
  2. 安装桥接工具
    • sudo apt-get install bridge-utils
  3. 创建网络桥接初始化脚本,第一次开虚拟机前运行该脚本;当然,你也可以将该脚本内容添加到/etc/rc.local中,在每次开机时自动运行
    1. 创建并打开配置文件
      cd ~/arm
      touch net-setup
      vim net-setup
    2. 加入以下内容后保存
      #!/bin/bash
      #net-setup
       
      /usr/sbin/brctl addbr br0
      /sbin/ifconfig eth0 0.0.0.0 promisc up
      /usr/sbin/brctl addif br0 eth0
      /sbin/dhclient br0
      /sbin/iptables -F FORWARD
  4. 创建启动脚本
    1. 创建qemu启动网络初始化脚本
      cd ~/arm
      touch qemu-ifup
      vim qemu-ifup

      添加以下内容:
      #!/bin/sh
      /sbin/ifconfig $1 0.0.0.0 promisc up
      /usr/sbin/brctl addif br0 $1
    2. 创建qemu启动脚本
      touch qemu-start-arm
      vim qemu-start-arm

      根据自己的情况添加以下内容
      #!/bin/bash
      #qemu-start-arm
       
      console="ttyAMA0"
      nfsip="192.168.0.204"
      nfspath="/home/darkofday/arm/debian_armel_squeeze"
      myip="192.168.0.210"
      gateway="192.168.0.1"
      netmask="255.255.255.0"
       
      qemu-system-arm \
      -M versatilepb -cpu arm1176 -m 256 \
      -rtc base=localtime,clock=host \
      -kernel /home/darkofday/arm/zImage \
      -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=/home/darkofday/arm/qemu-ifup \
      -append "root=/dev/nfs nfsroot=$nfsip:$nfspath ip=$myip:$nfsip:$gateway:$netmask:arm:eth0:off rw init=/bin/bash" -serial stdio
  5. 初始化arm11系统
    1. 运行net-setup脚本,初始化网络
      cd ~/arm
      sudo ./net-setup
    2. 启动arm11系统
      sudo ./qemu-start-arm
    3. 系统启动成功后,出现shell界面,运行以下命令
      mount /proc /proc -t /proc
      /debootstrap/debootstrap --second-stage

      设置主机名和密码
      printf "auto eth0\niface eth0 inet dhcp\n" >> etc/network/interfaces
       echo "arm-debian" > /etc/hostname
       passwd

      至此,初始化文件系统完成,可以直接关闭qemu窗口来关闭arm11系统。
  6. 修改启动脚本
    1. 打开脚本
      vim ~/arm/qemu-start-arm

      修改为
      #!/bin/bash
      #qemu-start-arm
       
      console="ttyAMA0"
      nfsip="192.168.0.204"
      nfspath="/home/darkofday/arm/debian_armel_squeeze"
      myip="192.168.0.210"
      gateway="192.168.0.1"
      netmask="255.255.255.0"
       
      qemu-system-arm \
      -M versatilepb -cpu arm1176 -m 256 \
      -rtc base=localtime,clock=host \
      -kernel /home/darkofday/arm/zImage \
      -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=/home/darkofday/arm/qemu-ifup \
      -append "root=/dev/nfs nfsroot=$nfsip:$nfspath ip=$myip:$nfsip:$gateway:$netmask:arm:eth0:off rw console=$console" -serial stdio
  7. 备注
    每次开机后(ubuntu 10.04主机),均要运行net-setup脚本一次,然后可以直接执行qemu-start-arm脚本来启动arm11的linux系统;当然,你可以将net-setup脚本里的内容加到开机启动脚本里面。使用时,可以将C代码放在nfs服务目录下编译,直接在arm11系统下运行和调试。你甚至可以在arm11系统中更换更快的软件源,安装一些额外的软件,比如ssh,来方便使用。
参考资料
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值