嵌入式Linux内核模块的配置与编译.docx
《嵌入式Linux内核模块的配置与编译.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux内核模块的配置与编译.docx(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式Linux内核模块的配置与编译嵌入式Linux内核模块的配置与编译一、简介随着Linux操作系统在嵌入式领域的快速发展,越来越多的人开场投身到这方面的开发中来。但是,面对庞大的Linux内核源代码,开发者怎样开场本人的开发工作,在完成本人的代码后,该怎样编译测试,以及怎样将本人的代码编译进内核中,所有的这些问题都直接和Linux的驱动的编译以及Linux的内核配置系统相关。内核模块是一些在操作系统内核需要时载入和执行的代码,它们扩展了操作系统内核的功能却不需要重新启动系统,在不需要时能够被操作系统卸载,又节约了系统的资源占用。设备驱动程序模块就是一种内核模块,它们能够用来让操作系统正确识
2、别和使用使用安装在系统上的硬件设备。Linux内核是由分布在全球的Linux喜好者共同开发的,为了方便开发者修改内核,Linux的内核采用了模块化的内核配置系统,进而保证内核扩展的简单与方便。本文通过一个简单的示例,首先介绍了怎样在Linux下编译出一个内核模块,然后介绍了Linux内核中的配置系统,讲述了怎样将一个自定义的模块作为系统源码的一部分编译出新的操作系统,注意,在这里我们介绍的内容均在内核2.6.13.2也是笔者的开发平台的版本上编译运行通过,在2.6.*的版本上基本上是能够通用的。二、单独编译内核模块首先,我们先来写一个最简单的内核模块:#include#include#incl
3、ude#defineDRIVER_VERSIONv1.0#defineDRIVER_AUTHORRF#defineDRIVER_DESCjustfortestMODULE_AUTHOR(DRIVER_AUTHOR);MODULE_DESCRIPTION(DRIVER_DESC);MODULE_LICENSE(GPL);staticintrfmodule_init(void)printk(hello,world:modele_init);return0;staticvoidrfmodule_exit(void)printk(hello,world:modele_exit);module_init
4、(rfmodule_init);module_exit(rfmodule_exit);这个内核模块除了在载入和卸载的时候打印2条信息之外,没有任何其他功能,不过,对于我们这个编译的例子来讲,已经足够了。将上述源代码保存到一个test.c文件中,然后开场我们的内核模块的编译工作。内核模块的编译与普通应用程序的编译一样,也使用的GCC,但是内核模块在用GCC编译的时候时需要使用特定的参数并定义一些宏。这是由于在编译普通应用程序的可执行文件和内核模块时,内核头文件起的作用是不同的。在以往的内核版本需要我们去在Makefile中手动设置这些设定,固然这些Makefile都是按目录分层次存放的,但使用维
5、护起来还是比拟伏在。幸运的是,一种称为kbuild的新方法被引入,如今外部的可加载内核模块的编译的方法已经同内核编译统一起来,编译新的内核模块或者将本人的内核模块集成到内核源码中都已经变得非常简单了。如今让我们看一下怎样编译一个名字叫做test.c的模块。首先,我们需要写一个简单的Makefile文件:obj-m+=test.o将test.c和Makefile文件放在同一个目录下,然后就能够开场编译了,使用编译命令:make-C/usr/src/linux-2.6.13.2/SUBDIRS=$PWDmodules回车后,也许你会发现有一堆的报错,请检查如下配置能否正确:1、在/usr/src/
6、下有无放置你需要使用的内核源码树?假如没有,请上网down一个你需要的内核源码版本,解压后放在这里。2、假如你已经将内核源码解压在/usr/src/下了,那么请先使用在内核源码的主目录下,在笔者的系统中就是/usr/src/linux-2.6.13.2/,使用:makeconfig或者makemenuconfig或者makegconfig等命令来配置内核,然后使用makeall将整个内核完好编译一次。3、上述命令中的linux-2.6.13.2是笔者使用的内核源码的目录名,你需要将它改成你本人使用对应版本的的内核源码的目录名。经过上述三步,一般来将,该内核模块都能够编译通过了,生成的test.
7、ko就是我们需要的内核模块的最终版本,你能够使用:insmod./test.ko将该模块载入系统。请注意:假如想将模块载入系统,请保证编译模块使用的内核源码的版本与要载入的系统的版本一致!否则无法载入!嵌入式开发实作Linux内核编译及安装部分内容译自(EmbeddedLinuxkernelanddriverdevelopment)byMichaelOpdenacker刘建文httpdocsj/doc/d3f6157f5acfa1c7aa00ccbc./keminlauKEY:Linux内核编译内核配置嵌入式内核配置KernelconfigurationMakefile版本修改为了区别基于同一
8、源码构建bulid的不内核镜像,可使用变量EXTRAVERSION定义位于makefile的顶部:VERSION=2PATCHLEVEL=6SUBLEVEL=7EXTRAVERSION=-acme1VERSION=2PATCHLEVEL=6SUBLEVEL=7EXTRAVERSION=-acme1VERSION=2PATCHLEVEL=6SUBLEVEL=7EXTRAVERSION=-acme1运行“uname-r会返回:2.6.7-acme12.内核配置先定义内核需要什么特性,并进行配置。内核构建系统Thekernelbuildsystem远不是简单用来构建整个内核和模块,想了解更多的高级内
9、核构建选项,你能够查看Documentation/kbuild目录内的内核文档。可用的配置命令和方式:makexconfigmakemenuconfigmakeoldconfig或者手动编写内核编译的配置文件.config与内核配置的makefile?内核配置文件Makefile语法的保存为内核源代码的顶层目录的.config文件。发行版的内核配置文件通常在/boot/内。命令:makexconfigqconf:全新的基于QT的配置接口,2.6版本内核更易使用切记阅读help-introduction:usefuloptions!具有文件阅读功能,更易的加载配置文件命令:makemenucon
10、fig老式字符界面,仍然很管用。你够自信,完全能够手写配置文件!命令:makeoldconfig用于升级早期发布内核的配置文件对一些绝对符号obsoletesymbols发出警告询问新符号的配置值何为makefile?makefile包含用以构建应用程序的一组规则集setofrules。并且第一条规则是特殊的规则,叫默认规则defaultrule。一条规则由三部分组成:目的target、前提条件prerequisites和命令动作command:target:prereq1prereq2commandstarget:prereq1prereq2commandstarget:prereq1pre
11、req2commands目的是被构建made的文件或其它东西。前提条件或者叫依靠dependents构建目的的“材料。而命令动作是利用前提条件构建目的的shell命令。下面是编译C源码的规则例子:foo.o:foo.cfoo.hlt;tabgcc-cfoo.cfoo.o:foo.cfoo.hlt;tabgcc-cfoo.cfoo.o:foo.cfoo.hgcc-cfoo.c注意格式,冒号前是目的,后是前提条件;命令在第二行,并且开场于一个tab字符。编译内核编译和安装内核编译步骤:$cd/usr/src/linux2.6$make$cd/usr/src/linux2.6$make$cd/usr
12、/src/linux2.6$make安装步骤(loggedasroot!)$makeinstall$makemodules_install$makeinstall$makemodules_install$makeinstall$makemodules_install下面的步骤在2.6版本不再使用:$makedepends$makemodules(donebymake)$makedepends$makemodules(donebymake)$makedepends$makemodules(donebymake)提升编译速度多花一些时间在内核配置上,并且只编译那些你硬件需要的模块。这样能够把编译时
13、间缩短为原来的1/30,并且节省数百MB的空间。另外,你还能够并行编译多个文件:$make-jmake能够并行执行多个目的targetKEMIN:前提是目的规则间没有穿插依靠项,这个怎么做到的?$make-j4即使是在单处理器的工作站上也会很快,读写文件的时间被节省下来了。多线程让CPU保持繁忙。number大于4不见得有效了,由于上下文切换太多反而降低的工作的速度。make-j内核编译tips查看完好的(gcc,ld)命令行:$makeV=1清理所有的生成文件(tocreatepatches.):$makemrproper部分编译:$makeM=drivers/usb/serial单独模块编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux 内核 模块 配置 编译
限制150内