Home > OS >  New version ubuntu19.04 compile driver make and load driver warning appears on the failure (in ubunt
New version ubuntu19.04 compile driver make and load driver warning appears on the failure (in ubunt

Time:09-24

Operation:
Compiler to generate static library in the lib libtest. A, then the compiler generates drive DRV. When ko, use the static library, finally insmod loading DRV. Ko

Problem description:
The ubuntu version before version ubuntu18.04 and DRV can be generated without warning. Ko, can also succeed insmod load DRV. Ko

But in the ubuntu19.04 compile driver will be the following warning, and load error

Make information
The rm -f * o *. Ko *. *. O. chua md mod. C *. Symvers *. CMD
The make - C/lib/modules/5.0.0-13 - generic/build M=/home/huhao/test_ko modules
Make [1] : if the directory '/usr/SRC/Linux - headers - 5.0.0-13 - generic'
CC [M]/home/huhao test_ko/driver. O
LD [M]/home/huhao test_ko/DRV. O
Building modules, stage 2.
MODPOST modules 1
WARNING: "test" [/home/huhao test_ko/DRV. Ko] undefined! -> There could not find static library libtest. A test function
CC/home/huhao test_ko/DRV. Mod. O
LD [M]/home/huhao test_ko/DRV. Ko
Make [1] : brigade directory '/usr/SRC/Linux - headers - 5.0.0-13 - generic'

Although the above can be generated after the make DRV. Ko drive, but after loading complains:
Insmod: ERROR: could not insert the module DRV. Ko: Unknown symbol in the module

Where a problem? One great god to give directions, thank you very much!

File structure is as follows:
Project/lib/myalib. C
Project/lib/myalib. H
Project/lib/Makefile

Project/driver.
cProject/Makefile

The file content:
C] [myalib.
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# include

Int test (void)
{
Return 1 + 2;
}
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

[myalib. H]
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Int test (void);
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

[Makefile] under the lib generate static library
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# This is the Makefile for making libtest. A.
The RM=RM -f

CCFLAGS=-c
ARFLAG=- rc

CC=GCC
AR=AR

Lib_OBJECTS=myalib. O
Lib_SOURCE=myalib. C

LIB=libtest. A

Libtest. A: $(lib_OBJECTS)
$(AR) $@ $$(ARFLAG) - o ^

$(lib_OBJECTS) : $(lib_SOURCE)
$(CC) $@ $$(CCFLAGS) - o ^

Clean:
$(RM) $(lib_OBJECTS)
$(RM) $(LIB)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

C] [driver.
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# include & lt; Linux/init. H>
# include & lt; Linux/module. H>
# include "../lib/myalib h "

MODULE_LICENSE (" Dual BSD/GPL ");

Int the init_module (void)
{
Printk (" into the init_module. \ n ");
Printk (" test the add=% d. \ n ", the test ());
return 0;
}

Void cleanup_module (void)
{
Printk (" into the cleanup_module. \ n ");
test();
}
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

[Makefile] generated drive DRV. Ko
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
# This is the Makefile for making DRV. Ko.

Obj - m:=DRV. O
DRV - objs:=driver. O lib/libtest. A

KDIR:=/lib/modules/$(shell uname -r)/build
The PWD:=$(shell PWD)
$(OBJDIR)/%. O: $(SRCDIR)/%. C
$@ $$(CC) - o (CFLAGS) - c $& lt;
Default:
$(MAKE) - C $(KDIR) M=$(PWD) modules
Clean:
The rm -f * o *. Ko *. *. O. chua md mod. C *. Symvers *. CMD
----------------------------------------------------

CodePudding user response:

To sink the feeling, not a great god answer?

CodePudding user response:

Help ~ ~
  • Related