Linux环境开发指南

来自SylixOS-wiki
(版本间的差异)
跳转至: 导航, 搜索
(安装开发工具)
(编译 qemu-mini2440)
 
(未显示1个用户的68个中间版本)
第4行: 第4行:
  
 
===安装开发工具===
 
===安装开发工具===
:下载 SylixOS 源代码需要 Git 工具,修改配置文件需要用到 vim 编辑器,
+
 
 +
----
 +
 
 +
:编译 Qemu 需要用到主机系统的 g++ 编译器,而下载 SylixOS 源代码需要 Git 工具,修改配置文件需要用到 vim 编辑器,
  
 
如果你的系统不具备这些工具,请先执行如下命令安装它们到你的系统:
 
如果你的系统不具备这些工具,请先执行如下命令安装它们到你的系统:
第13行: 第16行:
  
 
===下载 SylixOS 源代码===
 
===下载 SylixOS 源代码===
:创建一个名为 sylixos_workspace 的目录(下文约定该目录是 /home/user/sylixos_workspace 目录,即 ~/sylixos_workspace),
 
  
打开终端,进入该目录,输入如下命令即可下载 SylixOS Base工程、mini2440开发板BSP、进程 C 库 libcextern 工程等:
+
----
  
 +
:打开终端,创建一个名为 sylixos_workspace 的目录(下文约定该目录是 /home/user/sylixos_workspace 目录,即 ~/sylixos_workspace),
 +
 +
cd ~
 +
mkdir sylixos_workspace
 +
 +
:进入该目录,输入如下命令即可下载 SylixOS Base工程、mini2440开发板BSP工程、示例工程等:
 +
 +
cd sylixos_workspace
 
  git clone http://git.sylixos.com/repo/sylixos-base.git
 
  git clone http://git.sylixos.com/repo/sylixos-base.git
 
  git clone http://git.sylixos.com/repo/bspmini2440.git
 
  git clone http://git.sylixos.com/repo/bspmini2440.git
第22行: 第32行:
 
  git clone http://git.sylixos.com/repo/tools.git
 
  git clone http://git.sylixos.com/repo/tools.git
 
  git clone http://git.sylixos.com/repo/qemu-mini2440.git
 
  git clone http://git.sylixos.com/repo/qemu-mini2440.git
 +
 +
:sylixos-base 是 SylixOS Base 工程,里面包含了 libsylixos 和 libcextern 子工程,输入如下命令初始化和更新子工程:
 +
cd sylixos-base
 +
git submodule init
 +
git submodule update
 +
cd ..
  
 
===安装交叉编译器===
 
===安装交叉编译器===
:交叉编译器的下载地地址是 https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q1-update/+download/gcc-arm-none-eabi-4_8-2014q1-20140314-linux.tar.bz2
 
  
:下载的交叉编译器压缩包是 gcc-arm-none-eabi-4_8-2014q1-20140314-linux.tar.bz2。
+
----
 +
 
 +
:交叉编译器的下载地地址是 https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q1-update/+download/gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2
 +
 
 +
:下载的交叉编译器压缩包是 gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2。
  
 
:输入如下命令将其解压到 /usr/lib 目录:
 
:输入如下命令将其解压到 /usr/lib 目录:
  
  sudo tar jxvf gcc-arm-none-eabi-4_8-2014q1-20140314-linux.tar.bz2 -C /usr/lib
+
  sudo tar jxvf gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2 -C /usr/lib
  
 
:输入如下命令将解压后的目录重命名为 /usr/lib/gcc-arm-none-eabi 目录(避免编译器升级,版本号日期改变带来不必要的问题):
 
:输入如下命令将解压后的目录重命名为 /usr/lib/gcc-arm-none-eabi 目录(避免编译器升级,版本号日期改变带来不必要的问题):
  
  sudo mv /usr/lib/gcc-arm-none-eabi-4_8-2014q1/ /usr/lib/gcc-arm-none-eabi
