• 写给想我一样的Linux内核初学者


     

    写给想我一样的Linux内核初学者

    分类: linux 106人阅读 评论(0) 收藏 举报

    本文转自:http://www.zeuux.org/pipermail/zeuux-linux/2008-November/000060.html

    [zeuux-linux] 写给想我一样的Linux内核初学者

    Jianjun Kong kongjianjun在gmail.com 
    星期三 十一月 12 18:53:01 CST 2008


    今天在小组大概讲了一下,自己学习内核的感受,总结了一下贴出来。欢迎任何评议 :) _____________________________________________________ 写给像我一样的Linux内核初学者 --孔建军(Kongove.CN) 2008.11.12 首先,让我们来看几组令人振奋的数据。现在订阅Linux内核邮件列表[1],每天的邮件流 量大概在500份左右;执行"grep "^P:" MAINTAINERS |sort -u|wc -l",对内核子系统维 护者进行统计,得到的结果是534人;从2007到2008年,平均每天有4300行代码添加到内核 ,有1800行代码从内核删除,有1500行代码被修改[2];内核2.6.27发布以后,内核开发者 使用脚本统计内核文件(包括空行、注释),已经超过10,000,000,000行[3]。那么,有多 少人读过内核源代码?又有多少人为内核开发做过贡献? .... 看到这些你或许有尝试一下的冲动,那就从现在开始疯狂的Hacking吧。下面是我自己学习 中的一些感受,只是一些学方法或建议,希望能对你有所帮助。 首先,得有具备一些基础知识,如C语言基础、数据结构、微机原理、网络基本原理、操作 系统、体系结构等,当然这也和你具体研究内容有关。下来就是习惯英语,尽管有很多优 秀的翻译资料供参考,尽管有很多出色的国内程序员活跃于邮件列表,但英语沟通是每个 内核开发人员无法绕过的一个槛。英语里丰富的专业词汇和广泛的使用群体,会成为沟通 的最佳选择。如果你的英语自认为不是很好,那么我或许能给你一些建议。平时经常查阅 man手册、wikipaid[4]等在线文档解决遇到的问题,参与合适的国外邮件列表,参与一些 英文交友社区(如Facebook等),交笔友、IRC频道及时聊天都是不错的方法。这些途径基 本上都是和技术沾边的,当然也有很多其他方法提高英语水平。 内核的学习,先得对整个有一个全面的认识,了解各个核心部分的工作原理。因为Linux内 核的工作是各个部分紧密配合完成的,各子系统之间的逻辑关系比较复杂。这里建议读一 些经典的书,如《Linux内核设计与实现》、《深入理解Linux内核(ULK)》,这样可以少走 弯路。这些书都有中文翻译,如果觉得直接看英文有些吃力,可以先看中文,或者中英文 对照着看。这些书都有好几个版本,针对2.4、2.6内核的都有,可以先看针对2.4版本的, 然后再看针对2.6的。这里不得不提一本清华的教材《Linux操作系统原理与应用》,这本 书非常适合入门,前面提到的ULK虽然涉及知识全面、讲的深入,但对于初学者往往会陷入 知识点的细节当中。这本教材把很多细枝末节省略掉,展现在读者面前的只有各部分的关 键知识块。同时有大量图片说明,搞懂这些图,也就理解了抽象的内部机制。其中每个章 节都附带一个代码实例,通过调试这些程序可以加深对知识的理解,把抽象的东西实例化 。你也可以在这本书作者维护的网站内核之旅[5]中,找到更多的实例代码和相关资料。当 然不排除有更好的入门教材,推荐这本只是我看过比较好的一本。 当你对内核已经有了一个初步的认识以后,你就需要围绕某一部分进行深入学习了。这样 才能有深入的研究,从而做出实用的东西出来。比如网络设备驱动、内存管理、文件系统 、内核调度、中断异常、内核同步等。这里还是得有经典教材的指导,如果你想搞驱动开 发,《Linux设备驱动》是必读的;如果你想深入内核的网络部分,《Linux网络设计与实 现》等等。 在学习内核过程中,源代码是最好的参考资料,你可以从Linux内核官网[6]下载最新的内 核源码,也可以选取交老的版本分块阅读。内核源码的阅读,难就难在整体的一个把握上 ,所以建议大家先选取局部核心数据结构、代码、文件进行分析,如task_struct结构体、 fork.c文件等。在阅读源码的同时,结合一些较小的实例程序练习,从而真正理解源码。 在学习过程中如果遇到问题,最好现查看手头和网上的资料,实在解决不了,可以去邮件 列表(中文内核邮件列表[7])。 如果在学习内核的同时,你想尝试参与真正的Linux内核开发,请继续往下读。首先了解内 核开发的大牛,搞清楚Linus Torvalds, Andrew Morton, David Miller等主要维护者的工 作内容,如果你想作ARM方面的开发,你还得知道Russell King,你可以通过MAINTAINER文 件了解更多子系统的维护者,当然不是全部要了解。其次你得理解内核的命名规则,以及 如何制作和提交补丁。从而熟悉内核开发的现状和流程,更加有效的跟踪Linux内核开发, 同时坚定自己的信心。这样你的工作才能真正进入Linux内核当中。这里推荐一些资料,内 核文档(HOWTO、SubmittingPatches、SubmittingDrivers等,都可以从内核源码 Documentation目录下找到)、WangCong的内核讲座PPT[8]、Linux内核测试指南[9]。 你得学会利用内核Bug的跟踪系统Bugzilla[10]工作,学会使用Git版本控制工具,理解树 的概念。使用Git来跟踪内核的开发,关于Git的使用请阅读Git的帮助手册[11]。Git工具 、邮件列表等的使用,其实质是学会沟通,学会合作,学会高效工作。要时刻记着浪费别 人的时间就是谋财害命! 最后一点,也是最重要的一点,高度认真负责。这是参与开源社区最最关键的一点。 推荐另一篇必读的入门文章[12]。 [1]http://vger.kernel.org/vger-lists.html#linux-kernel [2] http://www.heise-online.co.uk/open/Kernel-Log-More-than-10-million-lines-of-Linux-source-files--/news/111759 [3]http://www.youtube.com/watch?v=L2SED6sewRw [4] http://en.wikipedia.org [5]http://www.kerneltravel.net [6] http://kernel.org [7] http://wiki.zh-kernel.org/ [8]http://xiyoulinux.cn/speechdoc/kernelspeech-wangcong.ppt [9]http://www.cnkernel.org/note/tester.tar.bz2.pdf (注意:是个压缩包,下载后把.pdf后缀去掉) [10]http://bugzilla.kernel.org [11] http://www.kernel.org/pub/software/scm/git/docs/ [12]http://xiyoulinux.cn/wiki/index.php?title=内核入门 -- Jianjun Kong @_@ Happy Hacking Homepage:http://kongove.cn/ Gtalk: kongjianjun在gmail.com

  • 相关阅读:
    shell脚本操作mysql通用脚本
    chfs共享系统搭建
    P6717 [CCO2018] Boring Lectures题解
    vim快捷命令
    第一个pnpm的工程
    js/react方法学习
    赵长鹏:我所遵循的 15 条处事原则
    《Unix&Linux系统编程》第五章学习笔记
    stat命令的实现mysate
    《Unix&Linux系统编程》第三章学习笔记
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124232.html
Copyright © 2020-2023  润新知