女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎么使用CMake編譯RTT微內核

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-14 22:33 ? 次閱讀

首發:Rice 嵌入式開發技術分享
作者:RiceDIY

已經大半個月沒有更新文章了,大家還記得之前作者寫的一篇關于RT-Thread的微內核移植的文章嗎?

《如何移植RTT微內核到樹莓派3B》
目前RTT微內核是RTT提供的體驗版本。它采用了scons構建。作者也是剛接觸scons,不是很了解,在這不過多的說明。那么來談談為什么不使用scons,采用cmake編譯。不是因為scons不好,而是之前作者在寫關于cmake的文章中,熊大(RTT的創始人)看到,然后在交流中,熊大說可以采用cmake進行編譯。所以我也是冒著嘗試的想法,開始了使用cmake去構建微內核。下面幾篇文章是關于CMake理論的文章。

《CMake,大型項目采用的構建工具》

《CMake 靜態庫與動態庫構建》

《CMake 教你如何鏈接共享庫》

在構建過程中,由于不是很熟悉整個構建流程,在熊大親自指導下,讓我清晰很多。非常感謝熊大的支持。
其實整個過程最麻煩的編譯選項的問題,特別是最后鏈接部分,這也是我花費最長去研究的。接下來,說一說微內核初步版本(只單獨編譯一個application)。
整個CMakeLists.txt文件如下,下面對每一行進行說明:

cmake_minimum_required(VERSION 3.10)

1.檢查cmake的版本

cmake_minimum_required(VERSION 3.10)

2.其中

CMAKE/_SYSTEM/_NAME:這個變量被設置,cmake才認為采用交叉編譯,CMAKE/_SYSTEM/_NAME即目標機target所在的操作系統名稱,比如ARM或者Linux你就需要寫”Linux”,如果Android平臺你就寫”Android”,如果你的嵌入式平臺沒有相關OS你即需要寫成”Generic”。
CMAKE/_SYSTEM/_PROCESSOR:代表目標系統的硬件或者CPU的型號,例如ARM、X86。

set(CMAKE_SYSTEM_NAME Generic)

3.關閉編譯檢測

set(CMAKE_C_COMPILER_FORCED TRUE)

4.定義sdk和apps兩個目錄變量。

set(microkernel_sdk_dir "${CMAKE_SOURCE_DIR}/sdk")

5.定義項目的名字。

project(rtt_microkernel)

6.使能可以支持的語言,這里使能C語言匯編語言。如果不是能,則相關文件不會進行編譯。

enable_language(C ASM)

7.添加宏,即打開源文件的某項宏定義

