您的位置:首页 > 大数据 > 物联网

Zephyr微内核初探

2016-02-22 21:19 417 查看
Linux基金会宣布了微内核项目Zephyr,发布了1.0内核版本。Zephyr微内核将被用于开发针对物联网设备的实时操作系统(RTOS)。该项目得到了英特尔、 NXP半导体、Synopsys和UbiquiOS等公司的支持。

更多信息(https://www.zephyrproject.org/content/zephyr-kernel-v100-release-notes)。

Linux主机开发环境建立

这里使用Ubuntu 14.04 LTS 64 bit发行版,虚拟机软件使用VirtualBox,对于Linux的安装不是本文重点,可参照其它网上的文章。

安装必要的工具包

sudo apt-get install git make gcc gcc-multilib g++ libc6-dev-i386 g++-multilib


Zephyr SDK安装

新建目录

mkdir /home/panguolin/zephyr


下载SDK0.7.2安装文件

wget https://nexus.zephyrproject.org/content/repositories/releases/ org/zephyrproject/zephyr-sdk/0.7.2-i686/zephyr-sdk-0.7.2-i686-setup.run


安装SDK

chmod +x zephyr-sdk-0.7.2-i686-setup.run
sudo ./zephyr-sdk-0.7.2-i686-setup.run


提示默认安装在目录/opt/zephyr-sdk/下

Verifying archive integrity... All good.

Uncompressing SDK for Zephyr  100%

Enter target directory for SDK (default: /opt/zephyr-sdk/):


如果打算安装到其它目录,看到上述提示输入完整路径回车即可。

安装信息大致如下:

Installing SDK to /opt/zephyr-sdk/

Creating directory /opt/zephyr-sdk/

Success

[*] Installing x86 tools...

[*] Installing arm tools...

[*] Installing arc tools...

...

[*] Installing additional host tools...

Success installing SDK. SDK is ready to be used.


SDK安装成功。

SDK 0.7.2 组成

支持的处理器架构

IA-32

ARM

ARC

编译调试工具

GCC 5.2.0 cross-compiler for x86 + binutils + gdb, libgcc, newlib

GCC 5.2.0 cross-compiler for ARM + binutils + gdb, libgcc, newlib (multilib)

GCC 5.2.0 cross-compiler for MIPS + binutils + gdb, libgcc, newlib (multilib)

GCC 5.2.1 cross-compiler for IAMCU + binutils + gdb, libgcc, newlib

GCC 4.8.3 cross-compiler for ARC + binutils + gdb, libgcc, newlib (multilib)

主机上一些工具

GCC 5.2.0 host compiler for i686, binutils, glibc 2.22

Python2.7

QEMU emulators version 2.1.3:

qemu-system-arm (zephyr specific patch)

qemu-system-mips

qemu-system-i386

make (GNU Make 4.1)

OpenOCD (Open On-Chip Debugger with additional Quark support)

设置环境变量

新建文件
~/.zephyrrc
增加如下内容保存

export ZEPHYR_GCC_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk


修改文件
~/.bashrc
,在末尾添加一行
source ~/.zephyrrc
。这样在每次启动linux shell的时候可自动设置环境变量了。

Zephyr应用程序编译和运行

Zephyr已经可以在很多板子上运行了,支持的主板包括:

基于x86 架构

MinnowBoard MAX

QEMU 2.1

Quark D2000 Boards

Quark SE Boards

Arduino 101 Board

Galileo and Galileo Gen 2

基于ARM (v7-M and v7E-M)架构

QEMU 2.1 + patch

Arduino Due Board

NXP Freedom Development Platform

遗憾的是码农我目前没有一块真实的板卡,只能尝试使用QEMU虚拟环境仿真一下。尽管如此,对于Zephyr体验之旅已经足够了。

下载Zephyr源码

cd /home/panguolin/zephyr
git clone https://gerrit.zephyrproject.org/r/zephyr zephyr-project


源码目录

tree -dL 1
.
├── arch           架构相关代码
├── boards         板级代码
├── doc            一些文档
├── drivers        设备驱动
├── include        开放接口的头文件
├── kernel         Microkernel代码, 以及架构无关的nanokernel代码
├── lib            一些库,包括以精简的标准C库
├── misc           杂七杂八
├── net            网络相关。蓝牙栈和网络协议栈
├── samples        例子
└── scripts        编译、测试有关脚本文件


编译一个hello world应用

我选择了一个ARM架构的qemu_cortex_m3板,看名称就知道是可以使用QEMU仿真运行的。

进入源码目录

cd /home/panguolin/zephyr/zephyr-project


设置编译环境变量

source zephyr-env.sh


进入hello world例子编译目录,编译

cd samples/microkernel/apps/hello_world
make BOARD=qemu_cortex_m3 ARCH=arm


编译过程打印大致如下

Using /home/panguolin/zephyr/zephyr-project/boards/qemu_cortex_m3/qemu_cortex_m3_defconfig as base
Merging /home/panguolin/zephyr/zephyr-project/kernel/configs/micro.config
Merging prj.conf
configuration written to .config
...省略一下打印...
CC      samples/microkernel/apps/hello_world/src/main.o
LD      samples/microkernel/apps/hello_world/src/built-in.o
LINK    zephyr.lnk
BIN     zephyr.bin
make[2]: Leaving directory /home/panguolin/zephyr/zephyr-
project/samples/microkernel/apps/hello_world/outdir
make[1]: Leaving directory /home/panguolin/zephyr/zephyr-project


运行hello world程序

make qemu


略去一些输出,最终运行效果

To exit from QEMU enter: 'CTRL+a, x'
[QEMU] CPU: cortex-m3
Hello World!


可以看到,打印出了Hello World!

hello world程序源码

cat src/main.c


部分代码如下

...
void main(void)
{
PRINT("Hello World!\n");
}


好了,zephyr之旅结束了。后续有时间更新一些关于zephyr源码分析的文章。

参考文献

https://www.zephyrproject.org
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  物联网