使用CMake编译内核模块代码和测试程序并复制到开发板

 #使用指南和注意事项

#在源文件中创建build目录

#进入build中,cmake ..

#  需要注意驱动源码的名字要和和应用程序的源码名字的前边是一致的    

#  每次请修改PRO为你所需要编译的文件的名字:例如需要miscbeep.ko 和miscbeepAPP 就将PRO设置为 “miscbeep”

#  make后使用 命令make cp  复制 .ko 和APP 到开发板挂在的文件系统中

#  需要把交叉编译器的地址改为自己交叉编译器的地址

#  需要把内核路径修改为自己的路径

cmake_minimum_required(VERSION 3.0.0)

project(APP)
#  需要注意驱动源码的名字要和和应用程序的源码名字的前边是一致的     
#  每次请修改PRO为你所需要编译的文件的名字:例如需要miscbeep.ko 和miscbeepAPP 就将PRO设置为 “miscbeep”
#  make后使用 命令make cp  复制 .ko 和APP 到开发板挂在的文件系统中 
#  需要把交叉编译器的地址改为自己交叉编译器的地址
#  需要把内核路径修改为自己的路径
set(PRO miscbeep) 

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc) #交叉编译器绝对地址
set(CMAKE_CXX_COMPILER /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

###---------------------------------------------------------------------------###
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/${PRO}APP.c)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})

add_executable(${PRO}APP ${SRC_LIST})

###---------------------------------------------------------------------------###

set(KERNEL_DIR /home/ljl/alientek/linux/nxp_linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/)  #内核路径

function(compile_module obj)

    set(TARGET_NAME ${obj})
    add_custom_target(
        ${TARGET_NAME} ALL  COMMAND echo "compling module ${obj}.ko "
    )

    add_custom_command(TARGET ${TARGET_NAME}
        COMMAND make -C ${KERNEL_DIR} M=${CMAKE_CURRENT_SOURCE_DIR}/build modules
        
    )
    
endfunction()

compile_module(${PRO})

add_custom_target(
    cp
    COMMAND sudo cp ${CMAKE_CURRENT_SOURCE_DIR}/*.ko /home/ljl/alientek/linux/nfs/buildrootfs/lib/modules/4.1.15/
    COMMAND sudo cp ${CMAKE_CURRENT_SOURCE_DIR}/*APP /home/ljl/alientek/linux/nfs/buildrootfs/lib/modules/4.1.15/
)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值