0 背景

调试内核模块时,不想每次都要整个工程一起编译,只想编译单独的ko文件,也不影响模块间的依赖关系(会修改mod.depend信息)。

1 确认必要的环境变量

创建env.sh文件,并chmod +x env.sh

#!/bin/bashfunction runcmd()
{if [ $# -ne 1 ];thenecho "Usage: runcmd command_string"exit 1fiecho "$1"$1 || {echo "failed"exit 1}
}
function cpfiles()
{if [ $# -ne 2 ];thenecho "Usage: cpfiles \"sourcefiles\" \"destdir\""exit 1fimkdir -p $2 || {echo "mkdir -p $2 failed"exit 1}for f in $1doif [ -a $f ];thencp -af $f $2 || {echo "cp -af $f $2 failed"exit 1}fidoneecho "cpfiles $1 $2"
}
export N=$(( ($(cat /proc/cpuinfo |grep 'processor'|wc -l)) ))
export BUILD_OUTPUT_PATH=$(pwd)/out
export TARGET_MODULES_PATH=${BUILD_OUTPUT_PATH}/_modules
export TARGET_BOOT_PATH=${BUILD_OUTPUT_PATH}/_boot
export TARGET_BOOT_EXT4_PATH=${BUILD_OUTPUT_PATH}/_boot_ext4
export KERNEL_DEFCONFIG=stm32mp1_mmc_defconfig
export CC_GCC=arm-none-linux-gnueabihf-gcc

这样只需要source env.sh,便可将环境变量直接导入当前bash窗口。

2 整个编译内核

make O=${BUILD_OUTPUT_PATH} -j${N}

指定将编译过程输出至BUILD_OUTPUT_PATH,-j是多核编译
至此,BUILD_OUTPUT_PATH里面就已经有了完整的内核文件及编译过程文件+编译结果文件。

3 单独编译某个驱动文件为ko

在当前c文件目录下创建Makefile:

KERNELDIR := $(BUILD_OUTPUT_PATH)
CURRENT_PATH := $(shell pwd)obj-m := c文件名.obuild: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modulesrm *.mod*
clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

运行make命令,便可在当前目录下生成ko文件。
通过scp传输至板端,即可insmod

Linux 单独编译驱动模块(ko文件)相关推荐

  1. 如何在android设备上insmod自己单独编译的.ko,解决签名问题

    近期由于项目需要,需要自己写一个.ko文件,来操作寄存器,但是该.ko是不能跟整体工程在一起的,需要单独编译,这过成功遇到了大量的问题,现在终于解决,跟大家分享一下,很珍贵!!! 遇到的问题: 1. ...

  2. Android平台单独编译内核模块ko insmod

    第一次在android平台上单独编译内核模块并且insmod,过程比较难受,毕竟啥事第一次做都不怎么顺畅! 本文基于Android5.1 msm8909 因为笔者使用的平台物理串口只有两个,一个已经作 ...

  3. Android单独编译驱动模块

    在调试wifi驱动过程中,可以通过单独编译wlan.ko的方式来提高调试效率.其他模块方法类似.以qcm2150为例: $source buidl/envsetup.sh SQ808_EAU_00_0 ...

  4. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  5. Linux单独编译设备树,迅为IMX6Q开发板-非设备树内核-单独编译内核驱动

    内核驱动不仅可以将驱动编译到内核中,还可以动态的编译内核驱动.本文档介绍如何以模块的方式编译内核驱动. 要动态的编译内核,首先需要将内核源码编译通过,内核的编译请参考使用手册第五章. 9.5.2.1 ...

  6. Linux kernel 编译 exfat.ko ntfs.ko 来支持exFat 和 NTFS 分区

    项目需求想让设备支持 exFat 和 NTFS 的文件格式. 默认的内核是不支持的,因为内核要限定1.5M之内, 所以很多东西都裁剪掉了. 而且不是所有项目都有这个需求,所以就需要编译为 ko ,按需 ...

  7. 出现使用选项-std=c99或-std=gnu99来编译您的代码错误或者如何让Linux内核编译驱动模块时支持C99

    最近在Linux系统下编译嵌入式代码时出现问题: 问题如下图: 然后发现问题出在这: use option -std=c99 or -std=gnu99 to compile your code 上面 ...

  8. 多个.c文件编译成.ko文件

    以两个C文件为例: 将本该被分别编译成adc_device.ko和adc_driver.ko的adc_device.c.adc_driver.c编译成一个ko文件! 采用方法: 第一步.修改C文件 1 ...

  9. linux gcc编译下的文件读写操作

    linux下的文件操作 所有目录             1.文件及文件系统的定义             2.linux文件的类型             3.linux文件的权限          ...

最新文章

  1. java 遍历file_JAVA File类(文件的遍历,创建,删除)
  2. redis和memcache的区别
  3. Redis系列二:reids介绍
  4. pycharm最左侧Tool Buttons显示不全的问题解决
  5. 高性能的MySQL(2)慢查询
  6. Java容器Stack
  7. SQL PROCEDURE和 FUNCTION的区别
  8. mysql workbench 从model建库_使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结...
  9. hadoop3.0.3 SLS-Failed to create an AM
  10. pythonpil库过滤图像contour_Python之PIL库的运用、GIF处理h
  11. 从下列选项中选择正确的java表达式,java笔试常见的选择题
  12. Windows学习总结(17)——Windows 15个重要运行命令
  13. 禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
  14. C++大小端转换程序
  15. Markdown桌面最佳编辑器
  16. “性能续航小超人”iQOO Z6系列登场:售价仅1199元起
  17. 机器人算法工程师入门指南(三)机器人算法工程师需要学习哪些知识?(及教材推荐)
  18. vb用计算机解决鸡兔同笼,vb解决鸡兔同笼问题
  19. ioi 赛制_钟子谦IOI2019参赛总结
  20. Python | 查看微信撤回的消息(完整代码)

热门文章

  1. DFS 有向图 树边 前向边 回边 横跨边
  2. 给input date设置默认值
  3. 美国北亚利桑那大学计算机专业排名,北亚利桑那大学排名 综合排名和专业排名介绍...
  4. AddressList
  5. 技术评审到底需要评审哪些东西
  6. Python----CSV 一般写入, 追加改模式w 为a
  7. PLM系统的技术现状和发展趋势
  8. 警告: Request method ‘POST‘ not supported。的原因之一——空格毁一生
  9. skycc营销软件为我赚取的第一个30万
  10. java毕设项目开源了,springMVC+layui的医院医药管理系统