linux ko位置,第一个外部驱动模块hello.ko遇到的些问题

  • Post author:
  • Post category:linux


在写第一个外部驱动模块(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“大功告成;

阅读(3289) | 评论(0) | 转发(0) |