[Zephyr] 1、在linux上安装Zephyr-OS并跑DEMO
星期五, 14. 九月 2018 02:18上午 - BEAUTIFULZZZZ

0) 前言
Zephyr™项目是一个采用Apache 2.0协议许可,Linux基金会托管的协作项目。为所有资源受限设备,构建了针对低功耗、小型内存微处理器设备而进行优化的物联网嵌入式小型、可扩展的实时操作系统(RTOS),支持多种硬件架构及多种开发板,可以在小至8 kB内存的系统上运行。
采用深入的安全开发生命周期:安全验证,模糊和渗透测试,频繁的代码审查,静态代码分析,威胁建模和审查,以防止代码中的后门 。
支持Bluetooth, Bluetooth Low Energy, Wi-Fi, 802.15.4,6Lowpan, CoAP, IPv4, IPv6, 和 NFC 等标准,通过社区驱动的发展来改进和增强功能 。

这里作为入门篇,将介绍在linux上安装Zephyr,并基于模拟器和实体开发板进行DEMO编译运行。
1)下载、克隆到本地
将zephyr克隆到本地home目录下:
cd ~
git clone git@github.com:zephyrproject-rtos/zephyr.git
2) Zephyr Build系统简介
Zephyr工程使用CMake作为管理工程开发的工具。CMake能够生成不同格式的build文件,当前Zephyr支持下面两种构建管理工具:
- make: UNIX-Like平台
- ninja: 全平台支持
Zephyr工程的大多数DEMO采用ninja作为build工具,但是make也是能做所有类似工作的。
3) 设置开发环境
Zephyr可以在Windows\MAC\Linux上开发,这里仅介绍在linux上的设置:
update下:
sudo apt-get update
sudo apt-get upgrade
安装依赖:
sudo apt-get install --no-install-recommends git cmake ninja-build gperf \
ccache doxygen dfu-util device-tree-compiler \
python3-ply python3-pip python3-setuptools python3-wheel xz-utils file \
make gcc-multilib autoconf automake libtool librsvg2-bin \
texlive-latex-base texlive-latex-extra latexmk texlive-fonts-recommended
安装开发Zephyr所需要的附加包:
cd ~/zephyr # or to your directory where zephyr is cloned
pip3 install --user -r scripts/requirements.txt
安装3.8.2版本及以上的CMake:
mkdir $HOME/cmake && cd $HOME/cmake
wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.sh
yes | sh cmake-3.8.2-Linux-x86_64.sh | cat
echo "export PATH=$PWD/cmake-3.8.2-Linux-x86_64/bin:\$PATH" >> $HOME/.zephyrrc
source <zephyr git clone location>/zephyr-env.sh
cmake --version
安装Zephyr Software Development Kit(SDK):
Zephyr的SDK包含所有必须的工具和交叉编译器,用于支持build内核在不同的系统架构上。除此之外,它包括主机工具,如自定义QEMU二进制文件和主机编译器,如果需要的话,可以构建宿主工具。
SDK支持以下架构:
- X86
- X86 IAMCU ABI
- ARM
- ARC
- Nios II
- Xtensa
- RISC-V
按照以下步骤在Linux主机系统上安装SDK:
cd ~/Downloads/
wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.3/zephyr-sdk-0.9.3-setup.run
sh zephyr-sdk-0.9.3-setup.run
注:按照屏幕上的安装说明,工具链默认安装在
/opt/zephyr-sdk/,但是建议在主目录下安装,这里我安装在~/zephyr-sdk设置全局变量
vim ~/.zephyrrc:export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/home/btfz/zephyr-sdk
4) 在QEMU中运行一个示例应用程序
为了直接在开发环境中快速测试,QEMU是一个很好的选择,通过配置其可以支持X86 and ARM Cortex-M3架构。
用X86模拟板级配置(qemu_x86)运行一个程序,如下:
cd $ZEPHYR_BASE/samples/hello_world
mkdir build && cd build
# Use cmake to configure a Ninja-based build system:
cmake -GNinja -DBOARD=qemu_x86 ..
# Now run ninja on the generated build system:
ninja
ninja run
退出qemu模拟器:ctrl-a,然后按x
可见QEMU并不是支持所有板子,有些时候需要拿真实板子来开发!
5) 在nRF51822-QFAA-PCA10028开发板上运行DEMOM(#2)
这里首先测试的是Hello World:
第0步:设置编译环境:
cd zephyr
source zephyr-env.sh
第一步:用minicom连接串口,一会用来打印数据:
minicom -D <tty_device> -b 115200
第二步:编译和烧写:
cd $ZEPHYR_BASE/samples/hello_world
mkdir build && cd build
# Use cmake to configure a Ninja-based build system:
cmake -GNinja -DBOARD=nrf51_pca10028 ..
# Now run ninja on the generated build system:
ninja
ninja flash
注: 有的时候会报:ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.的错误(cmake时),和fatal error: 2 No such file or directory: 'nrfjprog'的错误(flash时),解决办法是在~/.zephyrc中添加环境变量,并重新source下环境变量:
➜ hello_world git:(master) cat ~/.zephyrrc
export PATH=/home/btfz/cmake/cmake-3.8.2-Linux-x86_64/bin:$PATH
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/home/btfz/zephyr-sdk
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
export PATH=$PATH:/home/btfz/Downloads/AAAA/nRF5x-Command-Line-Tools_9_7_3/nrfjprog
用同样的方法也可以测试nrf51_pca10028板子的下面两个DEMO:
- samples/basic/blinky
- samples/basic/button
6) 分析一个简单应用层代码,带你更深入一步
和5一样的nRF51开发板,不仅支持闪灯和按键工程,还支持很多骚操作。我们就拿最简单的beacon分析下吧(毕竟作为玩蓝牙的,所有的文章都得点一下题吧,哈哈):
- samples/bluetooth/beacon
/* main.c - Application main entry point */
/*
* Copyright (c) 2015-2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/types.h>
#include <stddef.h>
#include <misc/printk.h>
#include <misc/util.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#define DEVICE_NAME CONFIG_BT_DEVICE_NAME
#define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1)
/*
* Set Advertisement data. Based on the Eddystone specification:
* https://github.com/google/eddystone/blob/master/protocol-specification.md
* https://github.com/google/eddystone/tree/master/eddystone-url
*/
static const struct bt_data ad[] = {
BT_DATA_BYTES(BT_DATA_FLAGS, BT_LE_AD_NO_BREDR),
BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0xaa, 0xfe),
BT_DATA_BYTES(BT_DATA_SVC_DATA16,
0xaa, 0xfe, /* Eddystone UUID */
0x10, /* Eddystone-URL frame type */
0x00, /* Calibrated Tx power at 0m */
0x00, /* URL Scheme Prefix http://www. */
'z', 'e', 'p', 'h', 'y', 'r',
'p', 'r', 'o', 'j', 'e', 'c', 't',
0x08) /* .org */
};
/* Set Scan Response data */
static const struct bt_data sd[] = {
BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
};
static void bt_ready(int err)
{
if (err) {
printk("Bluetooth init failed (err %d)\n", err);
return;
}
printk("Bluetooth initialized\n");
/* Start advertising */
err = bt_le_adv_start(BT_LE_ADV_NCONN, ad, ARRAY_SIZE(ad),
sd, ARRAY_SIZE(sd));
if (err) {
printk("Advertising failed to start (err %d)\n", err);
return;
}
printk("Beacon started\n");
}
void main(void)
{
int err;
printk("Starting Beacon Demo\n");
/* Initialize the Bluetooth Subsystem */
err = bt_enable(bt_ready);
if (err) {
printk("Bluetooth init failed (err %d)\n", err);
}
}
最核心的就是bt_le_adv_start(BT_LE_ADV_NCONN, ad, ARRAY_SIZE(ad),sd, ARRAY_SIZE(sd))函数,启动一个ble广播,其广播数据为static const struct bt_data ad[] 定义的数据。在nRF connect APP中可以搜索到该beacon信息:
![]()
在搜索列表里会发现有个叫Eddystone的蓝牙设备,其广播的数据为zephyr的主页网址~
时间不早了,其他更好玩的东西会在今后的文章中介绍~

