用qemu-system-arm搭建arm11环境

来源:互联网 发布:软件培训可靠吗 编辑:程序博客网 时间:2024/05/20 08:45
http://darkofday.wikispaces.com/%E5%B5%8C%E5%85%A5%E5%BC%8F

用qemu-system-arm搭建arm11环境


以下方法将在ubuntu 10.04主机上,利用qemu-system-arm安装一个arm11的操作系统。系统采用nfs方式挂载文件系统,可以用来模拟arm11的运行环境,学习arm11汇编。

安装qemu-system-arm

  • sudo add-apt-repository ppa:linaro-maintainers/toolssudo apt-get updatesudo apt-get install qemu-system
  • 安装好后,可以执行以下命令查看版本
  • qemu-system-arm --versionQEMU 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 ~/armmkdir ~/arm/kernelcd ~/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.bz2tar 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.bz2tar -xvf linux-3.0.4.tar.bz2wget http://thoronir.net/raspi-dev/linux-arm.patchpatch -p1 -d linux-3.0.4/ < linux-arm.patch
  4. 设置内核编译选项
    • cd linux-3.0.4make ARCH=arm versatile_defconfigmake 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 ~/armmkdir debian_armel_squeezesudo debootstrap --foreign --arch armel squeeze debian_armel_squeeze http://ftp.tw.debian.org/debian
  2. 安装内核模块
    • cd linux-3.0.4sudo make ARCH=arm INSTALL_MOD_PATH=../debian_armel_squeeze modules_install
  3. 复制zImage
    • cd ~/armcp 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 ~/armtouch net-setupvim 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 ~/armtouch qemu-ifupvim qemu-ifup

      添加以下内容:
      #!/bin/sh/sbin/ifconfig $1 0.0.0.0 promisc up/usr/sbin/brctl addif br0 $1
    2. 创建qemu启动脚本
      touch qemu-start-armvim 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 ~/armsudo ./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,来方便使用。

参考资料

  • Raspberry Pi Emulator in Ubuntu with Qemu
  • How To: Running Fedora-ARM under QEMU
 
 
 
 
原创粉丝点击