查看Linux环境开发指南的源代码
←
Linux环境开发指南
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
你刚才请求的操作只对属于该用户组的用户开放:
用户
您可以查看并复制此页面的源代码:
==搭建 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目录)。 ==搭建 SylixOS Linux 仿真环境== ---- ===编译 qemu-mini2440 工程=== ---- *下载 Qemu for mini2440 源代码 :输入如下命令下载 Qemu for mini2440 源代码: git clone https://github.com/qt4sylixos/qemu-mini2440.git *配置 qemu-mini2440 工程 :输入如下命令配置 qemu-mini2440 工程: cd qemu-mini2440 ./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 文件。 ===配置 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 文件,笔者的文件内容如下所示: # 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 目录下。 :创建 /etc/qemu-ifup 脚本,内容如下所示: #!/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 脚本,内容如下所示: #!/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/network/interfaces 的配置生效。 5. 运行带有网络功能的mini2440-qemu $ 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执行上述命令
返回
Linux环境开发指南
。
个人工具
登录
名字空间
页面
讨论
变种
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
最近更改
随机页面
工具
链入页面
相关更改
特殊页面