当前位置: 技术问答>linux和unix
加载模块问题,希望大家能够帮帮忙,看看是那里的问题!
来源: 互联网 发布时间:2016-06-07
本文导语: 一个小模块,前天可以顺利的加载到内核,内核是2.6.23的,昨天我把内核升级到了2.6.26 在来加载这个内核,就在.mod.c中出现错误。希望高手能帮忙解决问题。分数是50,不要嫌少! 我把错误的代码贴出来: [root@19216...
一个小模块,前天可以顺利的加载到内核,内核是2.6.23的,昨天我把内核升级到了2.6.26 在来加载这个内核,就在.mod.c中出现错误。希望高手能帮忙解决问题。分数是50,不要嫌少!
我把错误的代码贴出来:
[root@1921681un 桌面]# make -C /usr/src/linux-2.6.29 M=$PWD modules
make: Entering directory `/usr/src/linux-2.6.29'
CC [M] /root/桌面/world.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "printk" [/root/桌面/world.ko] undefined!
CC /root/桌面/world.mod.o
/root/桌面/world.mod.c:8: 错误:变量 ‘__this_module’ 有初始值设定但类型不完全
/root/桌面/world.mod.c:9: 错误:初始值设定项里有未知的字段 ‘name’
/root/桌面/world.mod.c:9: 警告:结构初始值设定项中有多余元素
/root/桌面/world.mod.c:9: 警告:(在 ‘__this_module’ 的初始化附近)
/root/桌面/world.mod.c:10: 错误:初始值设定项里有未知的字段 ‘init’
/root/桌面/world.mod.c:10: 警告:结构初始值设定项中有多余元素
/root/桌面/world.mod.c:10: 警告:(在 ‘__this_module’ 的初始化附近)
/root/桌面/world.mod.c:14: 错误:初始值设定项里有未知的字段 ‘arch’
/root/桌面/world.mod.c:14: 错误:‘MODULE_ARCH_INIT’ 未声明 (不在函数内)
/root/桌面/world.mod.c:14: 警告:结构初始值设定项中有多余元素
/root/桌面/world.mod.c:14: 警告:(在 ‘__this_module’ 的初始化附近)
make[1]: *** [/root/桌面/world.mod.o] 错误 1
make: *** [modules] 错误 2
make: Leaving directory `/usr/src/linux-2.6.29'
我把错误的代码贴出来:
[root@1921681un 桌面]# make -C /usr/src/linux-2.6.29 M=$PWD modules
make: Entering directory `/usr/src/linux-2.6.29'
CC [M] /root/桌面/world.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "printk" [/root/桌面/world.ko] undefined!
CC /root/桌面/world.mod.o
/root/桌面/world.mod.c:8: 错误:变量 ‘__this_module’ 有初始值设定但类型不完全
/root/桌面/world.mod.c:9: 错误:初始值设定项里有未知的字段 ‘name’
/root/桌面/world.mod.c:9: 警告:结构初始值设定项中有多余元素
/root/桌面/world.mod.c:9: 警告:(在 ‘__this_module’ 的初始化附近)
/root/桌面/world.mod.c:10: 错误:初始值设定项里有未知的字段 ‘init’
/root/桌面/world.mod.c:10: 警告:结构初始值设定项中有多余元素
/root/桌面/world.mod.c:10: 警告:(在 ‘__this_module’ 的初始化附近)
/root/桌面/world.mod.c:14: 错误:初始值设定项里有未知的字段 ‘arch’
/root/桌面/world.mod.c:14: 错误:‘MODULE_ARCH_INIT’ 未声明 (不在函数内)
/root/桌面/world.mod.c:14: 警告:结构初始值设定项中有多余元素
/root/桌面/world.mod.c:14: 警告:(在 ‘__this_module’ 的初始化附近)
make[1]: *** [/root/桌面/world.mod.o] 错误 1
make: *** [modules] 错误 2
make: Leaving directory `/usr/src/linux-2.6.29'
|
1. 建议你写 makefile 来编译。
2. 贴代码出来看看。
makefile 可参考
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
2. 贴代码出来看看。
makefile 可参考
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
|
[root@bache hello]# cat Makefile
obj-m:= hello.o
[root@bache hello]#
|
你的代码和 makefile 都没有问题 。
问题可能出在 kernel 处,
建议你重新编译一下内核源代码。
问题可能出在 kernel 处,
建议你重新编译一下内核源代码。
|
建议贴代码
|
貌似没有找到 module.h ...