最近做个音频外设的驱动,驱动搞定后却找不到该把它放在哪里,放在alsa 吧客户却基本不用,放在misc吧 有确实有很多已经放在里面很乱了,而且觉得这个本来就不是自己芯片内的IP驱动只能算是一个外接的外设,最主要是不想把它跟着sdk 发布出去,最后还是决定把它做成ko吧,这样他单独放在一个文件夹里面,有人需要就单独发布给他。
.ko文件
常规在linux下加载驱动模块都是.o文件, .o文件也就是object文件。

.ko文件是kernel object文件,与.o的区别在于其多了一些sections,他单独编译拥有自己的代码段 数据段等信息,
.modinfo
.modinfo section是由kernel source里的modpost工具生成的,包括:

MODULE_AUTHOR

MODULE_DESCRIPTION

device ID table

模块依赖关系。

depmod工具根据.modinfo section生成modules.dep, modules.*map等文件,以便modprobe更方便的加载模块。
可以在通过命令modinfo xxx.ko 看到ko 的信息。

在这里插入图片描述
可以看到,这个信息是写在.c 文件里面的。
在这里插入图片描述
剩下的就是写makefile 了,

obj-m +=ak_7755.o

PWD = ( s h e l l p w d ) a l l : m a k e − C / h o m e / x u w w / w o r k / z i y a n g / k e r n e l / M = (shell pwd) all: make -C /home/xuww/work/ziyang/kernel/ M= (shellpwd)all:makeC/home/xuww/work/ziyang/kernel/M=(PWD) modules
clean:

make -C /home/xuww/work/ziyang/kernel/ M=$(PWD) clean

这个Makefile 也比较简单,
obj-m + = xxx.o 这个是指明需要编译进ko的.c
M=$(PWD) M需要指明了编译的路径
-C /home/xuww/work/ziyang/kernel/ -C后面加上后面需要加载进kernel 的目录,也就是kernel的源代码路径
后面在奖赏modules或者clean 就可以了

在板端进行使用ko ,运行命令 : insmod ak_7755.ko

Logo

更多推荐