insmod error: inserting './hello.ko': -1 Invalid module format"

后端 未结 3 1273
失恋的感觉
失恋的感觉 2020-12-09 19:46

I have just made my first driver module, the hello world module following LDD3. However unfortunately encountered this error:

insmod: error inserting \'./hel         


        
相关标签:
3条回答
  • 2020-12-09 20:12

    Try using cross compile. Please look at the code below for the make file. Be mindful of the indentation else you may end up with error such as missing separator. Stop

    obj-m += hello_.o #this name should be the name of your .c file. I am just using hello for example

    I suggest the best approach is via cross compilation

    Create a variable to hold the directory name where the linux kernel directory resides In my example, change the value "PATH_TO_LINUX_KERNEL_DIRECTORY" to a real path value Example ~/linux You really need to do this so that the make file will know where to find arm-linux-gnueabi- Without this, you are likely to run into issues arm-linux-gnueabi-

    KDIR := PATH_TO_LINUX_KERNEL_DIRECTORY
    
    all:
        make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C $(KDIR) M=$(shell pwd) modules
    
    clean:
        make -C $(KDIR) M=$(shell pwd) clean
    
    0 讨论(0)
  • 2020-12-09 20:27

    You did everything correctly but did not booted your system with the kernel you compiled so the first step is you should boot with it. If you are using Ubuntu you can hold shift button at the time of booting and you will be given a list of compiled kernel in your system from there select linux-source-2.6.38 and then try to build your module and install it with your way ,than you won't find any problem. GoodLuck.

    0 讨论(0)
  • 2020-12-09 20:39

    Kernel from which you build your kernel module and to which you are inserting module should be of same version. If you do not want to take care of this thing you can use following Makefile.

    obj−m += hello−world.o
    
    all:
     make −C /lib/modules/$(shell uname −r)/build M=$(PWD) modules
    clean:
     make −C /lib/modules/$(shell uname −r)/build M=$(PWD) clean
    

    Now you can build and try to insert module.

    I suggest you to become root if possible before this line

    $sudo cp /boot/config-2.6.38-8-generic ./.config

    $su
    #cp /boot/config-2.6.38-8-generic ./.config
    #insmod hello_world.ko
    

    Alternatively you can also use following make file

    TARGET  := hello-world
    WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
    INCLUDE := -isystem /lib/modules/`uname -r`/build/include
    CFLAGS  := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
    CC      := gcc-3.0
    
    ${TARGET}.o: ${TARGET}.c
    
    .PHONY: clean
    
    clean:
        rm -rf ${TARGET}.o
    
    0 讨论(0)
提交回复
热议问题