轉自:https://blog.csdn.net/qq_40088639/article/details/106374413
對於zephyr這個實時嵌入式操作系統,可以先在x86架構上搭建運行環境,學習相關知識。之后,根據實際需求,再將操作系統移植到不同架構的MCU上。
一、環境搭建
准備工作:安裝ubuntu操作系統
虛擬機軟件版本:VMware Workstation 12
Ubuntu版本:ubuntu 16.04 LTS 桌面版 64位(ubuntu-16.04.6-desktop-amd64.iso)
zephyr版本:v1.14.0 |
如何在虛擬機軟件中安裝64位的ubuntu操作系統,這里不再做過多的介紹,請自行安裝,其他文章中也有介紹,可供參考。
推薦兩個學習Zephyr的連接:
中文資料地址鏈接(僅供參考): https://zephyr-doc.readthedocs.io/zh_CN/latest/
官方英文地址鏈接: |
具體環境搭建過程,官方英文文檔都有詳細說明。下面簡單介紹如何根據官網說明,一步步地在Linux中搭建運行環境,主要是記錄一些自己踩過的坑,供大家參考。
1. 對Linux系統的要求
官方文檔中就有明確的說明,指定是64位的,如果在32位的操作系統中搭建運行環境,那么就會產生一系列的問題(庫文件缺少、找不到依賴、編譯不通過......)。
2. CMake版本
一般來說,ubuntu自帶的CMake版本都太低,而Zephyr編譯環境最低要求是版本3.13.1,官方文檔給出了更新CMake的幾種方式。如下圖
如果選擇第一種方式進行CMake版本的更新,直接輸入命令即可,命令:pip install --user cmake,但是可能會由於網絡問題而導致失敗。推薦使用第二種方式,在windows下先下載(速度會快很多)文件cmake-3.14.7-Linux-x86_64.sh,再拷貝到ubuntu中,執行對應的命令。
文件cmake-3.14.7-Linux-x86_64.sh下載,百度網盤鏈接:
鏈接:https://pan.baidu.com/s/1jzlPLIFoZpy1Pg-MluaNxA |
3. 安裝SDK
官方說明如下圖
在ubuntu上使用wget命令去下載SDK安裝包,下載速度可能會比較慢,可以在windows上下載成功之后,再拷貝到ubuntu中進行SDK的安裝。
SDK安裝包百度網盤下載鏈接:
鏈接:https://pan.baidu.com/s/1yaTP2XP5eyAxXGsQuej9hA
提取碼:pj4c |
在根目錄下新建目錄zephyrsdk,把下載好的SDK安裝文件放入該目錄中。
更新CMake版本和下載SDK,都屬於准備工作。接下來,就安裝SDK。
(1) 執行安裝命令
wgp@wgp:/zephyrsdk$ sudo sh zephyr-sdk-0.10.0-setup.run
|
注意:
A. 要使用sudo進行安裝,否則提示“權限不夠……”。
B. 安裝時,使用默認的安裝目錄即可,默認安裝在:/opt/zephyr-sdk/ 。安裝結束,可以看到/opt/zephyr-sdk目錄下生成了很多文件,說明SDK安裝成功。
(2)設置系統環境變量,如下
export ZEPHYR_GCC_VARIANT= zephyr export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk |
4. 跳到Getting Started Guide 文檔
安裝完SDK,接着跳轉到Getting Started Guide 文檔,如下圖。
從這里開始繼續閱讀
按照官方文檔的說明,接下來就需要安裝west工具。
5. 安裝west工具並克隆遠程代碼倉庫
執行命令:pip install --user west
之后使用west下載Zephyr源碼倉庫,命令如下。
west init zephyrproject //先下載到源碼 cd zephyrproject west update //然后更新源碼 |
官方文檔說明,如下圖
需要注意的是要在用戶目錄下執行命令:west init zephyrproject。因為在安裝west的時候,加了參數--user。下載到源碼倉庫。
源碼倉庫下載過程中的打印:
wgp@wgp:~$ west init zephyrproject
.................................................................................................................................................................................... |
成功下到源碼倉庫,如下圖。
更新源碼倉庫,執行命令:west init
更新完整個源碼倉庫,可以發現,里面包含有截至目前官方更新的所有zephyr源碼版本。可以使用git命令查看所有的本地代碼版本庫,命令:git branch -a
創建一個本地分支,假設拉取的是版本V1.14.0的,在源碼目錄下,執行命令:
// 取遠程分支並創建一個本地分支 //命令格式:git checkout –b 本地分支名 origin/遠程分支名 wgp@wgp:~/zephyrproject/zephyr$ git checkout -b v1.14.0 remotes/origin/v1.14-branch |
查看剛創建好的本地倉庫,命令:git branch
這樣就成功地取到了版本1.14.0的源代碼。
6 . 安裝python依賴包
Zephyr源碼里面有個文件requirements.txt,目錄:/zephyr/scripts/requirements.txt
官網描述如下
所以,在zephyr源碼的跟目錄下,執行命令即可安裝依賴包:
wgp@wgp:~/zephyrproject$ pip3 install --user -r zephyr/scripts/requirements.txt |
如下圖
7. 設置工具鏈
官方說明:
目前是在X86平台上搭建並運行程序,所以,ZEPHYR_TOOLCHAIN_VARIANT設置為:host
ZEPHYR_TOOLCHAIN_VARIANT=host |
后續如果要移植到微處理器上,就需要指定自己的工具鏈。第一部分,運行環境搭建結束,接下來簡單介紹如何構建和運行自己的應用程序。
二、構建和運行自己的應用程序
以編譯和運行hello_world這個demo為例。
1. 進入源碼的根目錄
2. 設置環境變量
export ZEPHYR_TOOLCHAIN_VARIANT=host export ZEPHYR_GCC_VARIANT=zephyr export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk |
方式1: 設置系統環境變量僅生效於當前控制台
方式2:環境變量永久生效
避免每次打開終端都設置一遍環境變量,可以把這些環境變量的設置放入/ect/profile中。重啟虛擬機,使環境變量永久生效,這樣就不用每次打開終端都要執行 source /etc/profile。
重啟ubuntu之后,可以再將這幾個環境變量的值打印出來,進行核對。
如果要釋放環境變量,則使用unset命令,可以在unset之后,再打印環境變量的值,什么都沒有。
注意:設置環境變量的時候,等號右邊不能有空格!否則,環境變量設置失效!這雖然是基礎知識,但是難免也有大意的時候。
例子
A.在/ect/profile中設置 export ZEPHYR_GCC_VARIANT= zephyr
B.然后:source /etc/profile
C.最后在終端打印環境變量的值:echo $ ZEPHYR_GCC_VARIANT 打印出來的結果是空格!並不是正確的環境變量值zephyr |
3. 配置Zephyr構建環境
每次打開新的終端,編譯新的應用程序的時候,都要source一下zephyr-env.sh
命令:source zephyr-env.sh
4. 在Demo里面新建一個build
hello_world這個Demo在源碼根目錄下的samples目錄中,在Demo目錄下新建一個build目錄,並進入build目錄,如下圖。
5 . 執行命令
首先指定目標板型並編譯,這里是運行在X86平台上,所以指定的板型為:qemu_x86
命令:
wgp@wgp:~/zephyrproject/zephyr/samples/hello_world/build$ cmake -GNinja -DBOARD=qemu_x86 .. |
然后再執行命令
wgp@wgp:~/zephyrproject/zephyr/samples/hello_world/build$ ninja |
最后運行目標程序
wgp@wgp:~/zephyrproject/zephyr/samples/hello_world/build$ ninja run |
過程記錄,如下圖:
運行結果如下圖:
打印出了hello world! qemu_x86
三、源碼目錄結構簡介
Arch目錄:存放特定處理器架構的芯片平台源碼。 Boards目錄:存放與開發板相關的源代碼和配置文件。 Doc目錄:存放相關的文件和工具。 Driver目錄:存放設備驅動源碼。 Include目錄:存放除了在lib文件夾定義的其他公共APIs包含的文件。 Kernel目錄:存放zephyr微內核源碼。 Lib目錄:存放庫源碼,包括最小的C標准庫。 Misc目錄:存放各種源碼文件 Net目錄:存放網絡通信源碼,包括藍牙協議棧和網絡通信協議棧。 Samples目錄:存放zephyr內核、藍牙協議棧、網絡通信協議棧示例應用程序。 Tests目錄:存放內核功能的測試代碼和參考基准。 Script目錄:存放編譯和測試應用程序的各種各種程序和其他文件。 Subsys目錄:子系統目錄。 |
四、應用程序開發
一個簡單的App目錄結構如下:
wgp@wgp:~/zephyrproject/zephyr/samples/hello_world$ tree . ├── CMakeLists.txt ├── prj.conf ├── README.rst ├── sample.yaml └── src └── main.c 1 directory, 5 files wgp@wgp:~/zephyrproject/zephyr/samples/hello_world$ |
說明:
- CMakeLists.txt:文件列表。該文件告訴zephyr系統,在哪里可以找到其他的支持和依賴文件,並將App目錄和zephyr的CMake開發系統鏈接起來。
- prj.conf:內核配置文件。一個應用程序通常要提供一個配置文件(prj.conf),它為一個或者多個內核配置選項指定配置參數,這些應用程序設置和開發板的設置合並,產生內核配置文件。
- main.c:是應用程序的源代碼文件。一個應用程序通常需要一個或者多個源文件,這些源文件通常位於子目錄src中。