linux-编译ko

最近做个音频外设的驱动,驱动搞定后却找不到该把它放在哪里,放在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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值