我正在尝试使用规范交叉编译helloworld内核模块:
我正在使用makefile:
PWD := $(shell pwd)
obj-m := test.o
all:
$(MAKE) -C /path/to/kernel M=$(PWD) CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm modules
其中arm-none-linux-gnueabi-
是arm工具链的前缀。
作为内核,我尝试使用来自git://github.com/CyanogenMod/cm-kernel.git
的克隆作为内核。这是一个2.6内核的fork。使用此内核,编译成功。尝试插入模块时,会出现错误:
invalid module format
遗憾的是,很少说。
答案 0 :(得分:4)
由于Eugene使用dmesg
的提示,我发现了错误:
version magic '2.6.37.6 mod_unload modversions ARMv5 ' should be '2.6.27.47-parrot preempt mod_unload ARMv5 '
结论:在编译内核模块时,不仅需要匹配版本,还需要一些配置参数。通过使用正确的版本和编辑配置解决了我的问题。
如果您不想重新配置所有内容,快速(丑陋)修复就是编辑include/generated/autoconf.h
答案 1 :(得分:0)
我的丑陋修复是修改脚本文件 "脚本/ setlocalversion"
170 if test "${LOCALVERSION+set}" != "set"; then
171 scm=$(scm_version --short)
172 # res="$res${scm:++}"
173 res="${res}"
174 fi
大家好..我确实找到了简单的洗液。
只需修改envirionment vairable
export LOCALVERSION=
全部