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