现在的位置: 首页 > 综合 > 正文

参与开发linux内核需要做的准备工作

2013年08月04日 ⁄ 综合 ⁄ 共 2976字 ⁄ 字号 评论关闭

在觉得自己内功已经很强的前提下想参与到linux内核的开发一共有两个重要的工作要做,如果没有接触过内核源码,本文也可以看看,因为几乎所有的开源代码都遵循本文所提到的这种方式。这两个工作是:
1.用git下载源码树,建立自己的开发分支,修改/添加代码,生成补丁
2.配置一个支持透明纯文本的邮件客户端,用于向maillist发送邮件
第一个工作的配置很简单,主要就是几条命令,但是能否修改代码或者说能否看懂内核取决于多日的修炼。这里仅介绍如何环境的配置和使用。
1.安装git,安装即可,不需要阅读其文档,因为我们不必自己建立工作环境,所有一切都是克隆的。
2.克隆一个开发环境,这是linus的源码树
    git-clone http://www.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git    (有的公司会封掉不常用的端口,因此使用熟知的http是比较合适的)
3.建立一个自己的分支,在master之外建立自己的开发分支my,master作为基准分支,在my分支上所作的修改需要以master为基准生成补丁文件
    git-branch my
4.切换到自己的my分支
    git-checkout my
5.对my分支进行随意的修改,添加新功能等操作,随意的check in/out,不必担心损坏原始文件,不用担心受到别人的影响,因为所有的操作都是本地进行的,别忘了,这是git,而不是svn/cvs
6.插一个问题:难道不需要更新源码吗?我怎样才知道有新的功能加入或者别人修正了bug,而我需要更新(再来一个git-clone?)
    回答:一般是不需要频繁更新的,这不是svn/cvs,这是git。git的所有正式归并动作都由专人并且在专有时间进行,经常浏览maillist和kernel.org获取最新消息,并且一定要熟悉linux内核版本号的意义,然后再根据自己的情况更新,不用git-clone,而是git-pull。git和svn/cvs最大的不同我觉得在于其归并方式,svn/cvs几乎都是公司内部使用的,链路都是局域网或者起码也是VPN,每个用户之间的访问都是对等的,并且人们很容易访问到一个中心服务器,然后都把工作提交到那里,提交即签入(check in),而git就不同了,大家所在地的网络环境均不同,个人之间几乎无法共享信息(比如无法像局域网用户那样轻易共享一个磁盘等等),中心服务器的位置以及管理都是问题,因此git的提交方式使用标准email的方式--maillist,提交并不是签入,签入由专人进行,签入之前需要maillist成员的共同检验。
7.生成补丁。这个补丁生成为一个纯文本文件,然后你自己添加一些说明之后就可以直接向maillist发送email了,我们在maillist上看到的主题为[patch x/y] XXX:...的邮件正文其实就是补丁加入描述后的文本
    git-format-patch master
8.发送email。注意,这个工作可不是简单的,maillist有严格的规定,不光对补丁的质量,就连邮件的格式都有严格规定,因此最好是在linux下发送,要知道,kernel hacker那帮家伙是不用其它系统的,并且他们对linux的感情可能以及到了哲学的高度,如果让他们看到你的邮件中有windows的影子,...。因此下面主要说一下邮件客户端的设置。

第二个工作的配置相对复杂一些,不过如果理解邮件协议的话还是很简单的,而且和第一个工作正好相反,一旦配置好了,以后就可以一劳永逸了,而第一个工作,配置好git和内核源码树仅仅是一个开始。邮件系统简单的说就是两个大模块,一个是发信,另一个是收信,和日常的平信一样,普通电子信件对发送没有什么要求,你可以随意填写一个发送人的邮箱,哪怕就是假的也无所谓,可以随便填写一个收件人的邮箱,存不存在也无所谓(《凡卡》中的凡卡茹科夫给爷爷写信,虽然投递了,但是爷爷永远都不会收到),但是对于收信要求就高了,必须认证通过的才能打开信箱,信息流动从来就是单向的,说什么是没有人管的,但是谁能听却必须严格控制,信息接收者必须确保这个信息是发给自己的。电子邮件系统的这两大模块由smtp和pop协议完成(还有其它的协议,但是这两个是最基本和最简单的),简单说,smtp协议完成信件从发出至到达收件人邮箱的过程,是一个推的过程,而pop协议完成邮件从收件人邮箱到收件人的过程,是一个拉的过程。类比日常平信,几乎都是在写好后直接送到邮局,而收信人却无法保证信件到达的第一时间被通知到,因此几乎每座公寓或者学校都有有邮箱,需要每个人自己决定什么时候打开邮箱查看是否有邮件,有个前提,邮箱基本都是上锁的,你必须有钥匙。
我本人使用的操作系统是linux,邮件客户端自然也就选择mutt了。mail客户端也是可以的,它的配置和使用方式要比mutt简单的多,比如使用mail发信,很简单,mail -v 收件人地址,然后交互输入内容即可
1.建立一个工作目录
    mkdir /root/kernel-hack-mail
    mkdir /root/kernel-hack-mail/mail
    #mkdir /root/kernel-hack-mail/cert #如果需要认证的话
    cd /root/kernel-hack-mail
2.编辑mutt的配置文件
    vi mutt.conf
    其内容中最重要的是两方面的内容,发信和收信:
    发信--委托给邮件传输代理(sendmail/msmtp...)(类似委托给邮局)
    set sendmail="/usr/bin/msmtp"      #指示邮件传输代理程序
    set use_from=yes
    set from=mimiran@gmail.com    #指示发信人地址,当然也可以在msmtp的配置文件中指示
    set envelope_from=yes
    收信--自己从邮箱中取
    set pop_user=mimiran@gmail.com    #自己的邮箱标识
    set pop_pass="123456"        #自己邮箱的钥匙
    set pop_host=pop://X.Y.Z.K    #自己邮箱所在地
3.编辑邮件传输代理msmtp的配置文件
    vi sndmail.conf
    其内容是
    host X.Y.P.Q        #相当于对端的邮局
    port 25            #这个都知道
4.运行mutt吧
    mutt -F mutt.conf
5.按shift-G可以收邮件,按m可以发邮件,很快捷,并且完全基于文本,编辑邮件时使用的是vim,很快捷地可以使用:.!cat命令将文本文件作为邮件正文。反正有很多快捷键,UI上都说明了,下面是一个刚进入mutt后的界面顶部:
q:Quit  d:Del  u:Undel  s:Save  m:Mail  r:Reply  g:Group  ?:Help
按下m键,开始发送吧(个人认为help没有用,自己摸索更好些,再说好的软件根本不需要help)
     最后,git和email的结合,完美地将互联网组织成了一个巨型开发团队

抱歉!评论已关闭.