+
  sudo mv /usr/lib/gcc-arm-none-eabi-4_9-2015q1/ /usr/lib/gcc-arm-none-eabi
  
 
:由于 SylixOS 修改了编译器的 reent.h 文件,所以使用编译器自带的 reent.h 文件将不能编译成功,需要
 
:由于 SylixOS 修改了编译器的 reent.h 文件,所以使用编译器自带的 reent.h 文件将不能编译成功,需要
  
复制 ~/sylixos_workspace/tools/arm-none-eabi-patch/4.8/reent.h 文件到 /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys 目录替换原有的文件。
+
复制 ~/sylixos_workspace/tools/arm-none-eabi-patch/4.9/reent.h 文件到 /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys 目录替换原有的文件。
  
 
:替换前先备份编译器原有的 reent.h 文件:
 
:替换前先备份编译器原有的 reent.h 文件:
第46行: 第65行:
 
:再替换编译器原有的 reent.h 文件:
 
:再替换编译器原有的 reent.h 文件:
  
  sudo cp ~/sylixos_workspace/tools/arm-none-eabi-patch/4.8/reent.h /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys
+
  sudo cp ~/sylixos_workspace/tools/arm-none-eabi-patch/4.9/reent.h /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys
  
 
:为了方便后续使用,修改环境变量 PATH:
 
:为了方便后续使用,修改环境变量 PATH:
第64行: 第83行:
 
==编译 SylixOS==
 
==编译 SylixOS==
  
===编译 libsylixos===
+
===编译SylixOS Base工程===
  
:进入 libsylixos 工程目录:
+
----
  cd ~/sylixos_workspace/libsylixos
+
 
 +
:sylixos-base工程包含了SylixOS操作系统libsylixos和SylixOS进程C库libextern子工程。
 +
 
 +
:打开sylixos-base下的config.mk,修改为如下:
 +
 
 +
  #*********************************************************************************************************
 +
# SylixOS Base Project path
 +
#*********************************************************************************************************
 +
SYLIXOS_BASE_PATH = /home/user/sylixos_workspace/sylixos-base
 +
 +
#*********************************************************************************************************
 +
# Toolchain prefix
 +
#*********************************************************************************************************
 +
TOOLCHAIN_PREFIX = arm-none-eabi-
 +
 +
#*********************************************************************************************************
 +
# Debug options (debug or release)
 +
#*********************************************************************************************************
 +
DEBUG_LEVEL = debug
  
 
:输入 make 命令以编译:
 
:输入 make 命令以编译:
 
  make  
 
  make  
  
:编译成功后,会在 Debug 目录生成如下文件:
+
:编译耗费的时间视你的机器的性能而定,一般需要10分钟。
libdsohandle.a  libvpmpdm.so xinput.ko  xsiipc.ko
+
  
===编译 libcextern===
+
:最后libsylixos子工程生成静态库文件libsylixos.a和libdsohandle.a及libvpmpdm.a、动态库文件libvpmpdm.so、内核模块xinput.ko
  
:进入 libcextern 工程目录:
+
和xsiipc.ko、符号表文件symbol.c和symbol.h(位于/home/user/sylixos_workspace/sylixos-base/libsylixos/Debug目录)。
  cd ~/sylixos_workspace/libcextern
+
 
 +
:libextern子工程生成静态库文件libcextern.a和动态库文件libcextern.so(位于/home/user/sylixos_workspace/sylixos-base/libcextern/Debug目录)。
 +
 
 +
===编译bspmini2440工程===
 +
 
 +
----
 +
 
 +
:bspmini2440工程是移植SylixOS操作系统到mini2440开发板的BSP工程。
 +
 
 +
:打开bspmini2440下的config.mk,修改为如下:
 +
 
 +
  #*********************************************************************************************************
 +
# SylixOS Base Project path
 +
#*********************************************************************************************************
 +
SYLIXOS_BASE_PATH = /home/user/sylixos_workspace/sylixos-base
 +
 +
#*********************************************************************************************************
 +
# Toolchain prefix
 +
#*********************************************************************************************************
 +
