社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 4475|回复: 7

[原创] [Zephyr] 入门篇:搭建 Zephyr 开发环境及 hello-world

[复制链接]

49

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-18 14:07:15 | 显示全部楼层 |阅读模式
本帖最后由 tidyjiang8 于 2017-1-19 11:01 编辑

Zephyr 入门篇:搭建开发环境及 hello-world


Zephyr OS 的开发环境支持三大平台:

  • Windows
  • Linux
  • Mac

建议使用 Linux 平台搭建环境。我们后面的所有文章都以 Ubuntu 作为开发环境。

安装依赖的包


先将系统更新到最新状态:
  1. $ sudo apt-get update
复制代码

再安装依赖的包:
  1. $ sudo apt-get install git make gcc gcc-multilib g++ libc6-dev-i386 \
  2. g++-multilib python3-ply
复制代码

提示:如果你的系统是 32 位的,不需要安装 libc6-dev-i386 这个包。

安装 SDK

访问 Zephyr SDK archive 下载最新版 SDK 。

提示:国外的服务器,有时候慢到吐血,我已经将最新版上传到百度云了。请到这个帖子下载最新年的 SDK: zephyr sdk 百度云下载路径

下载完成后,运行该文件:
  1. $ chmod +x zephyr-sdk-0.8.2-i686-setup.run
  2. $ sudo ./zephyr-sdk-0.8.2-i686-setup.run
复制代码

默认会将 SDK 安装到/opt/zephyr-sdk/目录下。个人推荐使用默认设置。

执行下列命令将环境变量导出到 ~/.zephyr 文件:
  1. $ cat <<EOF > ~/.zephyr
  2. export ZEPHYR_GCC_VARIANT=zephyr
  3. export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk
  4. EOF
复制代码

获取 Zephyr 源码

