Linux 单独编译驱动模块(ko文件)
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文件)相关推荐
- 如何在android设备上insmod自己单独编译的.ko,解决签名问题
近期由于项目需要,需要自己写一个.ko文件,来操作寄存器,但是该.ko是不能跟整体工程在一起的,需要单独编译,这过成功遇到了大量的问题,现在终于解决,跟大家分享一下,很珍贵!!! 遇到的问题: 1. ...
- Android平台单独编译内核模块ko insmod
第一次在android平台上单独编译内核模块并且insmod,过程比较难受,毕竟啥事第一次做都不怎么顺畅! 本文基于Android5.1 msm8909 因为笔者使用的平台物理串口只有两个,一个已经作 ...
- Android单独编译驱动模块
在调试wifi驱动过程中,可以通过单独编译wlan.ko的方式来提高调试效率.其他模块方法类似.以qcm2150为例: $source buidl/envsetup.sh SQ808_EAU_00_0 ...
- 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入
成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...
- Linux单独编译设备树,迅为IMX6Q开发板-非设备树内核-单独编译内核驱动
内核驱动不仅可以将驱动编译到内核中,还可以动态的编译内核驱动.本文档介绍如何以模块的方式编译内核驱动. 要动态的编译内核,首先需要将内核源码编译通过,内核的编译请参考使用手册第五章. 9.5.2.1 ...
- Linux kernel 编译 exfat.ko ntfs.ko 来支持exFat 和 NTFS 分区
项目需求想让设备支持 exFat 和 NTFS 的文件格式. 默认的内核是不支持的,因为内核要限定1.5M之内, 所以很多东西都裁剪掉了. 而且不是所有项目都有这个需求,所以就需要编译为 ko ,按需 ...
- 出现使用选项-std=c99或-std=gnu99来编译您的代码错误或者如何让Linux内核编译驱动模块时支持C99
最近在Linux系统下编译嵌入式代码时出现问题: 问题如下图: 然后发现问题出在这: use option -std=c99 or -std=gnu99 to compile your code 上面 ...
- 多个.c文件编译成.ko文件
以两个C文件为例: 将本该被分别编译成adc_device.ko和adc_driver.ko的adc_device.c.adc_driver.c编译成一个ko文件! 采用方法: 第一步.修改C文件 1 ...
- linux gcc编译下的文件读写操作
linux下的文件操作 所有目录 1.文件及文件系统的定义 2.linux文件的类型 3.linux文件的权限 ...
最新文章
- java 遍历file_JAVA File类(文件的遍历,创建,删除)
- redis和memcache的区别
- Redis系列二:reids介绍
- pycharm最左侧Tool Buttons显示不全的问题解决
- 高性能的MySQL(2)慢查询
- Java容器Stack
- SQL PROCEDURE和 FUNCTION的区别
- mysql workbench 从model建库_使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结...
- hadoop3.0.3 SLS-Failed to create an AM
- pythonpil库过滤图像contour_Python之PIL库的运用、GIF处理h
- 从下列选项中选择正确的java表达式,java笔试常见的选择题
- Windows学习总结(17)——Windows 15个重要运行命令
- 禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
- C++大小端转换程序
- Markdown桌面最佳编辑器
- “性能续航小超人”iQOO Z6系列登场:售价仅1199元起
- 机器人算法工程师入门指南(三)机器人算法工程师需要学习哪些知识?(及教材推荐)
- vb用计算机解决鸡兔同笼,vb解决鸡兔同笼问题
- ioi 赛制_钟子谦IOI2019参赛总结
- Python | 查看微信撤回的消息(完整代码)
热门文章
- DFS 有向图 树边 前向边 回边 横跨边
- 给input date设置默认值
- 美国北亚利桑那大学计算机专业排名,北亚利桑那大学排名 综合排名和专业排名介绍...
- AddressList
- 技术评审到底需要评审哪些东西
- Python----CSV 一般写入, 追加改模式w 为a
- PLM系统的技术现状和发展趋势
- 警告: Request method ‘POST‘ not supported。的原因之一——空格毁一生
- skycc营销软件为我赚取的第一个30万
- java毕设项目开源了,springMVC+layui的医院医药管理系统