Linux下编写和加载 .ko 文件(驱动模块文件

Linux下编写和加载 .ko 文件(驱动模块文件,第1张

一、.ko 文件介绍

.ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载。

二、优点

(1)这样可以缩小内核体积;

(2)使用方便。

三、.ko文件一般的用处

(1)作为一个功能模块,需要使用时,直接插入运行就行。如在imx6上连接模拟摄像头,先运行模拟摄像头对应的驱动模块 camera.ko文件,然后对应的工程执行文件运行就行。

四、使用.ko 文件

1、加载驱动模块test.ko

(1)方法一 

进入test.ko驱动模块文件所在的目录,然后直接   insmod  test.ko 

(2)方法二 

将test.ko文件拷贝到/lib/module/#uname-r#/目录下,这里,#uname -r#意思是,在终端中输入 

uname -r后显示的内核版本及名称,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。

然后 depmod(会在/lib/modules/#uname -r#/目录下生成modules.dep和modules.dep.bb文件,表明模块的依赖关系) 

最后 modprobe test(注意这里无需输入.ko后缀) 即可

注:两种方法的区别

modprobe和insmod类似,都是用来动态加载驱动模块的,区别在于modprobe可以解决load module时的依赖关系,它是通过/lib/modules/#uname -r/modules.dep(.bb)文件来查找依赖关系的;而insmod不能解决依赖问题。也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。而如果你要加载的驱动模块还依赖其他ko驱动模块的话,就只能将模块拷贝到上述的特定目录,depmod后再modprobe。

硬件: Jetson Nano

接口: USB

软件: Ubuntu18.04(Kernel 4.9 R32.2.0)

WIFI 模块一 (Realtek RTL8821CU 成功)

模块型号:SKYLAB WG217 802.11 a/b/g/n/ac

SDK版本:rtl8821CU_WiFi_linux_v5.4.1_28754.20180921_COEX20180712-3232

Step1. 修改SDK driver 目录Makefile,添加如下编译信息(基于Nano直接编译)

编译出KO文件: 8821cu.ko

Step2. 加载ko,连接WIFI

WIFI 模块二 (Qualcomm Atheros AR1021X 失败)

模块型号:TTIT-1021XP5 802.11 a/n

WIFI: TTIT-1021XP5 Spec (USB Interface 2T2R 5G-High Power wifi mdulel)

!!!未解决死机重启问题,暂不可用!!!

解决:

sudo modprobe cfg80211

必须针对自己当前用的内核自己编译模块。

必须是相同的内核版本编译的模块。而且,gcc 编译参数必须一样(当然看实际情况……),还有就是如果是 gcc 3.1 之前的,gcc 版本也必须一样。

不然就很容易出现 invalid module format


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12067798.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存