Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249070
  • 博文数量: 128
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 487
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-24 17:43
个人简介

人生境界:明智、中庸、诚信、谦逊

文章分类

全部博文(128)

文章存档

2014年(12)

2013年(116)

我的朋友

分类: 嵌入式

2013-09-27 13:23:14

2.6内核下编译驱动模块时,我采用的是以下的模块Makefile模板:

    ifneq ($(KERNELRELEASE),)
    obj-m := LedHdw.o
    else
    KDIR := /opt/study/kernel/linux-2.6.32.2/    //这是我的交叉编译源代码文件的目录
    all:
    make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
    clean:
    rm -f *.ko *.o *.mod.o *.mod.c *.symvers  modul*
endif

源文件为LedHdw.c和LedHdw.h,其中LedHdw.c的头文件为:

    #include
    #include
    #include
    #include
    #include
    #include     //管脚定义,arch/arm/mach-s3c2410/include/mach/regs-gpio.h
    #include     //管脚配置函数定义arch/arm/mach-s3c2410/include/mach/hardware.h

#include "LedHdw.h"

存在于./arch/arm/arch-s3c2410/include目录下

以上Makefile文件不需要定义CC的路径,其原理是进入嵌入式内核源代码的目录之后利用交叉编译内核源代码的编译器配置进行工作,所以嵌入式交叉编译内核的配置必须正确。

当我在源码目录/iharm/ihkernel/目录配置make menuconfig时,配置成内核版本为S3C6410,然后编译LedHdw.c,发现其找不到文件<提示:mach/regs-gpio.h: No such file or directory>,后来我利用make menuconfig将内核CPU版本配成S3C2410,LedHdw.c就能够正确编译了,因为LedHdw.c是针对S3C2440的模块文件。至此我得出结论:要编译2440的模块驱动文件,内核源码目录必须跟其一致,也配成2440的编译源码,要是配成6410则不行。当然编译6410的模块文件,则必须将源码目录配成6410。

可以观察到几个特点:

1.2.6内核版本已经比2.4内核版本的编译自动化提高了很多。

2.内核源码根目录的Makefile文件里也没有关于交叉编译器的路径配置即CROSS_COMPILE没有配置,只是说

CROSS_COMPILE  = $(shell if [ -f .cross_compile ]; then \

                               cat .cross_compile; \

                               fi)

然后我在根目录下面找到了隐藏文件.cross_compile,内容即为我的交叉编译器前缀:

/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-

阅读(512) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~