Chinaunix

标题: Linux内核精髓:精通Linux内核必会的75个绝技(获奖名单已公布2013-4-7) [打印本页]

作者: send_linux    时间: 2013-03-22 15:10
标题: Linux内核精髓:精通Linux内核必会的75个绝技(获奖名单已公布2013-4-7)
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4075409-1-1.html

经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远。随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大无比,对于Linux内核的研究者和开发者而言,要系统研究Linux内核绝非易事。作为一个内核相关的工作人员,你需要了解和学习Linux内核的资源管理(CPU、内存、进程等)、文件系统、网络、虚拟化、省电、调试、概要分析、追踪、内核调整等核心技术。

但是您在学习中是不是有所总结,或者您有一些经验和大家分享?

本期话题:
1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
3、Linux内核技术版块如何建设,才能够更好地为网友服务?

本期嘉宾:
ChinaUnix内核版版主:godbach
ChinaUnix内核版版主: 瀚海书香

活动时间:2013.3.20-4.10

本期奖品:
积极参与讨论的用户,获赠价值80元的《Linux内核精髓:精通Linux内核必会的75个绝技》的图书一本!共5本

图书简介:

Linux内核精髓:精通Linux内核必会的75个绝技
原书名:Linux Kernel Hacks
作者:(日)高桥浩和  等
译者:杨婷
ISBN:9787111410492
定价:79.00元
页码:424
出版时间:2013-3-1
出版社:机械工业出版社
豆瓣收藏:http://book.douban.com/subject/21332497/

编辑推荐:
囊括日本一线Linux内核技术专家的经验和智慧结晶
深刻解读Linux内核的资源管理、文件系统、虚拟化、调试、分析与追踪等核心主题

内容简介:
经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远。随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大无比,对于Linux内核的研究者和开发者而言,要系统研究Linux内核绝非易事。鉴于此,本书选取了Linux内核的资源管理(CPU、内存、进程等)、文件系统、网络、虚拟化、省电、调试、概要分析、追踪、内核调整等核心主题进行了深入剖析和讲解,总结出了75个能使读者深刻理解Linux内核精髓的技巧和最佳实践。

阅读本书更多内容,请下载样章
《Linux内核精髓:精通Linux内核必会的75个绝技》迷你书.pdf (4.78 MB, 下载次数: 41491)
作者: chenyx    时间: 2013-03-22 15:31
沙发,友情帮顶下.
没做过内核相关的开发,只是做LFS和gentoo的时候,编译过内核.
个人感觉,内核裁剪,是个很费精力的活,Linux内核编译的选项太多,很繁杂,稍有错误,很可能就造成内核启动不起来.
作者: sdanan    时间: 2013-03-22 15:33
新手,探索中,下来看看
作者: send_linux    时间: 2013-03-22 15:36
sdanan 发表于 2013-03-22 15:33
新手,探索中,下来看看


看过之后,也请分享一下心得啊
作者: ckf513728912    时间: 2013-03-22 16:54
谢谢分享  顶一个
作者: wenhq    时间: 2013-03-22 17:36
看过样章的感觉就是需要夯实的基础才成,要有一定的系统知识。希望谁能读到或者有读后感的share一下经验。
作者: dooros    时间: 2013-03-22 17:45
研究过一段时间内核,头发是刷刷的掉啊!!!
作者: amarant    时间: 2013-03-22 19:38
花了一个小时看了下附件,这本书还是挺实在的
作者: ecjtubaowp    时间: 2013-03-22 20:02
曾经也是编译过内核。
作者: bear100102    时间: 2013-03-22 20:11
谢谢楼主分享
作者: superwiles    时间: 2013-03-22 20:24
本帖最后由 superwiles 于 2013-03-22 20:27 编辑

1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
        linux 内核非常庞大,谈不上那部分最难, 涉及的东西非常多,基本上操作系统相关的东西全有,
        核心部分有  内存管理,进程管理,中断处理,  其中内存管理非常复杂而且和很多其它功能紧耦合
        其次文件系统(也是很大一块),网络(很大一块),虚拟化(比较难理解,尤其和内存管理纠缠在一起),电源管理, 总线框架, 驱动基础设施
        外围模块就多了  crypto(需要了解常见的密码学算法),各类驱动,各类附加的安全模块 xfrm,selinux, 等等
      

2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
         非常庞大,变化极快 不可能覆盖所有的子系统, 吾生也有涯。  
         不过也有最基本的事情 要了解所学习的cpu的开发手册,要了解基本的os概念,
         其次专注于一个子系统,搞网络的就要熟悉各类协议,搞安全的当然要熟悉各类算法,搞驱动要熟悉相关api 和设备类型 等等

   
3、Linux内核技术版块如何建设,才能够更好地为网友服务?

          A。答疑解惑 功能肯定是第一
          B。 可以设计一个linux 内核学习路线图, 帮助初学者 快速入门,少走弯路


BTW:这书貌似不是讲内核,更多是如何 turning kernel

      
作者: ulovko    时间: 2013-03-22 20:50
1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
3、Linux内核技术版块如何建设,才能够更好地为网友服务?


编译过Linux内核,调整过一些参数,无非是 添加功能的支持和 修剪内核大小, 对于调优方面没什么经验 ^_^
的确是一本好书!
作者: Godbach    时间: 2013-03-22 23:05
回复 1# send_linux
好活动。欢迎大家多多参与。

这本书够新的啊,2013 年出版的。


   
作者: lgkai2008    时间: 2013-03-22 23:18
借此学习学习内核^_^
作者: Godbach    时间: 2013-03-22 23:25
本帖最后由 Godbach 于 2013-03-22 23:43 编辑

回复 11# superwiles
BTW:这书貌似不是讲内核,更多是如何 turning kernel

