
已經(jīng)大半個(gè)月沒有更新文章了,大家還記得之前作者寫的一篇關(guān)于RT-Thread的微內(nèi)核移植的文章嗎?如果不記得沒關(guān)系??慈缦率俏恼骆溄印?/p>
《如何移植RTT微內(nèi)核到樹莓派3B》
《CMake,大型項(xiàng)目采用的構(gòu)建工具》
《CMake 靜態(tài)庫與動(dòng)態(tài)庫構(gòu)建》
《CMake 教你如何鏈接共享庫》
cmake_minimum_required(VERSION 3.10)set(CMAKE_SYSTEM_NAME Generic)set(CMAKE_SYSTEM_PROCESSOR arm)set(CONFIG_PREFIX "/opt/gcc-arm-none-eabi/bin/arm-none-eabi-")set(CMAKE_C_COMPILER "${CONFIG_PREFIX}gcc")set(CMAKE_CXX_COMPILER "${CONFIG_PREFIX}g++")set(CMAKE_ASM_COMPILER "${CONFIG_PREFIX}gcc")set(CMAKE_OBJCOPY "${CONFIG_PREFIX}objcopy")set(CMAKE_C_AR "${CONFIG_PREFIX}ar")set(CMAKE_SIZE "${CONFIG_PREFIX}size")#Disable compiler checksset(CMAKE_C_COMPILER_FORCED TRUE)set(CMAKE_CXX_COMPILER_FORCED TRUE)set(microkernel_sdk_dir "${CMAKE_SOURCE_DIR}/sdk")set(microkernel_apps_dir "${CMAKE_SOURCE_DIR}/apps")project(rtt_microkernel)enable_language(C ASM)add_definitions("-D__ASSEMBLY__""-DRT_USING_NEWLIB""-DHAVE_CCONFIG_H""-D__STDC_ISO_10646__=201206L""-D_STDC_PREDEF_H")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")set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv7-a -marm -msoft-float -x assembler-with-cpp -O0 -g -fPIC")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -marm -msoft-float -Werror -Wall -Woverloaded-virtual -fno-exceptions -fno-rtti -O0 -g -gdwarf-2 -n -pie -fpie -fPIC -fpic --static -nostdinc")set(CMAKE_EXE_LINKER_FLAGS "-march=armv7-a -marm -msoft-float -nostartfiles -nostdlib -n -pie -fpie -fPIC -fpic -Wl,-pie")set(microkernel_sdk_inc"${CMAKE_SOURCE_DIR}""${microkernel_sdk_dir}/crt/rt-thread/components/dfs""${microkernel_sdk_dir}/crt/rt-thread/components/drivers""${microkernel_sdk_dir}/crt/rt-thread/components/net""${microkernel_sdk_dir}/crt/rt-thread/components/net/netdev""${microkernel_sdk_dir}/crt/rt-thread/components/lwip-2.1.0""${microkernel_sdk_dir}/crt/rt-thread/include""${microkernel_sdk_dir}/crt/rt-thread/include/libc""${microkernel_sdk_dir}/crt/gcc""${microkernel_sdk_dir}/libc/include")set(microkernel_apps_inc"${microkernel_apps_dir}/hello")set(microkernel_sdk_src"${microkernel_sdk_dir}/crt/cplusplus/cxx_crt.cpp""${microkernel_sdk_dir}/crt/gcc/arch/arm/syscall.S""${microkernel_sdk_dir}/crt/rt-thread/src/rt_channel.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_completion.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_device.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_ipc.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_net.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_syscall.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_thread.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_timer.c""${microkernel_sdk_dir}/crt/rt-thread/src/stub.c")set(microkernel_apps_src"${microkernel_apps_dir}/hello/main.c")set(CMAKE_EXECUTABLE_SUFFIX ".elf")add_executable(${PROJECT_NAME} ${microkernel_apps_src} ${microkernel_sdk_src})target_include_directories(${PROJECT_NAME} PRIVATE ${microkernel_sdk_inc} ${microkernel_apps_inc})target_link_libraries(${PROJECT_NAME}PRIVATE-Wl,--start-group"${CMAKE_SOURCE_DIR}/sdk/libc/lib/libc.a""${CMAKE_SOURCE_DIR}/sdk/libc/lib/libm.a""${CMAKE_SOURCE_DIR}/sdk/libc/lib/libcrt.a""libgcc.a"-Wl,--end-group-T ${microkernel_sdk_dir}/crt/gcc/arch/arm/gcc_arm.ld)
cmake_minimum_required(VERSION 3.10)
CMAKE_SYSTEM_NAME:這個(gè)變量被設(shè)置,cmake才認(rèn)為采用交叉編譯,CMAKE_SYSTEM_NAME即目標(biāo)機(jī)target所在的操作系統(tǒng)名稱,比如ARM或者Linux你就需要寫”Linux”,如果Android平臺你就寫”Android”,如果你的嵌入式平臺沒有相關(guān)OS你即需要寫成”Generic”。
set(CMAKE_SYSTEM_NAME Generic)set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER_FORCED TRUE)set(CMAKE_CXX_COMPILER_FORCED TRUE)
set(microkernel_sdk_dir "${CMAKE_SOURCE_DIR}/sdk")set(microkernel_apps_dir "${CMAKE_SOURCE_DIR}/apps")
project(rtt_microkernel)
enable_language(C ASM)
add_definitions("-D__ASSEMBLY__""-DRT_USING_NEWLIB""-DHAVE_CCONFIG_H""-D__STDC_ISO_10646__=201206L""-D_STDC_PREDEF_H")
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")set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv7-a -marm -msoft-float -x assembler-with-cpp -O0 -g -fPIC")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -marm -msoft-float -Werror -Wall -Woverloaded-virtual -fno-exceptions -fno-rtti -O0 -g -gdwarf-2 -n -pie -fpie -fPIC -fpic --static -nostdinc")set(CMAKE_EXE_LINKER_FLAGS "-march=armv7-a -marm -msoft-float -nostartfiles -nostdlib -n -pie -fpie -fPIC -fpic -Wl,-pie")