TOOLCHAIN_PREFIX = arm-none-eabi-
 +
 +
#*********************************************************************************************************
 +
# Debug options (debug or release)
 +
#*********************************************************************************************************
 +
DEBUG_LEVEL = debug
  
 
:输入 make 命令以编译:
 
:输入 make 命令以编译:
 
  make  
 
  make  
  
:编译成功后,会在 Debug 目录生成如下文件:
+
:最后生成ELF文件bspmini2440.elf和二进制文件bspmini2440.bin(位于/home/user/sylixos_workspace/bspmini2440/Debug目录)。
  libcextern.so
+
 
 +
===编译examples工程===
 +
 
 +
----
 +
:examples工程是示例工程,包括应用程序工程、内核模块工程、库工程。
 +
 
 +
:打开examples下的config.mk,修改为如下:
 +
 
 +
#*********************************************************************************************************
 +
# SylixOS Base Project path
 +
#*********************************************************************************************************
 +
SYLIXOS_BASE_PATH = /home/user/sylixos_workspace/sylixos-base
 +
 +
#*********************************************************************************************************
 +
# Toolchain prefix
 +
#*********************************************************************************************************
 +
TOOLCHAIN_PREFIX = arm-none-eabi-
 +
 +
#*********************************************************************************************************
 +
# Debug options (debug or release)
 +
  #*********************************************************************************************************
 +
DEBUG_LEVEL = debug
 +
 
 +
:输入 make 命令以编译:
 +
make
 +
 
 +
:examples工程包含了三个子工程:应用程序示例工程hello_world、内核模块示例工程hello_module、库示例工程hello_library。
 +
 
 +
:*应用程序示例工程hello_world会生成应用程序可执行文件hello_world(位于/home/user/sylixos_workspace/examples/hello_world/Debug目录)。
 +
 
 +
:*内核模块示例工程hello_module会生成内核模块文件hello_module(位于/home/user/sylixos_workspace/examples/hello_module/Debug目录)。
 +
 
 +
:*库示例工程hello_library会生成静态库文件libhello_library.a和动态库文件libhello_library.so
 +
 
 +
(位于/home/user/sylixos_workspace/examples/hello_library/Debug目录)。
 +
 
 +
==搭建 SylixOS Linux 仿真环境==
 +
 
 +
===编译 qemu-mini2440===
 +
 
 +
----
 +
 
 +
*下载 qemu-mini2440 源代码
 +
 
 +
:输入如下命令下载 qemu-mini2440 的源代码到 /home/user/sylixos_workspace/qemu-mini2440-src 目录:
 +
 +
cd /home/user/sylixos_workspace
 +
git clone https://github.com/SylixOS/qemu-mini2440.git qemu-mini2440-src
 +
 
 +
*配置 qemu-mini2440
 +
 
 +
:输入如下命令配置 qemu-mini2440:
 +
cd qemu-mini2440-src
 +
  ./configure --target-list=arm-softmmu
 +
 
 +
:如果出现如下提示:
 +
 
 +
Error: zlib check failed
 +
Make sure to have the zlib libs and headers installed.
 +
 
 +
:那么输入如下命令安装 zlib 开发包:
 +
 
 +
sudo apt-get install zlib1g-dev
 +
 
 +
:同样,如果出现如下提示:
 +
 
 +
Error: sdl check failed
 +
 
 +
:则输入如下命令安装 sdl1.2 开发包:
 +
 
 +
sudo apt-get install libsdl1.2-dev
 +
 
 +
*编译 qemu-mini2440
 +
:输入如下命令编译:
 +
 
 +
make
 +
 
 +
:正确编译之后,会在 arm-softmmu 子目录下生成 qemu-system-arm 文件。
 +
 
 +
:输入如下命令将其复制到 /home/user/sylixos_workspace/qemu-mini2440 目录:
 +
 
 +
cp ./arm-softmmu/qemu-system-arm /home/user/sylixos_workspace/qemu-mini2440
 +
 
 +
===配置 qemu 的网络功能===
 +
 
 +
