操作程序:
在lib中編譯生成靜態庫libtest.a, 然后編譯生成驅動drv.ko時使用該靜態庫,最后insmod加載drv.ko
問題描述:
目前在版本ubuntu18.04及之前的ubuntu版本中可以無警告生成drv.ko,也能成功insmod加載drv.ko
但是在ubuntu19.04中,編譯驅動時就會下面的警告,及加載錯誤
make資訊
rm -f *.o *.ko *.o.cmd *.mod.c *.symvers *.cmd
make -C /lib/modules/5.0.0-13-generic/build M=/home/huhao/test_ko modules
make[1]: Entering 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 1 modules
WARNING: "test" [/home/huhao/test_ko/drv.ko] undefined! ->出現找不到靜態庫libtest.a中test函式
CC /home/huhao/test_ko/drv.mod.o
LD [M] /home/huhao/test_ko/drv.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.0.0-13-generic'
上面雖然make之后可以生成drv.ko驅動,但是加載之后會報錯:
insmod: ERROR: could not insert module drv.ko: Unknown symbol in module
問題出現在哪呢?哪位大神指點一下,非常感謝!
檔案結構如下:
Project/lib/myalib.c
Project/lib/myalib.h
Project/lib/Makefile
Project/driver.c
Project/Makefile
檔案內容:
【myalib.c】
----------------------------------------------------
#include<stdio.h>
int test(void)
{
return 1 + 2;
}
----------------------------------------------------
【myalib.h】
----------------------------------------------------
int test(void);
----------------------------------------------------
【Makefile】 lib下生成靜態庫的
----------------------------------------------------
# This is the Makefile for making libtest.a.
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)
----------------------------------------------------
【driver.c】
----------------------------------------------------
#include <linux/init.h>
#include <linux/module.h>
#include "./lib/myalib.h"
MODULE_LICENSE("Dual BSD/GPL");
int init_module(void)
{
printk("into init_module.\n");
printk("test add = %d.\n", test());
return 0;
}
void cleanup_module(void)
{
printk("into cleanup_module.\n");
test();
}
----------------------------------------------------
【Makefile】生成驅動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
PWD := $(shell pwd)
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(CC) -o $@ $(CFLAGS) -c $<
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.o *.ko *.o.cmd *.mod.c *.symvers *.cmd
----------------------------------------------------
uj5u.com熱心網友回復:
感覺要石沉大海了,沒有大神回答嗎?uj5u.com熱心網友回復:
幫頂~ ~轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/69380.html
標籤:驅動程序開發區
上一篇:Mint系統安裝軟體的時候,總是會出現Error:unknown OS,怎么辦啊?
下一篇:安裝ubuntu18.04時出現PCIe Bus Error:severity=corrected,type=Physical Layer