是的。看了一下样章,这本书不是系统的将内核知识点或者内核开发的。而是介绍内核开发中的一些经验及关联的知识点。

因此,更适合已经做过一些内核开发的看。这样可以在某些方面给你一些答疑。
作者: 古丁高手    时间: 2013-03-23 03:34
呵呵那 Linus Torvalds依然是披头四的发型!回复 7# dooros


   
作者: zqh1630    时间: 2013-03-23 09:12
谢谢分享!!!
作者: amarant    时间: 2013-03-23 09:22
本帖最后由 amarant 于 2013-03-24 22:13 编辑

捧场
作者: jieforest    时间: 2013-03-23 09:48
本帖最后由 jieforest 于 2013-03-24 22:56 编辑

关注........

——————————————————
1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
Linux内核自从发展到2.6版本之后,内核的各个模块就已经非常成熟了。像
1)内存管理模块,所涉及的算法并没有新的突破,所以基本上仍然保持原样,以稳定为主。
2)进程管理模块,所涉及的算法并没有新的突破,所以基本上仍然保持原样,以稳定为主。
而对于
3)设备驱动模块,由于新设备在不断地研发并投入市场,比如支持新的CPU、新的GPU等,设备驱动模块一直是更新较大的模块。
4)网络模块,新的网络技术发展迅猛,WIFI、3G、4G LTE、蓝牙2.0/3.0/4.0、ZigBee等新技术的发明,使得网络模块也随之发展,并提供支持。
5)文件系统模块,此模块的变化虽然没有那么大,但是从ext2到ext3,再到ext4,以及最新的Btrfs文件系统,文件系统的性能也是一直在进步。
6)新功能模块,这里实际上是几个模块。比如内核虚拟化,内核虚拟机KVM逐渐发展成内核的一部分,实现了从内核级就支持虚拟化技术。设备管理模块中的省电功能等。

对我来说,我觉得最难的部分是内核虚拟机KVM,因为这部分是我所不熟悉的。还有最新的省电功能,到底内核是怎样实现的,我也想弄清楚。

2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?

Linux内核的开发已经是一个庞大的系统工程,数千程序员在为之开发、维护。对于个人开发者而言,要全部弄清楚是不可能的,即使是其中的一个模块,没有半年的研究分析,也难以理清脉络。所以,我觉得对Linux内核的学习,要以点为主,专注于你感兴趣的点,然后展开行动。

3、Linux内核技术版块如何建设,才能够更好地为网友服务?
研究Linux内核的人实际上并不多,而使用Linux内核的人却很多,很多人在做Linux内核的裁剪,Linux内核的移植和调试等,对Linux内核的裁剪和移植这两个方向,希望能有高手主持或支持,那么Linux内核技术版块才会有凝聚力。
作者: cliffordl    时间: 2013-03-23 10:01
顶一下,正在搞内核。希望多发一些,编译内核方面的资料。谢谢
作者: morris2600    时间: 2013-03-23 11:14
日本也有linux内核高手? 传统概念上高手似乎都在美国和欧洲。

另外,个人感觉最困难的地方在于多核调度、内存管理和文件系统, 有太多的细节和小技巧, 需要慢慢品味
作者: craftor    时间: 2013-03-23 11:55
最近两个月在编写Linux平台下的PCI Express数据卡的驱动,翻阅了好多书籍和资料,有点心得,写一下。

1、多看内核源代码和文档(Document/ 和include/linux),尤其要注意不同内核版本之间的差异。
之前找到的驱动是2.6的,后来要移植到最新的Ubuntu Server上,内核是3.2的,pci_dev的数据结构就有了变动,翻阅了两个版本的内核源代码,比较了才知道。
还有就是Document下的xxx-HOWTO.txt之类的文档,一定要认真看,逻辑讲的非常清楚。
附送一个内核源代码查找的网址:http://lxr.free-electrons.com/ident?i=
2、基本功要扎实
内核里的基本知识:时间、锁、中断等一定要理解透彻,参照Document下的文档。
3、内存操作要小心
绝大多数情况下导致内核Oops的原因就是内存操作不当,什么时候申请、申请的大小、申请的类型,是否成功,什么时候释放,一定要非常清楚。挖了多少坑,就要填好多少坑。

参考的书籍:
LDD3《Linux Device Driver 3》
LKD《Linux Kernel Development》

作者: txawplh    时间: 2013-03-23 14:37
      本人也是刚刚开始学习内核,最近再看内存管理的内容,感觉比较复杂的不是代码的主线,而是很多不同的东西相互绞在一起,比如内存分配,要考虑很多细节的东西,NUMA,cgroups等等。看代码实在是看的头大,想要看懂每一行代码完全不可能,只能给这些非主线的东东写一个简单的注释,标明与那部分相关,等以后研究相关内容时再去搞清楚。
作者: Godbach    时间: 2013-03-24 00:46
回复 23# craftor

经验之谈,很好的分享。赞一个。


   
作者: asnue2004    时间: 2013-03-24 14:56
回复 1# send_linux


   谢谢楼主
