Chinaunix首页 | 论坛 | 博客
  • 博客访问: 246282
  • 博文数量: 43
  • 博客积分: 1878
  • 博客等级: 上尉
  • 技术积分: 457
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-02 11:08
文章分类

全部博文(43)

文章存档

2011年(3)

2010年(40)

分类: LINUX

2010-06-22 17:51:36

首先分析一下hello模块在电脑上的makefile。
ifneq ($(KERNELRELEASE),)
obj-m:=hello.o
else
KERNELDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *.mod.c *.mod.o *.ko
endif
如上篇日志所说,make的时候是要进入两个文件夹的,此makefile其实等效于下边一条指令:
make -C /lib/modules/2.6.27.5-41.fc9.i686/build  M=/home/work/driver/other modules(只适用于我这里)
前边一个目录具体是怎么回事我不清楚,反正要用到其下的Makefile,然后回到hello.c所在目录。
显然,这个目录是电脑内核的,肯定与硬件有关,我们要编译开发板上的模块,就得弄一个开发板内核一致的相关文件,查看/lib/modules目录下边,并无开发板内核2.6.12相关字样,看来得自己想办法弄一个,百度许久,发现果有其事,
你的KDIR也要修改,你系统要生成你arm内核的库文件,在内核原代码中使用make modules_install就会在lib/modules下生你arm版的内核文件
在把KDIR指向那个文件就可以了 ”,于是回到编译内核镜像那个文件夹,sudo make modules_install,结果就在/lib/modules里发现了2.6.12-h1940目录,cd一看,果然有build文件夹。
好了,回到hello文件目录,修改Makefile文件,
KERNELDIR:=/lib/modules/$(shell uname -r)/build修改为KERNELDIR=/lib/modules/2.6.12-h1940/build.
再make。生成了hello.ko文件,挂载到开发板上,insmod,在lsmod,发现有了hello.

还有个问题,既然在开发板上执行,就应该使用arm-linux-gcc啊,为什么不用设置呢?其实你打开
/lib/modules/2.6.12-h1940/build里的Makefile一看就知道了,里边
有这么两行:
ARCH        := arm
CROSS_COMPILE    := /usr/local/arm/3.4.1/bin/arm-linux-

已经设置了。
阅读(3169) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~