----
 +
 
 +
:qemu 支持多种网络链接方式,其中最常用的就是桥接(bridge)。 这需要依赖内核的 tun/tap 模块的支持。
 +
 
 +
*输入如下命令安装必要的工具包:
 +
 
 +
sudo apt-get install uml-utilities
 +
sudo apt-get install bridge-utils
 +
 
 +
*输入如下命令查看 /dev/net/tun 文件:
 +
 
 +
ls -l /dev/net/tun
 +
crw-rw-rwT 1 root root 10, 200 Apr 15 02:23 /dev/net/tun
 +
 
 +
:如果该文件存在,这表明内核已经支持开启了 tun 支持,在 ubuntu-12.04 中,这个功能默认已经开启。
 +
 
 +
:如果该文件不存在,则需要加载 tun 模块,并创建 /dev/net/tun 文件。
 +
 
 +
*修改 /etc/network/interfaces 文件,笔者的文件内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):
 +
 
 +
# This file describes the network interfaces available on your system
 +
# and how to activate them. For more information, see interfaces(5).
 +
 +
# The loopback network interface
 +
auto lo
 +
iface lo inet loopback
 +
 +
# The primary network interface
 +
auto eth0
 +
#NetworkManager#iface eth0 inet dhcp
 +
 +
auto br0
 +
iface br0 inet dhcp
 +
    bridge_ports eth0
 +
 
 +
*添加 /etc/qemu-ifup 和 /etc/qemu-ifdown 脚本。
 +
 
 +
:默认情况下,当 qemu 使用 tap 设备时,会执行 /etc/qemu-ifup 和 /etc/qemu-ifdown 这两个脚本。
 +
 
 +
:我们需要创建这两个脚本,然后为它们加上可执行权限(使用chmod +x)。
 +
 
 +
:创建 /etc/qemu-ifup 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):
 +
 
 +
#!/bin/sh
 +
 +
echo sudo tunctl -u $(id -un) -t $1
 +
sudo tunctl -u $(id -un) -t $1
 +
 +
echo sudo ifconfig $1 0.0.0.0 promisc up
 +
sudo ifconfig $1 0.0.0.0 promisc up
 +
 +
echo sudo brctl addif br0 $1
 +
sudo brctl addif br0 $1
 +
 +
echo brctl show
 +
brctl show
 +
 +
sudo ifconfig br0 192.168.7.20
 +
 
 +
:创建 /etc/qemu-ifdown 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):
 +
 
 +
#!/bin/sh
 +
 +
echo sudo brctl delif br0 $1
 +
sudo brctl delif br0 $1
 +
 +
echo sudo tunctl -d $1
 +
sudo tunctl -d $1
 +
 
 +
echo brctl show
 +
brctl show
 +
 
 +
:输入如下命令为 /etc/qemu-ifup 和 /etc/qemu-ifdown 脚本加上可执行权限:
 +
 
 +
chmod +x /etc/qemu-ifup
 +
chmod +x /etc/qemu-ifdown
 +
 
 +
*最后需要重启计算机,使新的 /etc/network/interfaces 配置文件生效。
 +
 
 +
=== 运行 qemu-mini2440 虚拟机 ===
 +
 
 +
:进入 /home/user/sylixos_workspace/qemu-mini2440 目录:
 +
 
 +
cd /home/user/sylixos_workspace/qemu-mini2440
 +
 
 +
:输入如下命令执行 nandCreator.sh 脚本:
 +
 
 +
chmod +x nandCreator.sh
 +
./nandCreator.sh
 +
 
 +
:执行完成后,会在当前目录生成一个名为 nand.bin 的 Nand Flash 镜像文件。
 +
 
 +
:输入如下命令执行 mini2440_run.sh 脚本:
 +
 
 +
chmod +x mini2440_run.sh
 +
./mini2440_run.sh
 +
 
 +
:mini2440_run.sh 脚本的内容如下:
 +
 
 +