作者: frogoscar    时间: 2013-03-24 15:31
这个好诶,linux很喜欢,也曾经看过一些linux内核,不过后来工作了,没什么时间看了,必须重拾啊
作者: Jean_Leo    时间: 2013-03-24 16:14
我来谈谈我的拙见吧。其实我对linux内核理解程度谈不上很深,而且一直都在摸索中前进,走过了不少弯路,如果要是说得不对,请多多包涵。我就围绕着本期话题来谈吧,免得跑题了。
问题1:说说您内核的学习经验?Linux内核中最难的部分是哪里?
先是谈学习经验吧,我个人有点喜欢钻牛角尖,好也不好,但是对于内核的学习有时候也略有帮助。我一开始不知道什么是计算机,CPU是干什么活的?怎么干活?然后多核之间是怎么能够完美地相互协调工作等等。然后我就google了一通,也阅读了不少有用的和没用的书,耗了不少时间去认识计算机。废话不多说,我大概总结一下在什么学习阶段都有哪些书比较值得推荐的,可以让后来人避免走一些弯路。
菜鸟阶段:《鸟哥的linux私房菜》,首推鸟哥私房菜,真心是我的启蒙老师,让我懂得了如何操作linux,而不是仅仅只会把linux弄成一个影音播放或者很炫的系统。
初级阶段:看完了鸟哥,然后得懂点C语言,我偏爱《C和指针》,另外《C专家编程》等书都是非常不错的;接着再往进一步,可以看一下《Unix环境高级编程》和《Unix网络编程》等书,至少先懂点编程,然后自己随便折腾点什么小程序,都是非常有益于技能提高什么和认识系统的的。
入门阶段:再往深入一点,个人推荐《计算机组成与设计——软硬件接口》,这本书让我懂得了什么是CPU,虽然里面讲的是MIPS,但是理论和知识是通用的。另外就是《深入理解计算机系统》,真心是典藏级别的书,好到没话可说。如果喜欢钻牛角尖的话,可以看一下:《计算机系统要素:从零开始构建现代计算机》和《编码:隐匿在计算机软硬件背后的语言》,这两本书都是非常有趣的书,前者适用于学习,并且还有练习可做,后者嘛可以当故事来看,看完后者,你基本上知道CPU的物理层面是怎么实现的了。如果你都把刚刚提到的入门阶段的知识收入囊中了。按照我的感觉,可以算是入门了,然后接下来的就看看个人喜好了,喜好ARM平台,可以看看ARM手册什么的,Intel平台,那没的说了,Intel X86的那几卷电子书可以看了,MIPS平台可以到MIPS官网下手册来看看。
正题阶段:前面三个阶段都走过了,我感觉可以算是小牛了,不过我不是,原因是我推荐的那些书我没认真看完,很多都是跳着看。跳着看也是没有办法的办法了,都说过了,摸索阶段常用google,然后乱七八糟的材料都看了不少,有些东西是通用的,然后就节省时间跳过了不少章节的阅读,同时也肯定错过了不少精华部分,所以我必然不是小牛。算了,不瞎掰了,转入正题吧。其实有了前面的积累,linux内核的东西或多或少算是懂了不少了。俗话说linux有五大块:调度、内存、文件系统、网络和设备。我当初选择的是调度开始入手,最初了解的是linux的异常处理,这除了个人因工作涉及外,更主要的是入门阶段里面学到的CPU知识可以在这里用上了,正所谓活学活用嘛。学习调度,大概的知识点有:系统调度、上下文、异常处理、信号以及CFS调度算法等等。我学习调度模块大部分看的都是一些材料,然后自己找一下相关代码入口和流程调用栈什么的,linux内核是高度精简的代码,真心要找到一些代码入口什么的,确实得费点功夫,或者是我笨的缘故,花了不少时间。找到代码入口和流程调用栈什么的,剩下的就交给代码了,它是最好的材料。这个阶段我也看了不少书,比如《linux内核情景分析》、《linux内核的设计与实现》等,这阶段可以看的好书不少,不一一推荐了。目前我个人在深入学习linux内核的内存模块,改天开个博客写点博文,大伙多捧场哈。
好了,学习经验,就上面这点,哪位大牛有更好的经验,希望给小弟我指点一下。多谢多谢啦~
至于linux内核中最难的部分,个人感觉莫过于看代码,尤其是linux不同版本的代码,然后由于更新,代码入口的变更(比如通过宏实现),确实费了九牛二虎之力才找到某些函数接口调用的函数具体的实现位置,然后linux用到的宏特别多,看代码挺考验语法知识的。再者就是内核实现了,这个我感觉可以上升为哲学的层面了,很多的实现原理什么的,让我看到了不少哲学思想。
问题2:通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
对linux内核的整体感受嘛,其实我还谈不上有什么感受,只是刚入门的菜鸟一名。非得谈感受的话,那就是我在linux内核里,看到了哲学,什么是和谐(非国家提倡的和谐),如何实现资源利用的最大化;再者就是编程的艺术,如何使得代码更简洁优化,如何做到良好代码的可移植性,可兼容性。
问题3:Linux内核技术版块如何建设,才能够更好地为网友服务?
近期工作有点小忙,没仔细考虑过这么一个问题。那就谈谈个人愚见吧。个人感觉,可以考虑定期开展针对内核某个指定模块的学习讨论,包括学习方法、经验介绍、问题讨论什么的,然后让讨论活动持续个把月,这样可以引来诸多大牛的发表他们的经验和高见,同时持续个把月的时间也够长了,肯定也会吸引新鲜血液的加入,一来一去的,肯定可以为linux内核模块增添不少精华帖,那可是宝贵的资源啊!不仅仅后来者可以学习,而且也方便部分入门的菜鸟们根据大牛的经验,更好更快地入门掌握linux内核。
作者: ddd010    时间: 2013-03-24 16:54
本帖最后由 ddd010 于 2013-03-25 14:52 编辑

1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
我没有完整的研究过kernel的某一个模块,都是工作需要时才去看对应的功能。对于经验,我想说,其实很多知识别人都研究过,只要我们善用搜索,很多东西都能找到。
那部分最难么:进程管理吧(我接触过的)。

