linux下编译的(.ko)模块如何在arm上运行? 要配置那些东西,希望大家不吝赐教!!!!!!!!!
------最佳解决方案--------------------
交叉编译时要指定你ARM上使用的内核,不是主机上的。
------其他解决方案--------------------
另外我用楼主的代码试了一下,将内核目录改为我宿主机的目录,发现会出现一个错误:
make[1]: *** No rule to make target `modules'. Stop.
把makefile里面的all改为default就可以顺利编译通过。
接着把内核目录改为目标机的内核目录,使用make命令,发现同样可以编译通过。
然后使用make ARCH=arm CROSS_COMPILE=arm-linux-命令,也同样可以编译通过。
看不到楼主的错误信息代码,不知道问题出在什么地方
------其他解决方案--------------------
用交叉编码器编译过吗?
------其他解决方案--------------------
用过,但是编译不通过,报错误,但是不用交叉可以通过,但是file .ko文件一看,只是Intel平台,不能再arm上运行,请问有什么可以通过交叉编译么?
------其他解决方案--------------------
交叉编译不通过,看看错误信息。
交叉编译时需要指定所用的内核,出错的话,有可能是你模块中用了这个内核版本中不支持或没有的函数接口。
又或者,是你指定的内核路径不正确。
如果顺序通过交叉编译,就可以在arm中直接用insmod了。
------其他解决方案--------------------
如果用了内核不支持的函数接口,那么不用交叉编译时应该不会报错,对吧。
内核路径我就是用的/lib/modules/($shell uname -r)/build 应该是这个吧?
------其他解决方案--------------------
那不会通过宿主机的编译吧
------其他解决方案--------------------
交叉编译是运行在宿主面上的一个编译器,编译出来的程序可以运行在目标板上。
以arm-linux-gcc为例,它能运行于linux系统中,但编译出来的程序只能运行在arm平台linux系统上。
------其他解决方案--------------------
----------------------Makefile--------------------
obj-m:= h.o
#KDIR:= /lib/modules/$(shell uname -r)/build
KDIR=/lib/modules/2.6.32.2-FriendlyARM/
PWD := $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
# rm -f *.o *mod.c
编译: make ARCH=arm CROSS_COMPILE=arm-linux-
--------------------
#include<linux/module.h>
MODULE_LICENSE("GPL");
static __init int demo_init(void)
{
printk(KERN_ALERT "demo_init:be called.\n");
return 0;
}
static __exit void demo_exit(void)
{
printk(KERN_ALERT "demo_exit:be called.\n");
}
module_init(demo_init);
module_exit(demo_exit);
全部贴出来了 还是不通过! 麻烦看一下
------其他解决方案--------------------
该回复于2011-11-04 16:35:27被版主删除
------其他解决方案--------------------
谢谢大家 ,已解决
------其他解决方案--------------------
谢谢大家 ,已解决
------其他解决方案--------------------
已解决!,谢谢大家。
------其他解决方案--------------------
把错误信息贴出来大家才好帮你看啊