set(microkernel_sdk_inc"${CMAKE_SOURCE_DIR}""${microkernel_sdk_dir}/crt/rt-thread/components/dfs""${microkernel_sdk_dir}/crt/rt-thread/components/drivers""${microkernel_sdk_dir}/crt/rt-thread/components/net""${microkernel_sdk_dir}/crt/rt-thread/components/net/netdev""${microkernel_sdk_dir}/crt/rt-thread/components/lwip-2.1.0""${microkernel_sdk_dir}/crt/rt-thread/include""${microkernel_sdk_dir}/crt/rt-thread/include/libc""${microkernel_sdk_dir}/crt/gcc""${microkernel_sdk_dir}/libc/include")set(microkernel_apps_inc"${microkernel_apps_dir}/hello")
set(microkernel_sdk_src"${microkernel_sdk_dir}/crt/cplusplus/cxx_crt.cpp""${microkernel_sdk_dir}/crt/gcc/arch/arm/syscall.S""${microkernel_sdk_dir}/crt/rt-thread/src/rt_channel.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_completion.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_device.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_ipc.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_net.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_syscall.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_thread.c""${microkernel_sdk_dir}/crt/rt-thread/src/rt_timer.c""${microkernel_sdk_dir}/crt/rt-thread/src/stub.c")set(microkernel_apps_src"${microkernel_apps_dir}/hello/main.c")
set(CMAKE_EXECUTABLE_SUFFIX ".elf")
add_executable(${PROJECT_NAME} ${microkernel_apps_src} ${microkernel_sdk_src})
target_include_directories(${PROJECT_NAME} PRIVATE ${microkernel_sdk_inc} ${microkernel_apps_inc})
target_link_libraries(${PROJECT_NAME}PRIVATE-Wl,--start-group"${CMAKE_SOURCE_DIR}/sdk/libc/lib/libc.a""${CMAKE_SOURCE_DIR}/sdk/libc/lib/libm.a""${CMAKE_SOURCE_DIR}/sdk/libc/lib/libcrt.a""libgcc.a"-Wl,--end-group-T ${microkernel_sdk_dir}/crt/gcc/arch/arm/gcc_arm.ld)


編譯測試:



如上是整個(gè)測試以及CMakeLists.txt講解。有疑問,請私聊作者。
1.第二期“嵌入式與物聯(lián)網(wǎng)開發(fā)技術(shù)”線上分享——RISC-V處理器嵌入式開發(fā)與應(yīng)用
2.數(shù)字貨幣水到渠成,第三方支付功不可沒,媒體不必過度解讀!
3.有效利用Raspberry Pi的秘笈在這里!
4.為什么單片機(jī)內(nèi)部RAM這么少?
5.PCB的未來發(fā)展趨勢如何?
6.Imagination支持Google的Android GPU Inspector
免責(zé)聲明:本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請與我們聯(lián)系,我們將根據(jù)您提供的版權(quán)證明材料確認(rèn)版權(quán)并支付稿酬或者刪除內(nèi)容。