Linux环境开发指南
来自SylixOS-wiki
(版本间的差异)
Jiaojinxing (讨论 | 贡献) (→配置 qemu 的网络功能) |
Jiaojinxing (讨论 | 贡献) (→编译 qemu-mini2440) |
||
(未显示1个用户的39个中间版本) | |||
第4行: | 第4行: | ||
===安装开发工具=== | ===安装开发工具=== | ||
+ | |||
+ | ---- | ||
+ | |||
:编译 Qemu 需要用到主机系统的 g++ 编译器,而下载 SylixOS 源代码需要 Git 工具,修改配置文件需要用到 vim 编辑器, | :编译 Qemu 需要用到主机系统的 g++ 编译器,而下载 SylixOS 源代码需要 Git 工具,修改配置文件需要用到 vim 编辑器, | ||
第13行: | 第16行: | ||
===下载 SylixOS 源代码=== | ===下载 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/sylixos-base.git | ||
git clone http://git.sylixos.com/repo/bspmini2440.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/examples.git | ||
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 | ||
:sylixos-base 是 SylixOS Base 工程,里面包含了 libsylixos 和 libcextern 子工程,输入如下命令初始化和更新子工程: | :sylixos-base 是 SylixOS Base 工程,里面包含了 libsylixos 和 libcextern 子工程,输入如下命令初始化和更新子工程: | ||
第26行: | 第37行: | ||
git submodule init | git submodule init | ||
git submodule update | 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 | :交叉编译器的下载地地址是 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 | ||
第167行: | 第182行: | ||
==搭建 SylixOS Linux 仿真环境== | ==搭建 SylixOS Linux 仿真环境== | ||
− | === | + | ===编译 qemu-mini2440=== |
− | + | ---- | |
− | git clone https://github.com/ | + | *下载 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- | + | :输入如下命令配置 qemu-mini2440: |
− | cd qemu-mini2440 | + | cd qemu-mini2440-src |
./configure --target-list=arm-softmmu | ./configure --target-list=arm-softmmu | ||
第196行: | 第216行: | ||
sudo apt-get install libsdl1.2-dev | sudo apt-get install libsdl1.2-dev | ||
− | + | *编译 qemu-mini2440 | |
:输入如下命令编译: | :输入如下命令编译: | ||
make | make | ||
− | :正确编译之后,会在 arm-softmmu | + | :正确编译之后,会在 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 的网络功能=== | ||
+ | |||
+ | ---- | ||
:qemu 支持多种网络链接方式,其中最常用的就是桥接(bridge)。 这需要依赖内核的 tun/tap 模块的支持。 | :qemu 支持多种网络链接方式,其中最常用的就是桥接(bridge)。 这需要依赖内核的 tun/tap 模块的支持。 | ||
*输入如下命令安装必要的工具包: | *输入如下命令安装必要的工具包: | ||
+ | |||
sudo apt-get install uml-utilities | sudo apt-get install uml-utilities | ||
sudo apt-get install bridge-utils | 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 | 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 | + | *修改 /etc/network/interfaces 文件,笔者的文件内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录): |
# This file describes the network interfaces available on your system | # This file describes the network interfaces available on your system | ||
第237行: | 第264行: | ||
bridge_ports eth0 | bridge_ports eth0 | ||
− | *添加 /etc/qemu-ifup | + | *添加 /etc/qemu-ifup 和 /etc/qemu-ifdown 脚本。 |
:默认情况下,当 qemu 使用 tap 设备时,会执行 /etc/qemu-ifup 和 /etc/qemu-ifdown 这两个脚本。 | :默认情况下,当 qemu 使用 tap 设备时,会执行 /etc/qemu-ifup 和 /etc/qemu-ifdown 这两个脚本。 | ||
− | :我们需要创建这两个脚本,然后为它们加上可执行权限(使用chmod +x) | + | :我们需要创建这两个脚本,然后为它们加上可执行权限(使用chmod +x)。 |
+ | |||
+ | :创建 /etc/qemu-ifup 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录): | ||
− | |||
#!/bin/sh | #!/bin/sh | ||
第257行: | 第285行: | ||
echo brctl show | echo brctl show | ||
brctl show | brctl show | ||
+ | |||
+ | sudo ifconfig br0 192.168.7.20 | ||
− | :创建 /etc/qemu-ifdown | + | :创建 /etc/qemu-ifdown 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录): |
#!/bin/sh | #!/bin/sh | ||
− | + | ||
echo sudo brctl delif br0 $1 | echo sudo brctl delif br0 $1 | ||
sudo brctl delif br0 $1 | sudo brctl delif br0 $1 | ||
− | + | ||
echo sudo tunctl -d $1 | echo sudo tunctl -d $1 | ||
sudo tunctl -d $1 | sudo tunctl -d $1 | ||
− | + | ||
echo brctl show | echo brctl show | ||
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 ..
[编辑] 安装交叉编译器
- 下载的交叉编译器压缩包是 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 后都需要手动执行一次上一条命令。