./qemu-system-arm -M mini2440 -show-cursor -kernel ../bspmini2440/Debug/bspmini2440.bin -serial stdio -mtdblock nand.bin -net nic,vlan=0 -net tap,vlan=0,ifname=tap0
 +
 
 +
:如果出现如下信息:
 +
warning: could not configure /dev/net/tun: no virtual network emulation
 +
Could not initialize device 'tap'
 +
 
 +
:那么先手动执行如下命令:
 +
 
 +
/etc/qemu-ifup tap0
 +
 
 +
:注意:不可使用 sudo 执行上一条命令,每次启动 ubuntu 后都需要手动执行一次上一条命令。

2015年5月30日 (六) 15:49的最后版本

目录

[编辑] 搭建 SylixOS Linux 编译环境

笔者的主机操作系统是 ubuntu-12.04,使用的是普通用户 user。

[编辑] 安装开发工具


编译 Qemu 需要用到主机系统的 g++ 编译器,而下载 SylixOS 源代码需要 Git 工具,修改配置文件需要用到 vim 编辑器,

如果你的系统不具备这些工具,请先执行如下命令安装它们到你的系统:

sudo apt-get install build-essential 
sudo apt-get install git
sudo apt-get install vim

[编辑] 下载 SylixOS 源代码


打开终端,创建一个名为 sylixos_workspace 的目录(下文约定该目录是 /home/user/sylixos_workspace 目录,即 ~/sylixos_workspace),
cd ~
mkdir sylixos_workspace
进入该目录,输入如下命令即可下载 SylixOS Base工程、mini2440开发板BSP工程、示例工程等:
cd sylixos_workspace
git clone http://git.sylixos.com/repo/sylixos-base.git
git clone http://git.sylixos.com/repo/bspmini2440.git
git clone http://git.sylixos.com/repo/examples.git
git clone http://git.sylixos.com/repo/tools.git
git clone http://git.sylixos.com/repo/qemu-mini2440.git
sylixos-base 是 SylixOS Base 工程,里面包含了 libsylixos 和 libcextern 子工程,输入如下命令初始化和更新子工程:
cd sylixos-base
git submodule init
git submodule update
cd ..

[编辑] 安装交叉编译器


交叉编译器的下载地地址是 https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q1-update/+download/gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2
下载的交叉编译器压缩包是 gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2。
输入如下命令将其解压到 /usr/lib 目录:
sudo tar jxvf gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2 -C /usr/lib
输入如下命令将解压后的目录重命名为 /usr/lib/gcc-arm-none-eabi 目录(避免编译器升级,版本号日期改变带来不必要的问题):
sudo mv /usr/lib/gcc-arm-none-eabi-4_9-2015q1/ /usr/lib/gcc-arm-none-eabi
由于 SylixOS 修改了编译器的 reent.h 文件,所以使用编译器自带的 reent.h 文件将不能编译成功,需要

复制 ~/sylixos_workspace/tools/arm-none-eabi-patch/4.9/reent.h 文件到 /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys 目录替换原有的文件。

替换前先备份编译器原有的 reent.h 文件:
sudo mv /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys/reent.h /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys/reent.h.bak
再替换编译器原有的 reent.h 文件:
sudo cp ~/sylixos_workspace/tools/arm-none-eabi-patch/4.9/reent.h /usr/lib/gcc-arm-none-eabi/arm-none-eabi/include/sys
为了方便后续使用,修改环境变量 PATH:
vim ~/.bashrc
添加如下命令到 .bashrc 文件的末尾:
export PATH=/usr/lib/gcc-arm-none-eabi/bin:$PATH
最后重新启动终端,输入 arm-none-eabi-gcc 如果得到以下结果说明编译器安装成功:
user@ubuntu:~/sylixos_workspace$ arm-none-eabi-gcc
arm-none-eabi-gcc: fatal error: no input files
compilation terminated.

[编辑] 编译 SylixOS

[编辑] 编译SylixOS Base工程


