基础知识_03系统层

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# .PHONY来显示地指明main clean是伪目标
.PHONY: main clean

# 定义了KERNELDIR ,PWD ,CROSS_ARCH 三个变量。
KERNELDIR := /home/liwei/v3_work/project/linux-2.6.32.2
PWD := $(shell pwd)
CROSS_ARCH := /home/liwei/v3_work/tools/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc

# 指定将demo_driver.c编译成demo_driver.ko文件。
obj-m += demo_driver.o

# main:是第一个伪目标,也就是默认目标
main:
$(MAKE) $(CROSS_ARCH) -C $(KERNELDIR) M=$(PWD) modules

# clean是执行清除工作的伪目标。
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers *.d *.markers *.order
  • $(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
2
执行加载驱动:insmod demo_driver.ko 
查看驱动设备:cat /proc/devices

单编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

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×