Linux环境开发指南

来自SylixOS-wiki
(版本间的差异)
跳转至: 导航, 搜索
(搭建 SylixOS Linux 编译环境)
第4行: 第4行:
  
 
===安装开发工具===
 
===安装开发工具===
:编译 Qemu 需要用到主机系统的 g++ 编译器和SDL开发包,而下载 SylixOS 源代码需要 Git 工具,修改配置文件需要用到 vim 编辑器,
+
:编译 Qemu 需要用到主机系统的 g++ 编译器,而下载 SylixOS 源代码需要 Git 工具,修改配置文件需要用到 vim 编辑器,
  
 
如果你的系统不具备这些工具,请先执行如下命令安装它们到你的系统:
 
如果你的系统不具备这些工具,请先执行如下命令安装它们到你的系统:

2015年5月12日 (二) 18:01的版本

目录

搭建 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),

打开终端,进入该目录,输入如下命令即可下载 SylixOS Base工程、mini2440开发板BSP工程、示例工程等:

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
sylixos-base是SylixOS Base工程,里面包含了libsylixos和libcextern子工程,输入如下命令初始化和更新子工程:
cd sylixos-base
git submodule init
git submodule update

安装交叉编译器

交叉编译器的下载地地址是 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目录)。

git clone https://github.com/qt4sylixos/qemu-mini2440.git

cd qemu-mini2440
 ./configure --target-list=arm-softmmu

如果出现如下提示: Error: zlib check failed Make sure to have the zlib libs and headers installed. 那么执行 $ sudo apt-get install zlib1g-dev

同样,如果出现 Error: sdl check failed 则执行如下安装 $ sudo apt-get install libsdl1.2-dev

$ make 正确编译之后,会在arm-softmmu下生成qemu-system-arm文件

4. 配置qemu的网络功能

在上面的介绍中,我们使用mini2440-qemu启动了uboot,但是此时的qemu并没有网络功能,那么也就不能使用u-boot通过NFS或者TFTP来加载内核或者文件系统,为了方便开发,接下来,我们为qemu配置网络功能。

qemu支持多种网络链接方式,其中最常用的就是桥接(bridge)。 这需要依赖内核的tun/tap模块的支持。

安装必要的工具包 $ sudo apt-get install uml-utilities $ sudo apt-get install bridge-utils

首先执行 $ ls -l /dev/net/tun crw-rw-rwT 1 root root 10, 200 Jul 26 08:28 /dev/net/tun

如果上面的文件存在,这表明内核已经支持开启了tun支持,ubuntu12.04中,这个功能默认已经开启。如果这个文件不存在,则需要加载tun模块,并创建/dev/net/tun文件。

修改下面三个文件 /etc/network/interfaces 添加 /etc/qemu-ifup /etc/qemu-ifdown

修改 /etc/network/interfaces,笔者的文件如下: $ cat /etc/network/interfaces

  1. This file describes the network interfaces available on your system
  2. and how to activate them. For more information, see interfaces(5).
  1. The loopback network interface

auto lo iface lo inet loopback

  1. The primary network interface

allow-hotplug eth0

  1. iface eth0 inet dhcp

iface eth0 inet manual

auto br0 iface br0 inet dhcp

  bridge_ports eth0

默认情况下,当qemu使用tap设备时,会执行/etc/qemu-ifup和/etc/qemu-ifdown这两个脚本。 我们需要创建这两个脚本,然后为它们加上可执行权限(使用chmod +x),然后将它们放在/etc/目录下。

创建/etc/qemu-ifup 脚本,内容如下所示 $ cat /etc/qemu-ifup

  1. !/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

创建/etc/qemu-ifdown脚本,如下所示 $ cat /etc/qemu-ifdown

  1. !/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


5. 运行带有网络功能的mini2440-qemu

重启计算机,使/etc/network/interfaces的配置生效。 $ qemu -M mini2440 -mtdblock u-boot.nand -serial stdio -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执行上述命令

个人工具
名字空间

变种
操作
导航
工具