sylixos-base工程包含了SylixOS操作系统libsylixos和SylixOS进程C库libextern子工程。
打开sylixos-base下的config.mk,修改为如下:
#*********************************************************************************************************
# SylixOS Base Project path
#*********************************************************************************************************
SYLIXOS_BASE_PATH = /home/user/sylixos_workspace/sylixos-base

#*********************************************************************************************************
# Toolchain prefix
#*********************************************************************************************************
TOOLCHAIN_PREFIX = arm-none-eabi-

#*********************************************************************************************************
# Debug options (debug or release)
#*********************************************************************************************************
DEBUG_LEVEL = debug
输入 make 命令以编译:
make 
编译耗费的时间视你的机器的性能而定,一般需要10分钟。
最后libsylixos子工程生成静态库文件libsylixos.a和libdsohandle.a及libvpmpdm.a、动态库文件libvpmpdm.so、内核模块xinput.ko

和xsiipc.ko、符号表文件symbol.c和symbol.h(位于/home/user/sylixos_workspace/sylixos-base/libsylixos/Debug目录)。

libextern子工程生成静态库文件libcextern.a和动态库文件libcextern.so(位于/home/user/sylixos_workspace/sylixos-base/libcextern/Debug目录)。

[编辑] 编译bspmini2440工程


bspmini2440工程是移植SylixOS操作系统到mini2440开发板的BSP工程。
打开bspmini2440下的config.mk,修改为如下:
#*********************************************************************************************************
# SylixOS Base Project path
#*********************************************************************************************************
SYLIXOS_BASE_PATH = /home/user/sylixos_workspace/sylixos-base

#*********************************************************************************************************
# Toolchain prefix
#*********************************************************************************************************
TOOLCHAIN_PREFIX = arm-none-eabi-

#*********************************************************************************************************
# Debug options (debug or release)
#*********************************************************************************************************
DEBUG_LEVEL = debug
输入 make 命令以编译:
make 
最后生成ELF文件bspmini2440.elf和二进制文件bspmini2440.bin(位于/home/user/sylixos_workspace/bspmini2440/Debug目录)。

[编辑] 编译examples工程


examples工程是示例工程,包括应用程序工程、内核模块工程、库工程。
打开examples下的config.mk,修改为如下:
#*********************************************************************************************************
# SylixOS Base Project path
#*********************************************************************************************************
SYLIXOS_BASE_PATH = /home/user/sylixos_workspace/sylixos-base

#*********************************************************************************************************
# Toolchain prefix
#*********************************************************************************************************
TOOLCHAIN_PREFIX = arm-none-eabi-

#*********************************************************************************************************
# Debug options (debug or release)
#*********************************************************************************************************
DEBUG_LEVEL = debug
输入 make 命令以编译:
make 
examples工程包含了三个子工程:应用程序示例工程hello_world、内核模块示例工程hello_module、库示例工程hello_library。
  • 应用程序示例工程hello_world会生成应用程序可执行文件hello_world(位于/home/user/sylixos_workspace/examples/hello_world/Debug目录)。
  • 内核模块示例工程hello_module会生成内核模块文件hello_module(位于/home/user/sylixos_workspace/examples/hello_module/Debug目录)。
  • 库示例工程hello_library会生成静态库文件libhello_library.a和动态库文件libhello_library.so

(位于/home/user/sylixos_workspace/examples/hello_library/Debug目录)。

[编辑] 搭建 SylixOS Linux 仿真环境

[编辑] 编译 qemu-mini2440


  • 下载 qemu-mini2440 源代码
输入如下命令下载 qemu-mini2440 的源代码到 /home/user/sylixos_workspace/qemu-mini2440-src 目录:
cd /home/user/sylixos_workspace 
git clone https://github.com/SylixOS/qemu-mini2440.git qemu-mini2440-src
  • 配置 qemu-mini2440
输入如下命令配置 qemu-mini2440:
cd qemu-mini2440-src
 ./configure --target-list=arm-softmmu
