日期:2014-05-16  浏览次数:20898 次

我想在我的交叉编译环境中写一个最简单的驱动?请问如何编译?
/*                                                                                                          
  *   $Id:   hello.c,v   1.5   2004/10/26   03:32:21   corbet   Exp   $  
  */                                                                                                        
#include   <linux/init.h>
#include   <linux/module.h>
MODULE_LICENSE( "Dual   BSD/GPL ");

static   int   hello_init(void)
{
printk(KERN_ALERT   "Hello,   world\n ");
return   0;
}

static   void   hello_exit(void)
{
printk(KERN_ALERT   "Goodbye,   cruel   world\n ");
}

module_init(hello_init);
module_exit(hello_exit);


就比如这个来自LDD3的源代码

我的交叉编译工具是mips-linux-g++

请问这样编译或者写makefile文件

------解决方案--------------------
CROSS_COMPILE=/home/guys/starwave-ppc/staging_dir_powerpc/bin/powerpc-linux-uclibc-

CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
RM = rm

KMOD = hello
LINUX = /home/guys/starwave-ppc/build_powerpc/linux

SYS_INC = /home/guys/starwave-ppc/staging_dir_powerpc/bin/../lib/gcc/powerpc-linux-uclibc/3.4.6/include

CINCS = -I . -I include -I inc -I $(LINUX)/include -I $(LINUX)/arch/ppc \
-I $(LINUX)/arch/ppc/include

CFLAG = -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common -ffreestanding -O2 \
-fomit-frame-pointer -Iarch/ppc -msoft-float -pipe -ffixed-r2 \
-mmultiple -mstring -Wa,-maltivec -Wdeclaration-after-statement

DFLAGS = -DMODULE -DKBUILD_BASENAME=$(KMOD) -DKBUILD_MODNAME=$(KMOD)

CFLAGS = -m32 -Wp,-MD,.$(KMOD).o.d \
-nostdinc -isystem $(SYS_INC) \
-D__KERNEL__ $(CINCS) $(CFLAG)

SRCS = $(KMOD).mod.o $(KMOD).o

OBJS = $(SRCS)

all: $(KMOD)
@echo "Look for $ <.ko please "

%.o: %.c
$(CC) $(CFLAGS) $(DFLAGS) -c -o $@ $ <

$(KMOD): $(SRCS)
$(LD) -m elf32ppc -r -o $@.ko $(KMOD).mod.o $(KMOD).o

clean:
$(RM) -f $(OBJS) *.o

编译链改成你的路径,其他各项也自己对号入座。
------解决方案--------------------
这也算复杂吗????
如果连这种MAKEFILE都看不懂,还是回去补一补MAKEFILE,GCC编译参数,脚本语言这些基础知识吧
所以在写驱动之前学会使用LINUX与学会LINUX应用编程是有好处的