首發(fā):Rice 嵌入式開發(fā)技術(shù)分享
作者:RiceDIY
已經(jīng)大半個月沒有更新文章了,大家還記得之前作者寫的一篇關(guān)于RT-Thread的微內(nèi)核移植的文章嗎?
《如何移植RTT微內(nèi)核到樹莓派3B》
目前RTT微內(nèi)核是RTT提供的體驗版本。它采用了scons構(gòu)建。作者也是剛接觸scons,不是很了解,在這不過多的說明。那么來談?wù)劄槭裁床皇褂胹cons,采用cmake編譯。不是因為scons不好,而是之前作者在寫關(guān)于cmake的文章中,熊大(RTT的創(chuàng)始人)看到,然后在交流中,熊大說可以采用cmake進行編譯。所以我也是冒著嘗試的想法,開始了使用cmake去構(gòu)建微內(nèi)核。下面幾篇文章是關(guān)于CMake理論的文章。
《CMake,大型項目采用的構(gòu)建工具》
《CMake 靜態(tài)庫與動態(tài)庫構(gòu)建》
《CMake 教你如何鏈接共享庫》
在構(gòu)建過程中,由于不是很熟悉整個構(gòu)建流程,在熊大親自指導(dǎo)下,讓我清晰很多。非常感謝熊大的支持。
其實整個過程最麻煩的編譯選項的問題,特別是最后鏈接部分,這也是我花費最長去研究的。接下來,說一說微內(nèi)核初步版本(只單獨編譯一個application)。
整個CMakeLists.txt文件如下,下面對每一行進行說明:
cmake_minimum_required(VERSION 3.10)
1.檢查cmake的版本
cmake_minimum_required(VERSION 3.10)
2.其中
CMAKE/_SYSTEM/_NAME:這個變量被設(shè)置,cmake才認為采用交叉編譯,CMAKE/_SYSTEM/_NAME即目標(biāo)機target所在的操作系統(tǒng)名稱,比如ARM或者Linux你就需要寫”Linux”,如果Android平臺你就寫”Android”,如果你的嵌入式平臺沒有相關(guān)OS你即需要寫成”Generic”。
CMAKE/_SYSTEM/_PROCESSOR:代表目標(biāo)系統(tǒng)的硬件或者CPU的型號,例如ARM、X86。
set(CMAKE_SYSTEM_NAME Generic)
3.關(guān)閉編譯檢測
set(CMAKE_C_COMPILER_FORCED TRUE)
4.定義sdk和apps兩個目錄變量。
set(microkernel_sdk_dir "${CMAKE_SOURCE_DIR}/sdk")
5.定義項目的名字。
project(rtt_microkernel)
6.使能可以支持的語言,這里使能C語言和匯編語言。如果不是能,則相關(guān)文件不會進行編譯。
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文件的內(nèi)容如下(包含相關(guān)語言的編譯選項,宏定義,相關(guān)頭文件路徑):我們通過這個文件查看是否正確:
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.添加目標(biāo)所依賴的頭文件目錄
target_include_directories(${PROJECT_NAME}PRIVATE${microkernel_sdk_inc}${microkernel_apps_inc})
14.添加目標(biāo)依賴的鏈接庫。以及鏈接腳本。
target_link_libraries(${PROJECT_NAME}
15.最后鏈接生成可執(zhí)行文件的命令是否正確,我們可以查看link.txt文件。
link.txt文件內(nèi)容如下:
編譯測試:
1.測試應(yīng)用如下:
2.生成可執(zhí)行文件:rtt/_microkernel.elf.
3.運行驗證(燒錄到樹莓派上進行驗證):
如上是整個測試以及CMakeLists.txt講解。有疑問,請私聊作者。
審核編輯 黃昊宇
-
RTT
+關(guān)注
關(guān)注
0文章
65瀏覽量
17063 -
CMake
+關(guān)注
關(guān)注
0文章
28瀏覽量
1259
發(fā)布評論請先 登錄
相關(guān)推薦
評論