如果出现如下提示:
Error: zlib check failed
Make sure to have the zlib libs and headers installed.
那么输入如下命令安装 zlib 开发包:
sudo apt-get install zlib1g-dev 
同样,如果出现如下提示:
Error: sdl check failed
则输入如下命令安装 sdl1.2 开发包:
sudo apt-get install libsdl1.2-dev 
  • 编译 qemu-mini2440
输入如下命令编译:
make
正确编译之后,会在 arm-softmmu 子目录下生成 qemu-system-arm 文件。
输入如下命令将其复制到 /home/user/sylixos_workspace/qemu-mini2440 目录:
cp ./arm-softmmu/qemu-system-arm /home/user/sylixos_workspace/qemu-mini2440

[编辑] 配置 qemu 的网络功能


qemu 支持多种网络链接方式,其中最常用的就是桥接(bridge)。 这需要依赖内核的 tun/tap 模块的支持。
  • 输入如下命令安装必要的工具包:
sudo apt-get install uml-utilities
sudo apt-get install bridge-utils
  • 输入如下命令查看 /dev/net/tun 文件:
ls -l /dev/net/tun 
crw-rw-rwT 1 root root 10, 200 Apr 15 02:23 /dev/net/tun
如果该文件存在,这表明内核已经支持开启了 tun 支持,在 ubuntu-12.04 中,这个功能默认已经开启。
如果该文件不存在,则需要加载 tun 模块,并创建 /dev/net/tun 文件。
  • 修改 /etc/network/interfaces 文件,笔者的文件内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#NetworkManager#iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
   bridge_ports eth0
  • 添加 /etc/qemu-ifup 和 /etc/qemu-ifdown 脚本。
默认情况下,当 qemu 使用 tap 设备时,会执行 /etc/qemu-ifup 和 /etc/qemu-ifdown 这两个脚本。
我们需要创建这两个脚本,然后为它们加上可执行权限(使用chmod +x)。
创建 /etc/qemu-ifup 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):
#!/bin/sh

echo sudo tunctl -u $(id -un) -t $1
sudo tunctl -u $(id -un) -t $1

echo sudo ifconfig $1 0.0.0.0 promisc up
sudo ifconfig $1 0.0.0.0 promisc up

echo sudo brctl addif br0 $1
sudo brctl addif br0 $1

echo brctl show
brctl show

sudo ifconfig br0 192.168.7.20
创建 /etc/qemu-ifdown 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):
#!/bin/sh

echo sudo brctl delif br0 $1
sudo brctl delif br0 $1

echo sudo tunctl -d $1
sudo tunctl -d $1
 
echo brctl show
brctl show
输入如下命令为 /etc/qemu-ifup 和 /etc/qemu-ifdown 脚本加上可执行权限:
chmod +x /etc/qemu-ifup
chmod +x /etc/qemu-ifdown
  • 最后需要重启计算机,使新的 /etc/network/interfaces 配置文件生效。

[编辑] 运行 qemu-mini2440 虚拟机

进入 /home/user/sylixos_workspace/qemu-mini2440 目录:
cd /home/user/sylixos_workspace/qemu-mini2440
输入如下命令执行 nandCreator.sh 脚本:
chmod +x nandCreator.sh
./nandCreator.sh
执行完成后,会在当前目录生成一个名为 nand.bin 的 Nand Flash 镜像文件。
输入如下命令执行 mini2440_run.sh 脚本:
chmod +x mini2440_run.sh
./mini2440_run.sh
mini2440_run.sh 脚本的内容如下:
./qemu-system-arm -M mini2440 -show-cursor -kernel ../bspmini2440/Debug/bspmini2440.bin -serial stdio -mtdblock nand.bin -net nic,vlan=0 -net tap,vlan=0,ifname=tap0
如果出现如下信息:
warning: could not configure /dev/net/tun: no virtual network emulation
Could not initialize device 'tap'
那么先手动执行如下命令:
/etc/qemu-ifup tap0
注意:不可使用 sudo 执行上一条命令,每次启动 ubuntu 后都需要手动执行一次上一条命令。
个人工具
名字空间

变种
操作
导航
工具