慢慢学Linux驱动开发,第十二章,加入内核

// 在Linux内核中增加程序需要完成以下3项工作
1.源代码复制到Linux相应目录下
2.在目录的Kconfig文件中增加新源代码对应项目的编译选项
3.在目录的Makefile文件中增加对新源代码的编译条目


以下以LED驱动为例说明:

1.将led.c源代码复制到内核\drivers\char目录

2.在目录的Kconfig文件中添加LED的编译配置选项

config LED
bool "LED driver"
depends on ARCH_S3C6410
help
LED driver for the samsung s3c6410

上述Kconfig文件意味着只有在ARCH_S3C6410项目被配置的情况下,才会出现LED配置项目,这个项目为布尔型(要么编译入内核,要么不编译,选项为Y或N)菜单上显示的字符串为“LED driver”,help后面的内容为帮助信息。

对内核进行配置是为了得到内核配置文件.config。通过对内核进行配置,可以使未来编译成功的内核增加或减少对一些内核特性的支持。对内核进行配置有多种方法,有基于文本的配置方式也有基于图形的用户界面。下面采用使用比较广泛的make menuconfig方式:

sudo apt-get install libncurses5-dev

sudo make menuconfig

除了布尔型的配置项目外,还存在三态型(tristate)配置选项,它意味着要么编译入内核,要么编译为内核模块,要么不编译,选项为Y、M或N。

在目录的Makefile中关于LED的编译脚本为:

obj-$(CONFIG_LED) += led.o

上述脚本意味着如果LED配置选项被选择为Y或N,即obj-$(CONFIG_LED)等同于obj-y或obj-n。

此时确保内核目录已经make zImage过了,一次即可,在make modules,即可编译模块代码。

编译内核包含两部分的工作,其一是编译内核,即编译配置选项中标记为Y的那部分,这部分内核最终形成bzIamge镜像文件;其二是编译内核模块,即编译配置选项中标记为M的那部分内核,这部分形成以.ko结尾的内核模块目标文件。

上述两部分编译工作可以依次通过make bzImage和make modules完成,也可以通过一条make命令直接完成。编译内核的整个过程比较漫长,因此可以对make加-j参数来提高编译的效率。在make时使用该选项会为编译过程分配n个并发任务,这样可以缩短编译时间。n的取值为cpu个数的二倍。

sudo make -j4

------------------------------------------------------------------------------------------------------------------

作者:庞辉

出处:http://www.cnblogs.com/pang123hui/

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).

原文地址:https://www.cnblogs.com/pang123hui/p/2390801.html