2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
整体架构非常牛xx(请原谅我的词穷),我作为一个门外汉都能比较清晰的感受到其结构清晰。
要说感受啊,待我进一步学习后在说吧,现在说不出。。
3、Linux内核技术版块如何建设,才能够更好地为网友服务?
内核板块貌似人气比较淡。怎么说呢,现在内核开发交流的主要地方都已经确定,大家碰到问题也已经习惯性的去哪些地方找了。
如果是建议呢,我建议可以多举办点内核开发相关的活动。就我认为内核开发门槛本就高,人气不很旺也算正常吧。
作者: chishanmingshen    时间: 2013-03-24 21:12
本帖最后由 chishanmingshen 于 2013-03-24 21:21 编辑

1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
学什么都得有一个点切入进去,内核也一样,这就是我的经验。个人认为从网络部分入手比较合适,简单并且容易实践。最难的部分,我觉得是跟硬件相关的部分,比如x86相关、pcie相关等部分。
2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
整体感觉就是一座金矿,又大又深。很多资料或研究停留在代码级别的分析上,没有架构层次的分析。
3、Linux内核技术版块如何建设,才能够更好地为网友服务?
版块的讨论还不够热烈,这个还得靠更多更好的技术分享和更高层次的技术讨论。希望我以后能为本版做出贡献!


内核入魔中的人飘过。。。
作者: jieforest    时间: 2013-03-24 22:58
对于入魔的人,那么肯定离不开这里: https://www.kernel.org/

作者: to407    时间: 2013-03-24 23:04
1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
看代码看代码,结合书本和项目看代码。
Linuxkernel最难的我觉得是内存分配,但换个角度,最难的部分我觉得是版本比学习进度更快,跟不上来。。。
我比较建议搭着书看,最近的professional linux kernel architecture不错,当然这也只是对于早期2.6内核而言的,与其跟不上版本变化的脚步,还不如把2.6好好看看。
而且从我自己的经验教训来看,读好linux内核,还是要很好的C语言和操作系统功底,当看着不同的数据结构和函数指针还在困惑的时候,先回去把基本功打好吧,写写helloworld再回来。

2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
整体上看,真的是太庞大了,但现在觉得一个困惑就是碎片化趋势很严重。
表面上看目前内核还是有比较统一的管理方向,但是内核代码量增长似乎以一种很难控制的速度停不下来,我觉得就像是一个杂烩。
而且现在还有一个感受,就是有些人会觉得传统类UNIX就是比较守旧,而Linux要注重创新,我以为Linux本身的创新还是要有比较明确的可控性,虽然UNIX已经40岁了,但Linux同样已经20岁了,不必要像爆发户一样不停地往里面塞新特性,这对于稳定性能没什么好处。
架构方面,比如process schedule 我就比较头疼,因为特别是2.4到2.6进程调度改进了很多,也就有了一个问题,我们的程序在运行的时候不同的内核性能就差别大,也很难向客户解释这是kernel的问题而不是我们代码的问题。
当然也有一些万变不离其宗的事情,所以像linux 0.12那种版本也值得读,无需看得太细,可以看到大框架,然后具体到内存分配,或者中断处理这些,再读新版本的代码也是不错的选择,至少思路不会摸不着方向。

3、Linux内核技术版块如何建设,才能够更好地为网友服务?
我觉得可以多一些归档,因为帖子很多都是碎片,但挑到比较有意思的可以归类起来供查阅。 平时工作比较忙,所以我比较喜欢订一些邮件列表,然后挑喜欢的主题去翻翻。
目前来看,论坛本身有实时性,但像stackoverflow为代表的QA网站风头正紧,倒不如不比特性,扎扎实实整理好版面,多整理点精华出来,相信还是可以吸引不少人常驻的,留得住人就有好发展。

4. 从这本书来看,似乎亮点不算多.我之前读过<Debug hacks>,相似的主题,看过目录没看到内容,不知道会写得多么细致,但这个系列的,我觉得更喜欢像<Linux server hacks> 写得面广一点,然后点到为止,这个系列能让人发现新的以前没注意的细节,我就觉得很不错了。
另外要说的是翻译,比如前一本<Debug hacks>,朋友们都说看英文版不如看中文版,看中文版不如看日文原版。我也有这样的吐槽,快进 看了下样章,翻译还是要用心一点。

随便找了点例子,我觉得可以译得更恰当些,长句攺短句,符合书面行文语法,统一译法,看着再简单的事,也要花很多心思。 
题外话,我就很喜欢 余晟 译的那本RegularExpression的书,读过一遍,会发现是纸面上很平顺的文字,就像是平地一样,偶尔碰到一点障碍物,那多半是知识难点,而不是译者额外添加的脑筋急转弯。



P13
"基于窗口(图形界面)的设置工具通过下列命令来启动。"
P14
"这时如果没有启动的内核,系统就无法进行操作"
P15
"按照前面介绍的安装方法安装的内核不在发布版源码包管理系统的管理范围内"
...
...
P110底
"本章介绍了使用sysfs的ext4调整。"
P111
"本节介绍使用fio进行模拟各种情况的I/O基准测试的操作方法"

对事不对人,随便吐槽。

作者: huohua1991    时间: 2013-03-24 23:26
正在入门中......................
作者: meiyuhan    时间: 2013-03-25 08:14
牛牛牛牛呀
作者: 蛇窝里的老鼠    时间: 2013-03-25 10:26
准备研究中,谢谢楼主分享
作者: waker    时间: 2013-03-25 10:31
单看这个定价就不专业啊,弄个75块钱,一块钱一个绝技多好算啊,差4块钱会死啊
作者: crazyhadoop    时间: 2013-03-25 10:37
回复 1# send_linux


1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
        linux 内核非常复杂庞大,是学习计算机系统的绝佳案例,代码严谨,结构优美。
        私以为,最难也是最核心部分的是, 内存管理,进程管理,中断处理,网络相关。最底层的,设计汇编,需要扎实的计算机基础知识。
                另外用了很多优化技巧,所以对C语言和数据结构要求也很高。另外要是做互联网高并发网络开发,对网络的部分不能不深入研究一下。   

