Linux kernel “怎么做?”;制作驱动程序/usb/storage/usb storage.ko“;
如何从内核源代码树编译usb-storage.ko(仅限) 运行内核版本:Linux kernel “怎么做?”;制作驱动程序/usb/storage/usb storage.ko“;,linux-kernel,usb,linux-device-driver,Linux Kernel,Usb,Linux Device Driver,如何从内核源代码树编译usb-storage.ko(仅限) 运行内核版本:2.6.35-22-generic(uname-r) 源版本:linux-2.6.35 执行modprobe usb存储会出现以下错误 致命:插入usb_存储器时出错(/lib/modules/2.6.35-22-generic/kernel/drivers/usb/storage/usb storage.ko):模块格式无效 执行insmod会产生以下错误 insmod:插入“drivers/usb/storage/us
2.6.35-22-generic
(uname-r)
源版本:linux-2.6.35
modprobe usb存储
会出现以下错误
致命:插入usb_存储器时出错(/lib/modules/2.6.35-22-generic/kernel/drivers/usb/storage/usb storage.ko):模块格式无效
insmod
会产生以下错误
insmod:插入“drivers/usb/storage/usb storage.ko”时出错:-1模块格式无效
dmesg
给出如下
usb\u存储:模块布局无符号版本
NAME=Sheep on Meth在内核开发过程中,一个人在使用本地构建的模块时经常会遇到这两个令人沮丧的错误
错误1:
模块布局无符号版本
为什么?这意味着内核源代码未构建。构建整个内核源代码后,将在Linux内核源代码的顶级目录中生成文件Modules.symvers。这将包含符号
模块布局的地址。从今以后,在构建任何内核模块时都将使用它
修复
构建完整的内核源代码。确保生成了模块.symvers
,并且其中包含一行符号模块布局
。接下来,构建内核模块
错误2:不同意符号模块布局的版本
为什么?
该错误意味着所使用的内核源代码与用于构建用于引导的内核映像的内核源代码明显不同
修复
手动修改ko
模块文件,使
文件中模块布局的值与用于引导的内核映像中的值相匹配
为此,我们首先需要确定模块布局的有效值。这基本上存在于系统上的每个有效工作文件中。获取此信息的快速方法是从成功加载的有效ko
文件。使用lsmod获取潜在“working.ko”文件的列表
#modprobe--转储modversions | grep模块|布局
0x0b11e775模块_布局
#modprobe——转储modversions | grep模块|布局
0x2719d41e模块_布局
注意:如果您的
文件中没有模块布局
符号的实例,则首先按照步骤修复错误1,然后继续下面的操作
使用您喜爱的十六进制编辑器,查找ko文件中的值(4字节),并将其替换为工作ko文件中的值
修改前:
00016c70
1e d4 19 27
6d 6f 64 75 6c 65 5f 6c 61 79 6f 75 u…模块布局
修改后:
00016c70
75 e7 11 0b
6d 6f 64 75 6c 65 5f 6c 61 79 6f 75 u…模块布局
通过上述更改,insmod
本地构建的ko
文件应该是成功的。在内核开发过程中,在insmod
本地构建的ko
模块上经常会遇到这两个令人沮丧的错误
错误1:模块布局无符号版本
为什么?
这意味着内核源代码未构建。构建整个内核源代码后,将在Linux内核源代码的顶级目录中生成文件Modules.symvers。这将包含符号模块布局的地址。从今以后,在构建任何内核模块时都将使用它
修复
构建完整的内核源代码。确保生成了模块.symvers
,并且其中包含一行符号模块布局
。接下来,构建内核模块
错误2:不同意符号模块布局的版本
为什么?
该错误意味着所使用的内核源代码与用于构建用于引导的内核映像的内核源代码明显不同
修复
手动修改ko
模块文件,使
文件中模块布局的值与用于引导的内核映像中的值相匹配
为此,我们首先需要确定模块布局的有效值。这基本上存在于系统上的每个有效工作文件中。获取此信息的快速方法是从成功加载的有效ko
文件。使用lsmod获取潜在“working.ko”文件的列表
#modprobe--转储modversions | grep模块|布局
0x0b11e775模块_布局
#modprobe——转储modversions | grep模块|布局
0
# modprobe --dump-modversions <working.ko> | grep module_layout
0x0b11e775 module_layout
# modprobe --dump-modversions <your.ko> | grep module_layout
0x2719d41e module_layout