add_definitions(

8.添加編譯選項,由于不同源文件添加的編譯選項的不同,所以需要分別添加(分別是:C,匯編,C++, 鏈接),分別如下:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -marm -msoft-float -Werror -Wall -O0 -g -gdwarf-2 -n -pie -fpie -fPIC -fpic --static -nostdinc")

如何看我們添加的編譯選項是否正確。我們編譯采用外部編譯,在build目錄執行(cmake ..),然后查看flags.make文件。

flags.make文件的內容如下(包含相關語言的編譯選項,宏定義,相關頭文件路徑):我們通過這個文件查看是否正確:

9.定義兩個頭文件變量,分別是sdk頭文件目錄和apps頭文件目錄:

set(microkernel_sdk_inc 

10.定義兩個源文件變量,分別是sdk源文件和apps源文件:

set(microkernel_sdk_src 

11.定義可執行文件的后綴。

set(CMAKE_EXECUTABLE_SUFFIX ".elf")

12.根據源文件,添加一個可執行文件。

add_executable(${PROJECT_NAME} ${microkernel_apps_src} ${microkernel_sdk_src})

13.添加目標所依賴的頭文件目錄

target_include_directories(${PROJECT_NAME}PRIVATE${microkernel_sdk_inc}${microkernel_apps_inc})

14.添加目標依賴的鏈接庫。以及鏈接腳本。

target_link_libraries(${PROJECT_NAME}

15.最后鏈接生成可執行文件的命令是否正確,我們可以查看link.txt文件。

link.txt文件內容如下:

編譯測試:

1.測試應用如下:

2.生成可執行文件:rtt/_microkernel.elf.

3.運行驗證(燒錄到樹莓派上進行驗證):

如上是整個測試以及CMakeLists.txt講解。有疑問,請私聊作者。

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RTT
    RTT
    +關注

    關注

    0

    文章

    66

    瀏覽量

    17530
  • CMake
    +關注

    關注

    0

    文章

    28

    瀏覽量

    1451
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    dfd#電路知識 #RTT設計大賽

    RTT
    jf_34552825
    發布于 :2025年05月08日 19:50:18

    Linux內核編譯失敗?移動硬盤和虛擬機的那些事兒

    Linux開發中,編譯內核是一項常見任務,但不少開發者在移動硬盤或虛擬機環境下嘗試時會遭遇失敗。本文將簡要探討這些問題的成因,并介紹一些虛擬機使用技巧,幫助大家更好地應對相關問題。在移動硬盤里編譯
    的頭像 發表于 04-11 11:36 ?231次閱讀
    Linux<b class='flag-5'>內核</b><b class='flag-5'>編譯</b>失???移動硬盤和虛擬機的那些事兒

    求助,關于STM32MP257編譯內核問題求解

    the Linux? kernel這篇文章里面的步驟來來編譯內核時,編譯會報錯。不知道是否是文檔還未更新,還是這個內核沒有更新,或者是其他問題呢?目前按照文檔無法
    發表于 03-13 06:24

    在CubeMX V6.13.0版本上配置的CMake工程無法通過編譯怎么解決?

    在 CubeMX V6.13.0 版本上配置的 CMake 工程無法通過編譯,報錯如下圖
    發表于 03-07 16:59

    為什么無法在OpenVINO? 2021.3源中使用CMAKE編譯ONNX模型?

    嘗試從源版本 2021.3 編譯OpenVINO? 錯誤: ~/項目/OpenVINO/cmake-build-debug/_deps/ext_onnx-src/onnx/onnx_pb.h
    發表于 03-05 08:29

    使用OpenVINO?條件編譯功能,壓縮Windows應用體積

    cmake -DENABLE_INTEL_GPU=OFF 便可以取消 GPU plugin 庫的編譯。除此以外 OpenVINO 還提供了條件編譯功能,用于針對特定模型進行運行庫壓縮,接下來就讓我們一起
    的頭像 發表于 01-13 10:26 ?465次閱讀
    使用OpenVINO?條件<b class='flag-5'>編譯</b>功能,壓縮Windows應用體積

    關于驅動編譯進蜂鳥派內核時候遇到的問題

    內核源碼為: 編譯內核可以通過,但編譯驅動的時候無法生成.ko文件
    發表于 12-30 17:02

    Triton編譯器安裝步驟詳解

    1. 系統要求 在開始安裝之前,請確保您的系統滿足以下要求: 操作系統 :支持 Linux 或 Windows(通過 WSL 或 Cygwin)。 編譯器 :GCC 或 Clang。 CMake
    的頭像 發表于 12-24 17:35 ?2158次閱讀

    Triton編譯器與其他編譯器的比較

    的GPU編程框架,使開發者能夠編寫出接近手工優化的高性能GPU內核。 其他編譯器 (如GCC、Clang、MSVC等): 定位:通用編譯器,支持多種編程語言,廣泛應用于各種軟件開發場景。 目標:提供穩定、高效的
    的頭像 發表于 12-24 17:25 ?889次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-內核編譯之初次編譯

    接下來我們就進行內核代碼的初次編譯,直接使用我們適配好的Linux內核源碼進行編譯。為了使編譯操作更加簡單,我們提供了
    發表于 12-17 09:34

    【敏矽ME32G070開發板免費體驗】使用JLINK的RTT功能實現類似串口printf打印功能

    和浮點數,所以我還是希望 敏矽 能給我補發一個好的 ME32G070開發板,方便我后面做電機FOC等復雜算法來實現浮點數據的打印功能。在此先謝謝電子發燒友群主。 Jlink RTT的打印結果視頻如下
    發表于 12-15 20:30

    linux驅動程序的編譯方法是什么

    Linux驅動程序的編譯方法主要包括兩種: 與內核一起編譯編譯成獨立的內核模塊 。以下是對這兩種方法的介紹: 一、與
    的頭像 發表于 08-30 14:46 ?1114次閱讀

    linux驅動程序的編譯方法有哪兩種

    Linux驅動程序的編譯方法主要可以歸納為兩種: 手動編譯 和 使用內核構建系統(Makefile)自動編譯 。 1. 手動編譯 手動
    的頭像 發表于 08-30 14:39 ?1380次閱讀

    剛剛裝好esp32 elipse CMAKE編譯環境,hello word編譯不通過怎么解決?

    CMake Error at E:/Work/eclipse-esp/esp-idf/tools/cmake/component.cmake:305 (message): Include
    發表于 06-18 06:15

    VSCode中編譯過程cmake錯誤的原因?

    VSCode中編譯產生一個問題,問題如下: CMake Error at CMakeLists.txt:1 (idf_component_register):Unknown CMake command
    發表于 06-06 06:48