Zephyr 的源码托管在 Linux 基金会的 Girret 服务器上,同时在 GitHub 上也有一个仓库镜像。在国内访问它的 Girret 服务器比较慢,建议直接从 GitHub 上下载:
  1. $ git clone [url=https://github.com/zephyrproject-rtos/zephyr.git]https://github.com/zephyrproject-rtos/zephyr.git[/url]
复制代码

默认会克隆 master 分支的代码。

编译 hello-world

进入 Zephyr 项目目录,先配置环境变量:
  1. $ cd zephyr
  2. $ source zephyr-env.sh
复制代码

进入 hello-world 目录,编译:
  1. $ cd samples/hello_world/
  2. $ make
复制代码

上面的 make 命令会使用应用程序的 Makefile 文件中定义的默认设置编译 hello_wolrd 例程。你可以定义环境变量 BOARD 为所支持的其它板子编译应用,例如:make BOARD=arduino_101。关于 make 命令的具体使用方法可以执行 make help。

编译后会生成镜像文件 zephyr.bin,它位于当前目录下的 samples/qemu_x86/ 下面。

使用 QEMU 仿真

Zephyr 支持在 x86 和 ARM Cortex-M3 两种架构下使用 qemu 进行仿真。

仿真 x86:
  1. $ make BOARD=qemu_x86 qemu
复制代码

仿真 ARM Cortex-M3:
  1. $ make BOARD=qemu_cortex_m3 ARCH=arm qemu
复制代码

仿真结果:
hello.png
提示:退出仿真界面的方法:先按 CTRL+a,再按 x。

烧写到硬件平台

Zephyr 所支持的开发板请参考这篇帖子:Zephyr 入门篇:开发板选择

编译前,请先选择你所使用的开发板的配置文件。例如,如果我想将 Zephyr 运行在 k64f 开发板上,则按照下面的命令进行编译:
  1. # 假定当前所在目录是 samples/hello_world
  2. $ make BOARD=frdm_k64f
复制代码

其中,参数 frdm_k64f 指的是 boards/arm/frdm_k64f 这个文件夹的名字。

如果你想将 Zephyr 运行在 arduino 101 上面,则对应的文件夹是 boards/x86/arduino_101,因此你的编译命令则是:
  1. $ make BOARD=frdm_k64f
复制代码

编译完成后,就可以将镜像文件 outdir/xxxx/zephyr.bin 烧写到你的板子里运行了!




评分

1

查看全部评分



回复

使用道具 举报

1206

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2017-1-18 14:44:52 | 显示全部楼层
不错呦!感谢分享!


回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-1-18 20:38:03 | 显示全部楼层
michael_llh 发表于 2017-1-18 14:44
不错呦!感谢分享!



回复

使用道具 举报

1736

TA的帖子

24

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2017-1-19 08:32:34 | 显示全部楼层
又涨知识了。谢谢楼主的分享。
不过楼主,目前Zephyr 有没有什么开放的目标平台?

点评

支持这些板子:  详情 回复 发表于 2017-1-19 09:29
这孩子,成熟的象征,理智的典范。


回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-1-19 09:29:54 | 显示全部楼层
本帖最后由 tidyjiang8 于 2017-1-19 09:36 编辑
lonerzf 发表于 2017-1-19 08:32
又涨知识了。谢谢楼主的分享。
不过楼主,目前Zephyr 有没有什么开放的目标平台?

相信你手里肯定有几块它支持的板子:

  1. work@ubuntu:~/me/zephyr/boards$ tree -L 2
  2. .
  3. ├── arc
  4. │   ├── arduino_101_sss
  5. │   ├── em_starterkit
  6. │   └── quark_se_c1000_ss_devboard
  7. ├── arm
  8. │   ├── 96b_carbon
  9. │   ├── 96b_nitrogen
  10. │   ├── arduino_101_ble
  11. │   ├── arduino_due
  12. │   ├── bbc_microbit
  13. │   ├── cc3200_launchxl
  14. │   ├── frdm_k64f
  15. │   ├── hexiwear_k64
  16. │   ├── nrf51_blenano
  17. │   ├── nrf51_pca10028
  18. │   ├── nrf52840_pca10056
  19. │   ├── nrf52_pca10040
  20. │   ├── nucleo_f103rb
  21. │   ├── nucleo_f401re
  22. │   ├── nucleo_f411re
  23. │   ├── nucleo_l476rg
  24. │   ├── olimexino_stm32
  25. │   ├── qemu_cortex_m3
  26. │   ├── quark_se_c1000_ble
  27. │   ├── stm32f407ve
  28. │   ├── stm32f407zg
  29. │   ├── stm32_mini_a15
  30. │   └── v2m_beetle
  31. ├── boards.rst
  32. ├── Kconfig
  33. ├── Makefile
  34. ├── nios2
  35. │   ├── altera_max10
  36. │   └── qemu_nios2
  37. └── x86
  38.     ├── arduino_101
  39.     ├── galileo
  40.     ├── minnowboard
  41.     ├── qemu_x86
  42.     ├── quark_d2000_crb
  43.     └── quark_se_c1000_devboard

复制代码


每个板子对应的 SoC 如下:

  1. work@ubuntu:~/me/zephyr/boards$ grep "depends" */*/*.board -R
  2. arc/arduino_101_sss/Kconfig.board:    depends on SOC_QUARK_SE_C1000_SS
  3. arc/em_starterkit/Kconfig.board:    depends on (SOC_EM7D || SOC_EM9D || SOC_EM11D)
  4. arc/quark_se_c1000_ss_devboard/Kconfig.board:    depends on SOC_QUARK_SE_C1000_SS
  5. arm/96b_carbon/Kconfig.board:    depends on SOC_STM32F401XE
  6. arm/96b_nitrogen/Kconfig.board:    depends on SOC_NRF52832
  7. arm/arduino_101_ble/Kconfig.board:    depends on SOC_NRF51822_QFAA
  8. arm/arduino_due/Kconfig.board:    depends on SOC_ATMEL_SAM3X8E
  9. arm/bbc_microbit/Kconfig.board:    depends on SOC_NRF51822_QFAA
  10. arm/cc3200_launchxl/Kconfig.board:    depends on SOC_CC3200
  11. arm/frdm_k64f/Kconfig.board:    depends on SOC_SERIES_KINETIS_K6X
  12. arm/hexiwear_k64/Kconfig.board:    depends on SOC_SERIES_KINETIS_K6X
  13. arm/nrf51_blenano/Kconfig.board:    depends on SOC_NRF51822_QFAA
  14. arm/nrf51_pca10028/Kconfig.board:    depends on SOC_NRF51822_QFAC
  15. arm/nrf52840_pca10056/Kconfig.board:    depends on SOC_NRF52840
  16. arm/nrf52_pca10040/Kconfig.board:    depends on SOC_NRF52832
  17. arm/nucleo_f103rb/Kconfig.board:    depends on SOC_STM32F103XB
  18. arm/nucleo_f401re/Kconfig.board:    depends on SOC_STM32F401XE
  19. arm/nucleo_f411re/Kconfig.board:    depends on SOC_STM32F411XE
  20. arm/nucleo_l476rg/Kconfig.board:    depends on SOC_STM32L476XX
  21. arm/olimexino_stm32/Kconfig.board:    depends on SOC_STM32F103XB
  22. arm/qemu_cortex_m3/Kconfig.board:    depends on SOC_TI_LM3S6965
  23. arm/quark_se_c1000_ble/Kconfig.board:    depends on SOC_NRF51822_QFAA
  24. arm/stm32f407ve/Kconfig.board:    depends on SOC_STM32F407XE
  25. arm/stm32f407zg/Kconfig.board:    depends on SOC_STM32F407ZG
  26. arm/stm32_mini_a15/Kconfig.board:    depends on SOC_STM32F103XE
  27. arm/v2m_beetle/Kconfig.board:    depends on SOC_BEETLE_R0
  28. nios2/altera_max10/Kconfig.board:    depends on SOC_NIOS2F_ZEPHYR
  29. nios2/qemu_nios2/Kconfig.board:    depends on SOC_NIOS2_QEMU
  30. x86/arduino_101/Kconfig.board:    depends on SOC_SERIES_QUARK_SE
  31. x86/galileo/Kconfig.board:    depends on SOC_SERIES_QUARK_X1000
  32. x86/minnowboard/Kconfig.board:    depends on SOC_ATOM
  33. x86/qemu_x86/Kconfig.board:    depends on SOC_IA32
  34. x86/quark_d2000_crb/Kconfig.board:    depends on SOC_SERIES_QUARK_D2000
  35. x86/quark_se_c1000_devboard/Kconfig.board:    depends on SOC_SERIES_QUARK_SE
复制代码



点评

谢谢。我试试。  详情 回复 发表于 2017-1-19 21:15


回复

使用道具 举报

1736

TA的帖子

24

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2017-1-19 21:15:01 | 显示全部楼层
tidyjiang8 发表于 2017-1-19 09:29
相信你手里肯定有几块它支持的板子:


每个板子对应的 SoC 如下:

谢谢。我试试。
这孩子,成熟的象征,理智的典范。


回复

使用道具 举报

1736

TA的帖子

24

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2017-1-21 14:22:52 | 显示全部楼层
感谢楼组的教程。hello world例程已经跑通。期待楼更多精彩的教程出现。
这孩子,成熟的象征,理智的典范。


回复

使用道具 举报

2648

TA的帖子

1

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2017-1-21 17:50:24 | 显示全部楼层
谢谢分享&#128077;


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-7-24 01:46 , Processed in 3.602657 second(s), 18 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表