linux kernel中如何添加/编译驱动
驱动源码(固定pattern,略)
方法一:整编内核
01,源码复制到特目录:demo_driver.c程序拷贝到…/linux-2.6.32.2/drivers/char目录下
02,增加编译选项,触发新增源码的编译,修改…/linux-2.6.32.2/drivers/char目录下Makefile文件,在Makefile中增加如下代码:
1 | obj-m += demo_driver.o |
03,启动内核编译 ,回到linux内核源码根目下…/linux-2.6.32.2 ,执行编译指令
1 | make |
等待内核编译约20分钟…
最终得到demo_driver.ko
整编内核的模式示意图如下:
方法二:单编ko
01,make modules 指令为编译内核模块指令:该指令的功能是编译内核中所有配置为模块的程序得到模块ko文件,make modules 命令只能在内核源码顶层目录下执行。
make modules是编译所有的内核模块,如何单独编译一个指定的模块呢?加M参数
1 | make M=DIR modules |
“M=”参数的作用是以内核源码为基础编译一个外部模块。命令中“M=DIR”,程序会自动跳转到所指定的DIR目录中查找模块源码,编译生成ko文件。
02:编写Makefile: 单编KO的Makefile文件如下:
1 | # .PHONY来显示地指明main clean是伪目标 |
- $(MAKE) 为make
- $(CROSS_ARCH) 为指定的编译工具
- -C (KERNELDIR) 选项的作用是将工作目录转移到指定的KERNELDIR位置
- -M=(PWD) modules ,作用是以内核源码为基础编译一个外部模块
将demo_driver.c和上述的Makefile文件放在同一个目录下(路径为任何路径,不需要一定放在内核目录中),执行make指令。
大约3秒钟,编译得到demo_driver.ko文件,单编KO的优势就是快(3秒钟)
最终得到了demo_driver.ko文件,我们将文件传输到开发板中并测试驱动ko文件。
1 | 执行加载驱动:insmod demo_driver.ko |
单编KO的模式如下:
参考
debian环境 源码如何编译为ko 驱动
【转】如何编译linux驱动ko:https://blog.csdn.net/weixin_45264425/article/details/130394724
Linux编译ko文件详细教程 (linux 怎么编译ko文件):https://www.idc.net/help/123153/
Linux 内核模块ko在内核源码外部编译的方法:https://blog.csdn.net/m0_67686953/article/details/128952347
Linux编译内核模块生成.KO驱动示例:https://blog.csdn.net/u011436603/article/details/138486727
在kernel中添加自定义驱动、无线网卡/声卡的配置:https://blog.csdn.net/weixin_38019025/article/details/103966224
12-如何向Linux内核添加新的设备驱动:https://blog.csdn.net/weixin_42135087/article/details/139903669