包你能学会的技术:Linux内核入门集

  这年头,Linux成了一个时髦词。自诩对电脑玩的精通的学生和IT人士们,没有哪个不在自己的电脑上安装一、两个Linux,并自觉赶上了时髦。然而,在UbuntuSUSE的论坛中,经常有这样的对话:

  “你学Linux学了这么久,都学到了什么?”

  “哦,我现在Linux的安装、升级、桌面美化都很熟练!你看我这是最新版的Ubuntu,桌面很漂亮吧!”

  “……”

  Linux社区中有一句名言:如果你进入你的操作系统不知道该做什么,那最好还是关掉电脑,一定有更重要的事等着你去做。说真的,如果对Linux命令不熟练,真的不能算是学过Linux。然而另一方面,Linux内核虽然是一般用户可学可不学的内容,但可以说却是Linux操作系统中最好玩的部分。尤其对于开发者而言,Linux内核开发绝对是最理想的磨练场所。51CTO编辑一直认为,国外之所以IT技术大拿林立,和他们从小接触类UNIX系统、把玩内核开发是脱不了关系的。

  下面是Linux内核开发者Robert Love写的一篇入门文章,号称“包教会”,推荐对Linux内核开发感兴趣的学生、Linux爱好者、开发者以及系统管理员们一定不要错过。当然,虽然标题说是包教会,你可能需要一定的Linux命令以及C语言的基础。

  以下是正文内容:

  Linux内核一直都被视为学习Linux最难的一块,相信大家也一定看过不少关于内核的文章,但扪心自问,你现在究竟掌握了多少?本文将从零开始介绍被视为高深的Linux内核,内容涉及内核源代码的下载,编译,安装,以及内核开发相关的内容。

  如何获取Linux内核源代码

  下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。

  使用Git

  由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。

  你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本:

  $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

  然后使用下面的命令将你的代码树与Linus的代码树最新状态同步:

  $ git pull

  安装内核源代码

  内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行:

  $ tar xvjf linux-x.y.z.tar.bz2

  如果你下载的是gzip包,则运行:

  $ tar xvzf linux-x.y.z.tar.gz

  无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。

  内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。

  应用补丁

  Linux内核开发人员会将自己的修改做成补丁与其它人员分享,而且补丁是增量的,增量补丁是从一个内核树移动到另一个内核树的有效方法,不用下载完整的内核包就可以升级内核,不仅可节省带宽,也节省了内核升级时间,应用补丁之前先进入内核源代码树所在目录,然后运行:

  $ patch –p1 < ../patch-x.y.z

  注意,补丁包也有明确的版本号,这里的版本号与Linux内核源代码的版本号要一致,内核和补丁版本号不一致时,强制应用补丁会引起意想不到的后果。

  内核源代码树介绍

  内核源代码树分为许多目录,它们下面又包含许多子目录,源代码树的顶级目录及其描述参见下表。


目录   描述  
arch   特定架构的源代码  
block   块I/O层  
crypto   加密API  
Documentation   内核源代码文档  
drivers   设备驱动  
firmware   使用某个驱动需要的设备固件  
fs   VFS和独立文件系统  
include   内核头  
init   内核启动和初始化  
ipc   进程间通信  
kernel   核心子系统,如调度器  
lib   助手例行程序  
mm   内存管理子系统和VM  
net   网络子系统  
samples   示例,示范代码  
scripts   用于生成内核的脚本  
security   Linux安全模块  
sound   声音子系统  
usr   早期的用户空间代码(叫做initramfs)  
tools   辅助Linux开发的工具  
virt   虚拟化基础设施  

  在源代码树的根目录下还有很多文件需要说明,COPYING是内核许可描述文件(即GNU GPL v2),CREDITS是参与Linux内核的开发人员名单,MAINTAINERS列出了维护各个子系统和驱动的个人,Makefile是内核Makefile的基础。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/26593.html