Chinaunix首页 | 论坛 | 博客
  • 博客访问: 216848
  • 博文数量: 32
  • 博客积分: 410
  • 博客等级: 一等列兵
  • 技术积分: 396
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-03 16:58
文章分类

全部博文(32)

文章存档

2013年(17)

2012年(15)

我的朋友

分类: 嵌入式

2012-06-03 23:47:12

在写第一个外部驱动模块(hello.ko)遇到的问题剪辑:


1:在执行默认平台上的一些配置的时候,通常会make XX_config之类的东西,
     XX_config的位置位于arch/xxx/configs/*,最终在linux的目录下生成“.config”的配置文件;
2:内核编译器的指定在linux-2.6.24/Makefile中说明的;
3:在交叉编译ko模块的时候,需要在Makefile中指定编译器(隐式的)!看下面的sample code--》
4:在跨平台编译module的时候,需要指定目标平台的内核文件目录(KERNELDIR:=/lib/modules/$(shell uname -r)/build),其中目标内核的库文件;
     这个路径(构造好内核源代码树)是哪里来的呢,在编译内核的时候,通过make modules_install可以在本地机上/lib/modules/2.6.24处(不是本地内核那个,ex:我的主机2.6.32-71.el6.i686)生成目标机器(开发板环境)内核文件目录;
 5:EX Code:
         kernel_modules:
        make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules
简化过程:
   AA:"/lib/modules/$(KVERS)/build " 参数1
   BB:" M=$(CURDIR) "参数2
   CC:"modules" 相当于target;
make 【-C  参数1】【 参数2】 modules,进一步简化==>make  modules
其中-C的含义是在执行Makefile之前,预读AA中所有的内容;
-C指定代码树的位置,M=$(CURDIR) 则是回到当前目录来执行build;

完整代码过程:
[root@localhost hello]# make
make -C /lib/modules/2.6.24.3/build M=/opt/china_ldd/drivers/hello modules
make[1]: Entering directory `/opt/linux-2.6.24.3'
  CC [M]  /opt/china_ldd/drivers/hello/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /opt/china_ldd/drivers/hello/hello.mod.o
  LD [M]  /opt/china_ldd/drivers/hello/hello.ko
=========================Makefile============================
                                 | 1 KVERS =2.6.24.3
                                |3 #KVERS = $(shell uname -r)
                               
                              |  5 # Kernel modules
                              |  6 obj-m += hello.o
   ~                          |  7
   ~                          |  8 # Specify flags for the module compilation.
   ~                          |  9 #EXTRA_CFLAGS=-g -O0
   ~                          | 10
   ~                          | 11 build: kernel_modules
   ~                          | 12
   ~                          | 13 kernel_modules:
   ~                          | 14         make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules        
             #编译器也在这里面啦,应该是借用内核配置ARCH :=mips CROSS_COMPILE :=mipsel-linux-
   ~                          | 15
   ~                          | 16 clean:
   ~                          | 17         make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean

 6:完了之后,将生成的hello.ko加载到pc上的时候,就会出错(执行平台不匹配),但是在开发板上执行insmod的时候,则出现”hello module“大功告成;
阅读(3999) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~