2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
         Linux内核结构庞大,但不失条理,每个感兴趣的同学可以抓住自己想学习和研究的部分深入下去就好,例如内存管理,进程和网络相关的部分。
                 建议搞互联网的不能错过内存管理,进程管理,网络,文件系统相关的部分。另外,深知这些原理,对系统故障排除和性能调优有极大的帮助。

   
3、Linux内核技术版块如何建设,才能够更好地为网友服务?

          1)开专题吧,分享下大家在实践当中遇到的问题和解决方案
          2)版主多组织点话题呗,这样也有中心去思考和进步。
          3)分享点内核代码的赏析?这样如何?

作者: qinyiwang    时间: 2013-03-25 10:49
好高深的,老师们都说linux内核研究好几年都没能深入研究完
作者: 方兆国    时间: 2013-03-25 12:46
看了一下文章,感觉编译内核没有以前想象的那么难
作者: liuweni    时间: 2013-03-25 14:07
刚开始会一窍不通,这个时候需要看一些相关书籍,比如说LINUX内核设计与实现、 understanding the linux kernel 之类的书。

有一定背景基础了,就可以初略的看一些架构的代码了

当主要架构的代码看完了,就可以选择自己喜欢的或者是工作相关的代码来精读了。
作者: 风箫夜吟    时间: 2013-03-25 16:35
一直就像抽个时间深入的研究一下linux内核的实现机制,一来现行版本的内核过于庞大难于下手,二来心里很忐忑对于自己能力有所怀疑,三来现行的介绍linux的内核的书籍个人感觉不是很适合自己,所以就一直拖呀拖,颇为苦恼,看到斑竹此帖,果断过来顶一下!!!
作者: jianjian163    时间: 2013-03-25 17:31
新手,还在学触摸屏。。打算等熟悉编写软件后再去看内核
作者: send_linux    时间: 2013-03-25 17:32
jianjian163 发表于 2013-03-25 17:31
新手,还在学触摸屏。。打算等熟悉编写软件后再去看内核


学触摸屏,这个是啥呢?
作者: conceptcon    时间: 2013-03-25 17:41
这书太贵了。。。。。。。。。。
作者: Hongqiyaodao    时间: 2013-03-25 17:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: litdong    时间: 2013-03-25 18:04
不错..........
作者: xike2002    时间: 2013-03-25 20:36
1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
答:最初开始接触内核是从2.6.18内核开始的,一开始使用的redhat5.5,主要是做linux下的开发工作,涉及到内核的东西比较少,后来由于工作的需要,开始使用CentOS 5.5 ,慢慢的对于内核有了进一步的研究,最开始的时候对于内核的编译过程觉得好复杂,还有涉及到驱动的编译就更加复杂了,因为编译驱动,需要先编译内核,所以如果内核编译不过的话,是无法编译驱动的。编译前当然要配置一下内核啊,make menuconfig ,生成默认配置文件.config ,这个文件是设置cpu 体系,及很多驱动选项的,你没配置这个,怎么可能编译呢。新下载的内核都是没有默认.config 需要你找到一个默认的config 文件,比如 arch/arm/configs/下是 arm cpu 很多的默认配置,当然你也可以把你以前的 config 文件拷贝到新内核目录下。
.config 是配置编译内核的最初步骤,你要编译驱动程序,就必须要了解这个,多上网查下资料,然后重新编译。
配置内核是非常关键的一个步骤:
配置内核的方法很多,主要有如下几种:

#make menuconfig  //基于ncurse库编制的图形工具界面

#make config  //基于文本命令行工具,不推荐使用

#make xconfig  //基于X11图形工具界面

#make gconfig  //基于gtk+的图形工具界面

由于对Linux还处在初学阶段,所以选择了简单的配置内核方法,即make menuconfig。在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。

对每一个配置选项,用户有三种选择,它们分别代表的含义如下:

<*>或
  • ——将该功能编译进内核

    []——不将该功能编译进内核

    [M]——将该功能编译成可以在需要时动态插入到内核中的代码

    在make menuconfig后,把ext2和ext3文件系统编译进内核。如果用户是在虚拟机下编译的,那么一般要把SCSI设备编译进内核。不是在虚拟机下编译的也可以把它编译进去,不会有什么影响的。

    内核的编译过程是很长时间的,大概需要好几个小时,我们需要耐心的等待结果。

    2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
    答:通过内核的学习,我发现内核的学习是一个日积月累的过程,而且需要更多的人一起讨论和改进。其实现在有很多好的社区为我们提供了这样一个环境。做内核开发的同仁们还是需要多参加一些社区的讨论,这样才能集思广益。
      Linux最大的一个优势就是它有一个紧密团结了众多使用者和开发者的社区,它的目标就是提供尽善尽美的内核。内核社区的中心是内核邮件列表(Linux Kernel Mailing List,LKML),我们可以在http://vger.kernel.org/vger-lists.html#linux-kernel上面看到订阅这个邮件列表的细节。
      内核邮件列表的流量很大,每天都有几百条消息,这里是大牛们的战场,小牛们的天堂,任何一个内核开发者都可以从中受益非浅。除了LKML,大多数子系统也有自己独立的邮件列表来协调各自的开发工作,比如USB子系统的邮件列表可以在http://www.linux-usb.org/mailing.html 上面订阅。
      除了内核邮件列表,还有很多其他的论坛或网站值得我们经常关注。我们要知道,网络上不仅有兽兽和凤姐,也不仅有犀利哥和韩局长。http://www.kernel.org/ 可以通过这个网站上下载内核的源代码和补丁、跟踪内核bug等。http://kerneltrap.org Linux和BSD内核的技术新闻。如果没时间跟踪LKML,那么经常浏览kerneltrap是个好主意。http://lwn.net/ Linux weekly news,创建于1997年底的一个Linux新闻站点。http://zh-kernel.org/mailman/listinfo/linux-kernel 这是内核开发的中文邮件列表,里面活跃着很多内核开发领域的华人,比如Herbert  Xu,、Mingming Cao、Bryan Wu等。

    3、Linux内核技术版块如何建设,才能够更好地为网友服务?
    答:首先做linux内核开发工作是一件相对比较枯燥的事情,但是对于热爱这个行业的人来说,是在享受其中的乐趣。所以当务之急就是要先调动起来广大内核学习的热情和积极性,让他们积极的参与到社区的讨论工作中来,有了这么一群爱好者之后,接着就是需要有一群内核方面的专家在这里为大家解答内核学习和工作中遇到的各种问题,让大家一旦遇到内核方面的问题,首先想到的就是CU,而不是别的社区。这样一来社区就会越办越好的。
    作者: timhuang_2008    时间: 2013-03-25 22:01
    正在研究linux内核的内存管理, 求同道人一起交流。 加QQ846734974一起讨论交流
    作者: image_z    时间: 2013-03-25 22:15
    to407 发表于 2013-03-24 23:04
    1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
    看代码看代码,结合书本和项目看代码。
    Linuxk ...
    架构方面,比如process schedule 我就比较头疼,因为特别是2.4到2.6进程调度改进了很多,也就有了一个问题,我们的程序在运行的时候不同的内核性能就差别大,也很难向客户解释这是kernel的问题而不是我们代码的问题。

    ==================================================
    能简单介绍下大概的情况吗,很想知道:调度算法的改变对性能的影响有多大多明显。THX
    作者: jieforest    时间: 2013-03-25 23:05
    树莓派是很好的硬件平台,可以在树莓派上通过安装、测试、裁剪Linux系统,从而达到学习Linux内核的目的。
    作者: wsgod2000    时间: 2013-03-26 09:17
    感谢分享

    作者: goter    时间: 2013-03-26 10:21
    waker 发表于 2013-03-25 10:31
    单看这个定价就不专业啊,弄个75块钱,一块钱一个绝技多好算啊,差4块钱会死啊


    给系统管理员看的书,精通使用Linux内核
    作者: fengjihu    时间: 2013-03-26 10:26
    话说书真的不错,就是有点看不懂,还得继续研究啊。
    作者: antivain    时间: 2013-03-26 10:49
    怎么样章的下载链接和帖子是相互引用的啊怎么下载样章?
    作者: qizhou1987    时间: 2013-03-26 11:07
    感谢分享,新手学习中
    作者: chishanmingshen    时间: 2013-03-26 11:26
    本帖最后由 chishanmingshen 于 2013-03-26 22:12 编辑

    接我上次的30楼回帖,对该版的建议补充如下:

    1)问题和分享隔离开,等解决后由版主有条理地导入到分享中。

    2)对提问的问题要加以引导,不能问一些baidu一下就能解决的问题。否则,可以删帖。

    3)精华帖的内容部分已经很过时了,需要按照新版本至少是3.x的内核版本重新update一下。搞不明白精华里那么多关于编译的。。。

    4)对帖子设置“赞”按钮,这样可以避免过多的灌水和跟帖。

    5)实行拿来主义,更多地引入其它元素。比如弄个lwn专栏跟踪。

    6)现在的子版还是分得太泛。不能直接就是驱动,应该接着分usb,pci。

    7)和博客功能的融合。现在的论坛和博客是隔离的,如果能拉近距离,或许更好拉近彼此距离。

    对内核入魔的人再次飘过~~~



    作者: hanlengsanyue    时间: 2013-03-26 12:09
    路过,沙发一下
    作者: kuang110    时间: 2013-03-26 14:03
    作为一个初学者,说说我对内核学习的一些想法哈,说得不对还请大牛们指点。

    1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
    开始学内核是因为好奇,想知道操作系统底层是怎么实现的。
    初学感觉好难,直接看内核源代码,我勒个去代码量太大了,不了解源码框架的情况下直接看简直就是盲人摸象。
    于是,很多地方都看不懂,于是请教有经验的前辈,得知最好先有linux系统编程基础,在开始学习linux驱动开发,最后再来搞内核研究,这样会好过一些。
    前两步可以找到很多书籍资料,难度一般,只要坚持每天看一点(主要是白天要上班,一般晚上看一点)还是可以学会的。
    当然学习的过程中最最重要的就是实践,光看书不敲代码是不行的,看过的东西多了就会混乱,只有将每个章节的样例代码敲一边,编译、运行一下啊才会理解深刻,当然还能学会很多调试技巧。
    有了前两部分的基础,在开始内核就好多了,不过内核的代码量还是太大了,想全看完真是要很多很多时间的,还要很坚持很坚持的。但是个人觉得没有必要将所有代码都阅读一遍(虽然我很希望能全看完)。在了解了源码框架的情况下有针对性的阅读会很效果,比如你关注的是文件系统、网络、内存管理等等,那就找到相应的文件夹阅读相应的代码,这样会很有针对性。

    最难的部分嘛,我是觉得哪部分都不简单,最近在学习进程、线程部分,各种链表就弄得有点头晕了。框架弄清楚后,研究具体细节时感觉都很难。也许我的功力还不够吧。

    2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
    由于是初学者啦,也没研究过别的操作系统的框架,研究得不够深入也不敢乱评价,感觉linux的框架还是挺清晰的。当然对大的感受就是内核的开源给了广大爱好者难得的学习机会,也希望其他操作系统厂商能开放一些。

    3、Linux内核技术版块如何建设,才能够更好地为网友服务?
    按照内核源码框架,分子板块进行细化。因为对初学者来说,生啃代码是件很痛苦的事情,希望能有更多大牛能分享下入门经验和研究过程中的小技巧,这样初学者会少走很多弯路,不至于一上来就被吓到,呵呵。
    作者: yuankangjian    时间: 2013-03-27 08:33
    1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
    2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
    3、Linux内核技术版块如何建设,才能够更好地为网友服务?
    1.linux学习的最主要的经验就是耐得住寂寞。最难得对我来讲可能就是驱动的开发。
    2.linux给人的感觉就是结构非常清晰。
    3.弄个大牛答疑模块,来的人自然多了。
    作者: zhanglong71    时间: 2013-03-27 12:05
    顶一下。有时候要写个什么驱动的,用得上!
    作者: grade008    时间: 2013-03-27 15:02
    嗯,从事linux内核相关工作10多年了,现在自己动手越来越少,感觉已经跟不上了,内核更新实在太快了!
    作者: oak0901    时间: 2013-03-27 16:27
    看看,泛泛而谈的书太多了!所以我们的头发才会刷刷掉呀!
    作者: cengku    时间: 2013-03-27 16:47
    粗略看了一遍,余下的章节看的日文版的,稍微发表下个人见解:
    1.这本书将的其实大部分内容是如何使用内核的特性,跟标题《Linux内核精髓:精通Linux内核必会的75个绝技》相距甚远,跟《linux内核设计与实现》《深入Linux内核架构》这等专门讲解内核的书籍没法比的,所有适合follow内核新技术的人,而不是内核开发者。
    2.日本人的书(特指计算机方面的)注重实用性,而不太专注于具体的技术实现和细节,这个可能跟日本人专注的职业素养有关系;
    3.书中的内容跟debug hacks有重叠的地方,perf,systemtap...
    4.按照豆瓣的评分的话,我给7分
    作者: wonghoifung    时间: 2013-03-28 14:26
    1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
    学过网络部分,最难在于入门。。。

    2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
    没对比啊,只看过linux的

    3、Linux内核技术版块如何建设,才能够更好地为网友服务?
    视频教程
    作者: hezhuzhumail    时间: 2013-03-28 16:31
    多谢楼主,学习中。。。。。
    作者: weishigoname    时间: 2013-03-28 16:44
    kan kan
    作者: 时间看来    时间: 2013-03-28 16:57
    回复 11# superwiles

    谢谢分享!
    LDD就看得我头晕,APUE浏览了也模糊了。
    看来还需要多动手,多接触。
       
    作者: 时间看来    时间: 2013-03-28 17:28
    1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
    Linux内核,我对LDD相对较熟悉。偶然间拿起了《Linux内核设计与实现》,发现还是很容易理解,因为《LDD3》中的已经讲解了很多概念,比如内存分配,时间管理,中断。也有可能APUE帮了不少忙。

    LDD中最难的部分?简单的字符设备驱动最简单吧。涉及到了一些中断机制,互斥访问等,就变得复杂了。而只有在设计到这些高级机制后,编写的设备驱动才更有意义,因为“硬件本质是共享的!”独享是非常浪费的。   哦,一团糟,不理解都很难,理解了都很简单。

    设备驱动程序,uboot,CU博客里tekkamanninja兄弟的博客很好。
    内核总体结构,《linux内核修炼之道精华版》蛮不错的,应该是博文吧,不知道作者是不是fudan_abc,他的CSDN上的博客也蛮好的。

    2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
    美!Makefile,Kconfig,使结构更加清晰。

    3、Linux内核技术版块如何建设,才能够更好地为网友服务?
    探索者改进,做得更好!都是很好的。
    千万不要像CU博客一样,页面改了,变得不清晰简洁了。(我个人是这么认为的。)
    作者: superwiles    时间: 2013-03-28 20:26
    举个例子吧,如果要深入研究内核(based on x86_64),
    第一件事情要把 intel 的那几本手册认真研读一下,
    假设OS里常用的概念都已经了解,不了解的还要去看各类书籍
      
      然后如果要搞pci,还要去弄明白pci express的spec,起码软件相关部分
      同理对于其它总线。

      然后再重点清理一下一些常用的数据结构   

       下面就是跟着代码走一遍,  尤其是启动过程, 几乎涉及到所有子系统
       x86_64 的相关分析现在都很少看到,其实3.x以来,又有一些变化
    作者: ld1978    时间: 2013-03-29 10:02
    探索一下内核。。。
    作者: ckf513728912    时间: 2013-03-29 11:43
    里面有不少方法不错   以前没试过  谢谢分享
    作者: crazyhadoop    时间: 2013-03-29 14:39
    这本书内容略显单薄啊
    作者: ly602549803    时间: 2013-03-29 20:30
    学习一下啊,探索一下内核
    作者: du_huibin    时间: 2013-04-01 10:05

    1、说说您内核的学习经验?Linux内核中最难的部分是哪里?
        个人认为学习内核,刚开始是比较痛苦的事情,要多读代码,多看别人的分析结论。因为本人看的最多的是协议栈相关跟网络驱动相关的。据说最难部分是内存管理。
    2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?
       内核就是一个大容器,里面涉及的技术太多了,涉及的内容也很多,感觉很复杂,但是啃起来也很有意思。
    3、Linux内核技术版块如何建设,才能够更好地为网友服务?
       多增加一些实例的分析,多增加一些新feature的介绍。
    作者: meiyuhan    时间: 2013-04-02 13:00
    我也想了解,谢谢发帖的人
    作者: 帅绝人寰    时间: 2013-04-03 10:29
    1、说说您内核的学习经验?Linux内核中最难的部分是哪里?

    reading code比啥都重要

    跟现实世界一样,最难的就是如何搞定mm


    2、通过内核相关代码和架构的学习,说说您对Linux内核的整体感受?

    代码变来变去, 丑的代码很容易被改掉, 这是最大的优势 ── 非商业驱动的开发模型



    3、Linux内核技术版块如何建设,才能够更好地为网友服务?

    好象没什么好办法,现在这行业都死翘翘了, 别害人了。




    ================== 辛苦打这么多字, 有书发给我不?=======================
    作者: 2007robot    时间: 2013-04-03 20:17
    本帖最后由 2007robot 于 2013-04-03 20:18 编辑

    我看的还是《深入理解Linux 内核》2rd,觉得那本书对一个系统的整个层次把握的很好,有利于我们更详细的了解整个内核的结构和各模块的作用,是想深入认识Linux内核很好的一本书,好像也有一些人感觉像这种书籍偏离应用,实用性上不怎么好,但我认为它针对我们认识一个操作系统,特别是Linux有很大的好处,所以感觉还是值得一读!
    作者: seek_0380    时间: 2013-04-05 09:37
    回复 7# dooros


        有这么严重啊,不过很费脑力
    作者: dooros    时间: 2013-04-05 09:46
    seek_0380 发表于 2013-04-05 09:37
    回复 7# dooros


    跟个人体质也有关系啊。
    作者: chishanmingshen    时间: 2013-04-05 12:14
    看来我是属于体质好的,还无恙。呵呵…
    作者: seal17499    时间: 2013-04-06 20:40
    好文! 感谢分享~
    作者: daniel_11    时间: 2013-04-07 10:02
    回复 76# 帅绝人寰

    商业开发代码确实没那么容易改的漂亮,能work就好,不追求完美。
    UNIX是开发者的玩具,呵呵。
       
    作者: 瀚海书香    时间: 2013-04-07 14:56
    回复 2# chenyx
    内核裁剪 在嵌入式上用的比较多,在服务器上用的越来越少了。。。

       
    作者: peijian1998    时间: 2013-04-18 20:23
    谢谢分享,值得一看
    作者: nanqingzhe    时间: 2013-05-03 15:34
    linux内核的资料的话,还是推荐《深入理解linux内核架构》
    作者: tc1989tc    时间: 2013-05-05 20:29
    新手也是在学校内核中的一些东东,,但是感觉看相关的书籍分析的内核代码,,还勉强可以明白点,,自己去看源码之类的完全摸不到头脑,,不知道从哪个函数看起走。。
    就是看到汇编语言的时候真心痛苦  完全不懂那么写的原因是什么。。虽然也学了点汇编
    还有想看网络部分和内核驱动DMA部分  不知道从哪里下手  望楼主指导
    作者: wang1352083    时间: 2013-05-12 15:07
    先入门,等熟悉操作了再来学习内核
    作者: hartiy    时间: 2013-05-20 12:30
    下载了,研究研究,谢谢分享
    作者: 青城一剑    时间: 2013-06-02 22:38
    大量搜集资料中....什么都不会
    作者: flyd1005    时间: 2013-06-04 01:03
    我最大的体会是一定要用好Linux,熟练掌握Linux开发语言/工具,再谈学习Linux Kernel。
    我曾经辅导过两个同事,对他们提出的要求是“精武”,在学习Kernel的过程中精通五种语言/工具,否则深入不了。
    五种语言/工具的缩写为EMACS (部分源于我对Emacs的偏爱,把他们都培养成了Emacser)
    E -- Emacs/Emacs Lisp
    M -- Make
    A -- Assembly/Computer Architecture
    C -- C
    S -- Shell/Utilities

    E和S在最外围,编辑器和Shell是最能体现Linux应用水平的,即使是系统管理员和普通用户都要熟练掌握,更不用提Kernel hacker了;
    M和C更进一步,普通开发者对于Makefile和C应该同等重视,不懂Makefile去开发内核真的是不可想象;
    A是真正要深入内核开发必须掌握的,汇编/体系结构 (Asm/Arch)是成为真正合格内核开发者必须迈过的槛。

    另外,强烈反对有志内核开发的人再依赖于Windows和中文资料/中文界面。

    作者: chishanmingshen    时间: 2013-06-04 06:00
    有道理,:)
    作者: send_linux    时间: 2013-06-04 08:49
    flyd1005 发表于 2013-06-04 01:03
    我最大的体会是一定要用好Linux,熟练掌握Linux开发语言/工具,再谈学习Linux Kernel。
    我曾经辅导过两个同 ...


    感谢参与~
    作者: hukb_cu    时间: 2013-06-04 22:00
    正在苦读mm模块代码
    作者: flyd1005    时间: 2013-06-05 22:03
    我前些天已经买了这本书了,对它的评价是:锦上添花的书。
    这本书不是用来入门的,讲的是hacks,是一些技巧。推荐有一些基础,想扩大知识面,想寻一些技巧练手的人读一读。
    BTY,我还买过binary hacks和debug hacks,和这本书互为补充,都值得一读,有不少干货。

    吐槽一下,binary hacks那本书翻译真烂,要不是原著只有日文版没有英文版,打死我都不会买中文版
    作者: send_linux    时间: 2013-06-05 23:36
    flyd1005 发表于 2013-06-05 22:03
    我前些天已经买了这本书了,对它的评价是:锦上添花的书。
    这本书不是用来入门的,讲的是hacks,是一些技巧 ...


    谢谢这么好的反馈,呵呵
    作者: stuart_L    时间: 2013-06-11 22:04
    总是下载失败
    作者: llypei    时间: 2014-06-06 14:04
    谢谢louzhu
    作者: 贝特菲尔    时间: 2014-10-11 11:42
    谢谢分享  顶一个{:2_178:}




    欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2