LINKS
[1].getting started.
[2].nrf51_pca10028 doc
[3].ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD

@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975
[Zephyr] 1、在linux上安装Zephyr-OS并跑DEMO的更多相关文章
- 在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结
在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结 一.资料来源: 网上一共找到两个方法,一个是视频上的教程,一个是网页资料. 二.视频资料方法内容:1.install qe ...
- 在Linux上安装Hadoop
先决条件: Hadoop是用JAVA写的,所以首先要安装Java.在Ubuntu上安装JDK见:http://blog.csdn.net/microfhu/article/details/766739 ...
- linux上安装Eclipse
之所以要在linux上安装Eclipse,是因为一开始我是通过Eclipse+MingW+Samba+GDBserver方式在Windows上远程操作,准备编译调试nginx源代码的,可是在编译调试过 ...
- 在Windows和Linux上安装paramiko模块以及easy_install的安装方法
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- 在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导
Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWa ...
- WINDOWS和Linux上安装php7 alpha 并安装 yaf
WINDOWS和Linux上安装php7 alpha 并安装 yaf PHP技术 widuu 2个月前 (06-15) 126浏览 0评论 windows 1.windows上安装 php7 ...
- 在Windows和Linux上安装paramiko模块
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- Linux上安装使用boost入门指导
Data Mining Linux上安装使用boost入门指导 获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到bo ...
- 如何在Linux上安装Storm
Storm是开源的分布式实时计算系统,能够让数据流处理变得简单.可靠,也因此在大数据领域有广泛的实际 应用.下面介绍一下如何在Linux系统上安装Storm.根据Storm官网介绍,安装Storm软件 ...
随机推荐
- form 组件
https://www.cnblogs.com/wupeiqi/articles/6144178.html class F2Form(forms.Form): title1=fields.CharFi ...
- UGUI中粒子特效与UI的遮挡问题
问题背景: 在做主线任务时发现完成任务后的特效显示穿透上面的UI层,不美观,策划不乐意了,抓紧解决下 解决思路: 首先讲下影响渲染顺序的因素: 能够影响渲染顺序的因素有:1.Camera Depth ...
- 具体分析UGUI中RectTransform
一:RectTransform 组件 1.Transform 组件是所有的游戏物体必备的一个组件,且不可删除,不可隐藏.就算是一个空物体,也是具备 Transform 组件的. Unity3D4.6 ...
- python requests模拟登陆正方教务管理系统,并爬取成绩
最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=req ...
- docker镜像常用操作
- 【JAVA】反射总结
反射是什么? 反射就是指程序在运行的时候可以知道一个类的自身信息. 自身信息有哪些:类方法.属性.成员变量.构造方法.包等 动态编译和静态编译 静态编译:在编译的时候进确定类型,如果绑定对象成功,n ...
- 【Linux】在Win10上搭建WSL(适用于Linux的Windows子系统)
1.打开WSL ,控制面板 -- 程序 -- 程序和功能 -- 打开或关闭Windows功能 - 选中[适用于Linux的Windows子系统] 2.开启后重启电脑 3.在Win10自带的Micro ...
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第六集之补充:文本编辑器vi/vim】
一:vi/vim的基本使用流程,掌握这三个步骤就算是入门vi或者vim.接下来的学习都是对vim命令和使用技巧的掌握,这要求各位自己去记忆.因为很少使用到某些命令,自然我们经常忘记这些命令,所以一旦忘 ...
- 页面跳转之session
题意:设主页为index.jsp 通过session将index.jsp中的信息传送给结果页面result.jsp.(其实,session的生命周期是整个服务器开启过程,具体不做详细介绍).这个 其实 ...
- Ubuntu全盘备份与恢复,亲自总结,实测可靠
https://blog.csdn.net/sinat_27554409/article/details/78227496 Ubuntu全盘备份与恢复,亲自总结,实测可靠 初学者在使用Ubuntu这类 ...