国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

怎么使用CMake編譯RTT微內核

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-14 22:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

首發(fā):Rice 嵌入式開發(fā)技術分享
作者:RiceDIY

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

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

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

《CMake 靜態(tài)庫與動態(tài)庫構建》

《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所在的操作系統(tǒng)名稱,比如ARM或者Linux你就需要寫”Linux”,如果Android平臺你就寫”Android”,如果你的嵌入式平臺沒有相關OS你即需要寫成”Generic”。
CMAKE/_SYSTEM/_PROCESSOR:代表目標系統(tǒng)的硬件或者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目錄執(zhí)行(cmake ..),然后查看flags.make文件。

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

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

set(microkernel_sdk_inc 

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

set(microkernel_sdk_src 

11.定義可執(zhí)行文件的后綴。

set(CMAKE_EXECUTABLE_SUFFIX ".elf")

12.根據(jù)源文件,添加一個可執(zhí)行文件。

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.最后鏈接生成可執(zhí)行文件的命令是否正確,我們可以查看link.txt文件。

link.txt文件內容如下:

編譯測試:

1.測試應用如下:

2.生成可執(zhí)行文件:rtt/_microkernel.elf.

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

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

審核編輯 黃昊宇

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

    關注

    0

    文章

    66

    瀏覽量

    18273
  • CMake
    +關注

    關注

    0

    文章

    29

    瀏覽量

    1796
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    入門篇:瑞芯?RK?平臺編譯工具鏈自動適配原理全解析

    在瑞芯RK系列平臺(RK3576/RV1126/RK3588/RV1109等)嵌入式開發(fā)中, 交叉編譯工具鏈 是固件編譯內核構建、驅動開發(fā)的核心根基。過往做嵌入式開發(fā),最繁瑣的環(huán)節(jié)
    的頭像 發(fā)表于 02-11 07:10 ?3192次閱讀
    入門篇:瑞芯<b class='flag-5'>微</b>?RK?平臺<b class='flag-5'>編譯</b>工具鏈自動適配原理全解析

    內核.config文件:嵌入式開發(fā)的“底層配置密碼”,90%的開發(fā)者都在靠它掌控系統(tǒng)核心

    在嵌入式 Linux 開發(fā)中,尤其是瑞芯 RK3588 這類高性能平臺的底層開發(fā),內核編譯是繞不開的核心環(huán)節(jié)。
    的頭像 發(fā)表于 02-09 17:07 ?1112次閱讀
    <b class='flag-5'>內核</b>.config文件:嵌入式開發(fā)的“底層配置密碼”,90%的開發(fā)者都在靠它掌控系統(tǒng)核心

    初次編譯rk3568(rk3576)Linux 6.1內核踩坑記錄:從報錯終止到成功解決的完整流程

    很多剛接觸瑞芯 rk 系列芯片開發(fā)的小伙伴,在初次編譯基于 Linux 6.1 內核的系統(tǒng)時,很容易因為環(huán)境依賴問題卡殼。最近我在編譯 rk3576(rk3568 流程類似)Linu
    的頭像 發(fā)表于 02-06 16:47 ?2572次閱讀
    初次<b class='flag-5'>編譯</b>rk3568(rk3576)Linux 6.1<b class='flag-5'>內核</b>踩坑記錄:從報錯終止到成功解決的完整流程

    深入解析RK平臺編譯核心:build.sh的知識點、調試技巧與開發(fā)價值

    在瑞芯(RK)Linux SDK 開發(fā)中,build.sh是整個編譯構建系統(tǒng)的“入口中樞”—— 它統(tǒng)一管理環(huán)境配置、命令解析、模塊構建與日志輸出,幾乎所有芯片(如 RK3588、RV1126)的固件編譯
    的頭像 發(fā)表于 02-03 16:02 ?1902次閱讀
    深入解析RK平臺<b class='flag-5'>編譯</b>核心:build.sh的知識點、調試技巧與開發(fā)價值

    ESP32 編譯過程中 bootloader 配置階段的 CMake 緩存沖突錯誤,記錄

    你遇到的是 ESP32 編譯過程中 bootloader 配置階段的 CMake 緩存沖突錯誤,核心原因是系統(tǒng)中混合了 ESP-IDF v5.5.1 和 v5.4.3 兩個版本的路徑,導致
    發(fā)表于 12-23 07:07

    GCC -O0?編譯內核:調試黨的?“救命神器”,這些優(yōu)勢?90%?開發(fā)者沒吃透!

    在?Linux?內核開發(fā)、驅動調試或內核問題定位的場景中,“編譯優(yōu)化等級”?是個容易被忽略卻影響巨大的選擇。GCC?的優(yōu)化等級從?O0?到?O3、Os、Ofast?各有側重,而 O0(默認優(yōu)化等級
    的頭像 發(fā)表于 12-03 07:05 ?585次閱讀
    GCC -O0?<b class='flag-5'>編譯</b><b class='flag-5'>內核</b>:調試黨的?“救命神器”,這些優(yōu)勢?90%?開發(fā)者沒吃透!

    CubeMX 生成的 RTT 項目無法通過 cmake 編譯怎么解決?

    在 CubeMX V6.13.0 版本上配置的 CMake 工程無法通過編譯,報錯如下圖
    發(fā)表于 10-11 15:04

    RTT stduio編譯速度慢的原因?

    筆記本配置:i5-8250U 8G 全固態(tài)硬盤點RTT stduio小錘子編譯項目,5-10分鐘才編譯完成,第一次編譯長一點可以理解,每次修改重新
    發(fā)表于 09-28 15:06

    求助,關于RTT Nano在keil使用C++11的問題求解

    近期有個項目需要用到C++11和RTT 可是RTT內核文件完全支持C++11 仔細分析了一下RTT源碼存在部分小問題 下面截圖說明 基本都是類似類型轉換問題,在此就不一一列舉了,真心
    發(fā)表于 09-25 08:18

    2222#RTT設計大賽 #眼圖

    RTT
    jf_34552825
    發(fā)布于 :2025年08月11日 11:43:45

    如何在裸機環(huán)境中運行KleidiAI內核

    ,對 KleidiAI 進行了簡要概述,并附有相關指南鏈接,其中詳細說明了在 Linux 環(huán)境中運行 KleidiAI 矩陣乘法 (matmul) 內核的分步操作,這份指南內容詳實且極易上手。而本篇內容則將
    的頭像 發(fā)表于 08-08 15:16 ?3829次閱讀
    如何在裸機環(huán)境中運行KleidiAI<b class='flag-5'>微</b><b class='flag-5'>內核</b>

    ubuntu編譯stm32cubmax生成的cmake工程,在最后鏈接階段報錯,怎么解決?

    我是直接stm32cubmax 生成的cmake 工程,我在Ubuntu 編譯的時候找不到這個-lc_none , 但是我看了我的編譯器安裝路徑有一個nano.specs ,cmake
    發(fā)表于 08-08 07:30

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

    RTT
    jf_34552825
    發(fā)布于 :2025年05月08日 19:50:18

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

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

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

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