歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Qemu Mini2440 的 Linux Fedora 下網絡配置

Qemu Mini2440 的 Linux Fedora 下網絡配置

日期:2017/2/28 16:19:11   编辑:Linux教程
最近應朋友的要求,研究一下QEMU MINI2440下的仿真。本來我以為這個過程沒什麼的,這一研究還真發現不少問題,寫出來與大家分享。

我使用的系統環境:
1.使用VMware 6.5,宿主機使用 win 7
2.VMWare 6.5上的系統是 Linux Fedora 8
3.RTEMS 的編譯環境 4.9

首先我從以下網站獲取源代碼:

1.獲取QEMU的源代碼:git clone git://repo.or.cz/qemu/mini2440.git qemu
2.獲取UBOOT的源代碼git clone git://repo.or.cz/u-boot-openmoko/mini2440.git uboot

(注意:QEMU的版本是2009/5/21 0:28:03 Michel pollet提交的版本, uboot是 2010/4/26 23:47:44 Michel Pollet 提交的版本

最下面,有這兩個版本的鏈接資源)

首先編譯QEMU:
cd qemu
./configure --target-list=arm-softmmu
make

編譯 UBOOT,這裡注意,我使用的是RTEMS 4.9的ARM編譯工具,使用

cd uboot

gedit Makefile #(將140行的 CROSS_COMPILE=arm-linux- 改為 CROSS_COMPILE=arm-rtems4.9-)
export PATH=/opt/rtems-4.9/bin:$PATH
make mini2440_config
make -j16
cp u-boot.bin ../qemu/mini2440

這個過程都很順利,緊接著噩夢來……

進入 qemu 文件夾下,輸入:

./mini2440/mini2440_start.sh

這裡有個問題:
1.如果在編譯QEMU時沒有安裝,即 make install,那麼需要打開mini2440/mini2440_start.sh,將第16行的 qemu-img 改為:$base/../qemu-img

2.如果編譯時安裝了QEMU,即有make install,不管這一步驟。

期待的畫面並沒有出來。取而代之的是:

/etc/qemu-ifup:could not launch network script
Could not initialize device 'tap'

於是開始漫長的尋找問題之旅,網上大部分是基於Ubuntu的,對於Fedora 8的很少有價值的解決方案:
1.有些網上說是內核沒有tun 模塊,但我是有的,輸入以下命令:
modprobe tun;lsmod | grep tun
系統顯示:tun 11713 0

2.有些網上說是/etc/net/tun的權限不對,輸入以下命令:
ls -l /dev/net/tun
crw-rw-rw- 1 root root 10, 200 2011-03-16 07:05 /dev/net/tun
很顯然,也不是。這裡注意一下,如果有些童鞋這步問題,可以采用以下命令解決:
mkdir /dev/net
mknod /dev/net/tun c 10 200
chmod 666 /dev/net/tun

3.關於/etc/qemu-ifup的腳本權限,已經輸入以下命令:
chmod 777 /etc/qemu-ifup

chmod 777 /etc/qemu-ifdown

4.需要安裝uml-utilies和bridge-utils:
對於Fedora 8,使用命令:
yum install bridge-utils
很輕松的安裝上了。

(有bridge-utils-1.2-2.Fedora 8.i386.rpm可以供下載

使用 rpm -U bridge-utils-1.2-2.Fedora 8.i386.rpm 安裝)

但uml-utilies安裝不是通過yum install uml-utilies,沒有這個包。
而是下載:uml-utilities-20040406-75.i586.rpm,
使用命令 rpm -U uml-utilities-20040406-75.i586.rpm
完成安裝的。這兩個包安裝完畢,系統裡才有tunctl、brctl命令。

依舊是:/etc/qemu-ifup:could not launch network script ……
這下傻眼了。仔細考慮一下,我認為是QEMU自身代碼的問題。
於是稍微跟蹤了一下代碼,發現qemu中的net.c代碼,第1023行的
static int launch_script(const char *setup_script, const char *ifname, int fd)函數老是返回 -1。
原來是第1045行的execv(setup_script, args);函數沒有成功啟動腳本,
加了打印函數,errno 是 8,即

ENOEXEC

The new process image file has the appropriate access permissions, but is not in the proper format.

意思是,權限沒有問題,但是格式不對。哦,難道是exec函數族不能直接啟動腳本?
呵呵,BUG,絕對的BUG。

Copyright © Linux教程網 All Rights Reserved