在向内核中添加驱动的时候要完成 3 项工作,包括:
1)在 Kconfig 中添加新代码对应项目的编译条件;
2)将驱动源码添加到对应的目录中;
3)在目录 Makefile 中文件中增加针对新代码的编译条目。

3.1 编译器路径的设置

进入/home/topeet/android4.0/iTop4412_Kernel_3.0,输入make,编译内核生成二进制文件。
使用命令“cd”,使用命令“vim .bashrc”打开环境变量文件“.bashrc”。
进入最底行,可以看到,在环境变量文件中编译器路径设置为

“export PATH=$PATH:/usr/local/arm/arm-2009q3/bin”

cd /usr/local/arm/”,进入解压编译器“arm-2009q3.tar.bz2”的文件目录。看arm-2009q3的路径和环境变量文件中编译器路径是否相同。
进入/home/topeet/android4.0/iTop4412_Kernel_3.0,使用命令 “vim Makefile” 打开内核目录下的 Makefile 文件。
在底行输入“CROSS_COMPILE”,查找参数“/CROSS_COMPILE”。可以看到它的参数值:/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
设置变量“CROSS_COMPILE”、环境变量和编译器实际解压路径三者对应。这三者对应之后,就能确保执行 Make 命令之后,系统能够找到这个编译器。

3.2 “make”编译过程

运行 Makefile 文件 –>在 Makefile 文件中找到编译器的路径 ->找并修改相关的库文件 –> 找到“.config”文件(里面都是宏定义,ls -a) –> makefile 文件

3.2.1 找到编译脚本

进入/home/topeet/android4.0/iTop4412_Kernel_3.0/drivers/char ,通过vim进入Makefile,搜索itop4412_leds找到:
obj-$(CONFIG_LEDS_CTL) += itop4412_leds.o
其中文件CONFIG_LEDS_CTL是编译 itop4412_leds.c 的脚本

3.2.2 Makefile 脚本语法简介

“加等号”左边的“obj-y ”表示要编译,并链接进内核(链接进内核是 linux 源码中自带的工具处理的,驱动工程师完全不用关心具体是怎么实现的)
obj-y += misc.o
打开“drivers/char”上一层目录的 Makefile 文件,找到char,右边由文件变为文件夹了,表示强制编译当前目录“/drivers”的下一级目录“/char”。在执行编译命令执行到这一句的时候,就会先跳转到“/char”目录下的“Makefile”文件:
obj-y += char/

3.3 实验:将itop4412_leds编译进内核

如果有,先将/home/topeet/android4.0/iTop4412_Kernel_3.0/drivers/char/中的itop4412_leds.o删掉。
“make menuconfig“,进入到“Device Drivers —> ”选项,找到选项“Character devices—>” ,找到选项“Enable LEDS config”,将 LEDS 的配置打开。
保存退出后,打开“.config”文件,可以发现“CONFIG_LEDS_CTL”配置了。
执行编译内核的命令“make”。
使用命令“ls drivers/char”查看 LEDS 驱动所在目录,发现产生了中间二进制文件.o。
将生成的文件“zImage”文件下载到开发板会发现,“/dev”目录中产生 LEDS驱动的设备节点“leds”