• insmod: error inserting 'simp-blkdev.ko': -1 Invalid module format


    (一)

    今天写了个块设备驱动例子,在虚拟机上加载模块insmod simp_blkdev.ko的时候,出现以下错误。

    insmod: error inserting 'simple-blk.ko': -1 Invalid module format

     

    其实错误很简单,Makefile的编写失误,因为之前是想让这个驱动模块在TQ2440上运行的,所以,Makefile的编写使用了以下形式:

    ifneq ($(KERNELRELEASE),)

    obj-m := simp_blkdev.o

    else

    KDIR := /usr/src/linux-2.6.30.4

    all:
            make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
    clean:
            rm -f *.ko *.o *.mod.o *.mod.c *.symvers

    endif

          主要错误在于红色部分,这个内核模块版本与虚拟机的内核模块版本不一致,导致出现以上错误。

    用uname -r 命令查看当前系统的版本是多少,我的查询结果是2.6.18-164.el5

    故将其改为:KDIR := /lib/modules/2.6.18-164.el5/build

    并且将  ARCH=arm CROSS_COMPILE=arm-linux-  去掉,因为我们要在虚拟机上加载模块,故不使用交叉编译工具。改完之后,再make,编译成功,问题解决。

    ————————————————————————————————

     (二)

          按照最开始那个Makefile编译出来的.ko文件,通过nfs下载到开发板上,在开发板上加载insmod simp-blkdev.ko 的时候却出现这个错误。

    vmap allocation for size 16785408 failed: use vmalloc=<size> to increase size.
    insmod: can't insert 'simp-blkdev.ko': Cannot allocate memory

         出错原因也很简单,它的意思是不能分配16785408这么大的空间,所以 失败,回到simp_blkdev.c上,原来我们在这里分配的内存空间是16M,当然就出错啦,要知道嵌入式里面的内存是相当宝贵的,不是每一次分配那 么大的空间内核都会响应给你,所以我把simp_blkdev.c上的分配空间改为16k,再重新编译,错误得到解决。

     

    PS:学驱动也有一些日子了,但是由于临近期末考试,没有更多的时间来写文章,待考完试我再一一详细介绍驱动相关的知识。最后,正如之前你看到的,LWJ祝大家学习愉快。^_^大笑

  • 相关阅读:
    在linux写一个shell脚本用maven git自动更新代码并且打包部署
    maven mvn 命令行 编译打包
    linux修改文件为可执行文件
    shell脚本中根据端口号kill对应的应用进程
    linux如何查看端口被哪个进程占用?
    LINUX中如何查看某个端口是否被占用
    The JAVA_HOME environment variable is not defined correctly的错误
    Linux配置Java环境变量
    requests
    https://www.cnblogs.com/zheting/category/1086753.html
  • 原文地址:https://www.cnblogs.com/Ph-one/p/4606922.html
Copyright © 2020-2023  润新知