【求助】关于Redhat linux下的交叉编译
各位高手,我是一名研究生,最近在学习linux下的USB驱动程序的编写,现在遇到一个问题,想要请教下各位。问题是这样的:
我编写了一个驱动程序helloword程序:
-----------------------------------------------------
#define MODULE
#include <linux/module.h>
MODULE_LICENSE("GPL");
int init_module(void)
{
printk("Hello World!\n");
return 0;
}
void cleanup_module(void)
{
printk("Goodbye!\n");
}
-------------------------------------------------------
在Shell命令行中输入命令:arm-linux-gcc -o hello hello.c
结果出现这样的提示:
/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/lib/crt1.o(.text+0x30): In function `_start':
: undefined reference to `main'
/tmp/cct7s4pJ.o(.text+0x10): In function `init_module':
: undefined reference to `printk'
/tmp/cct7s4pJ.o(.text+0x34): In function `cleanup_module':
: undefined reference to `printk'
collect2: ld returned 1 exit status
请问这是怎么回事?我不知道该怎么解决,交叉编译要注意些什么问题呢?
我用的交叉编译工具是cross-3.3.2,linux系统是在windows xp下用虚拟机装的Redhat 9.0,内核为2.4.20-8版本
很希望能得到各位的指点,谢谢! 加上#include <linux/kernel.h>
LDD3:
#include <linux/kernel.h>
int printk(const char * fmt, ...); 原帖由 openspace 于 2009-11-20 23:31 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
加上#include
LDD3:
#include
int printk(const char * fmt, ...);
你说的头文件我都加了但是出来的结果还是:
/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/lib/crt1.o(.text+0x30): In function `_start':
: undefined reference to `main'
/tmp/ccOtPVCB.o(.text+0x10): In function `init_module':
: undefined reference to `printk'
/tmp/ccOtPVCB.o(.text+0x34): In function `cleanup_module':
: undefined reference to `printk'
collect2: ld returned 1 exit status
不知道到底是怎么了?唉,郁闷!
[ 本帖最后由 jlj1986 于 2009-11-21 08:59 编辑 ]
回复 #3 jlj1986 的帖子
没有做过交叉编译但是感觉你的交叉编译适用于用户态
不是内核态,printk是内核态才有的
参考一下这个
http://gawingsky.blogbus.com/logs/46872918.html 编译选项不全啊,你编译的是内核模块,通常得有-DMODULE选项的。
[ 本帖最后由 Godbach 于 2009-11-21 10:43 编辑 ] 首先,你要知道你用的是什么kernel
然后编译该kernel对应版本的module
然后,你确定printk在哪个头文件里有定义
页:
[1]