Linux kernel “怎么做?”;制作驱动程序/usb/storage/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

如何从内核源代码树编译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/usb storage.ko”时出错:-1模块格式无效

  • dmesg
    给出如下

    usb\u存储:模块布局无符号版本

  • 如何更改顶级Makefile以将其插入到运行版本的内核中

    生成文件(顶级)

    版本=2

    补丁级别=6

    子级=35

    外向性=


    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