qemu-mips環境搭建跳坑指南


  1. qemu安裝

    安裝有很多方式,對於ubuntu/debian用戶,直接apt安裝即可

    官網:https://www.qemu.org/download/

    sudo apt-get install zlib1g-dev
    sudo apt-get install libglib2.0-0
    sudo apt-get install libglib2.0-dev
    sudo apt-get install libtool
    sudo apt-get install libsdl1.2-dev
    sudo apt-get install libpixman-1-dev
    sudo apt-get install autoconf
    sudo apt-get install qemu 
    sudo apt-get install qemu-user-static
    sudo apt-get install qemu-system
    

    或者使用源碼安裝的方式
    https://www.qemu.org/download/
    https://github.com/qemu/qemu

  2. buildroot 交叉編譯環境的配置

下載buildroot

   wget http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2
   tar -jxvf buildroot-snapshot.tar.bz2
   cd buildroot

配置buildroot

   sudo apt-get install libncurses-dev patch
   make clean
   make menuconfig

出現的界面當中,”Target Architecture”改為”MIPS”大端小端自行選擇,另外在”Toolschain”中要將”Kernel Headers”的版本改為自己系統的版本

可以使用 uname -r 查詢

我的內核版本是4.13.0-36-generic

很難受的一點是 在Kernel Headers選項中並沒有4.13.x……

這時候要選擇”Manually specified Linux version”,並在下方的”Custom kernel headers series”中手動指定為4.13.x

退出后執行下方命令

   sudo apt-get install texinfo
   sudo apt-get install bison
   sudo apt-get install flex
   sudo make

在編譯過程中……會比較慢…..耐心等待 = =

其中要注意的一點是,我在編譯的時候遇到了一個問題

其中一部分文件在下載時本應是linux-4.13.tar.xz但是Makefile好像有些問題,訪問成了linux-.tar.xz

我對這個問題的處理方式是:

 1. 手動下載linux-4.13.tar.xz

 2. 手動保存為

    ```buildroot/output/build/linux-headers/.stmap_download```

    和

    ``buildroot/dl/linux/linux-.tar.xz``

3. 繼續編譯

編譯結束后,使用mipsel-linux-gnu-gcc指令即可編譯出mips架構下的elf文件

同時,mips程序執行所需要的依賴庫也都保存到了/usr/mipsel-linux-gnu/lib

  1. qemu虛擬機的網絡環境配置

    首先安裝依賴

    sudo apt-get install bridge-utils uml-utilities

    我這里選擇使用網橋的方法使宿主機與虛擬機互聯,然后通過NAT的方式使虛擬機與外網鏈接

    注意一點,如果不進行NAT設置的話,虛擬機是不能訪問外網的,這也是許多文章沒有提到的問題(我在坑里呆了好久)

    sudo brctl addbr br0
    sudo ifconfig br0 192.168.122.1/24 up
    sudo tunctl -t tap0
    sudo ifconfig tap0 192.168.122.11/24 up
    sudo brctl addif br0 tap0
    

    下載qemu虛擬機的鏡像

    https://people.debian.org/~aurel32/qemu/mips/
    

    我選擇的內核和鏡像是vmlinux-3.2.0-4-4kc-maltadebian_wheezy_mips_standard.qcow2

    默認用戶名密碼是:root/root

    然后在本機配置dhcp,dns服務

    sudo dnsmasq --strict-order --except-interface=lo --interface=br0 --listen-address=192.168.122.1 --bind-interfaces --dhcp-range=192.168.122.2,192.168.122.254 --conf-file="" --pid-file=/var/run/qemu-dhcp-virbr0.pid --dhcp-leasefile=/var/run/qemu-dhcp-virbr0.leases --dhcp-no-override

    現在使用

    sudo qemu-system-mips64 -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic

    命令啟動虛擬機,就可以做到虛擬機與宿主機互通了

    接下來進行外網連接的配置

    開啟端口轉發

    sudo sysctl -w net.ipv4.ip_forward=1
    sudo sysctl -p /etc/sysctl.conf
    

    配置iptables

    sudo iptables -t nat -A POSTROUTING -s "192.168.122.0/255.255.255.0" ! -d "192.168.122.0/255.255.255.0" -j MASQUERADE
    sudo iptables -N vm-service
    sudo iptables -A vm-service -j ACCEPT
    sudo iptables -A FORWARD -s 192.168.122.0/24 -j   vm-service
    

    再使用上方的命令啟動虛擬機,就可以與外網互通了

     
  2. qemu-mipsel運行動態編譯的程序

    qemu-mipsel平時運行程序,遇到動態編譯的程序時,就會提示依賴庫缺少

    書上和網上給出的方法都是chroot,但使用這個命令時也有幾個坑

    先將buildroot所編譯出的lib庫復制到程序文件夾下

    然后再執行chroot的命令

       cp $(which qemu-mipsel) .
       sudo chroot . ./qemu-mipsel hello
    

    已經將lib庫復制到目錄下,但是在執行時還是缺少依賴庫

    這時候大概率就是qemu-mipsel缺少依賴庫了…….一種解決方式是通過ldd指令查看qemu的依賴庫,並復制,另一種方法是我更推薦的,直接使用靜態編譯的qemu-mipsel-static

       cp $(which qemu-mipsel-static) .
       sudo chroot . ./qemu-mipsel-static hello
    

至此…..我的qemu安裝爬坑結束,哪里有問題,還望師傅們多多包涵(告訴我)


免責聲明!

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



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