免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux

[内核入门] Linux内核精髓:精通Linux内核必会的75个绝技(获奖名单已公布2013-4-7)  关闭 [复制链接]

论坛徽章:
0
发表于 2013-03-23 10:01 |显示全部楼层
顶一下,正在搞内核。希望多发一些,编译内核方面的资料。谢谢

论坛徽章:
0
发表于 2013-03-23 11:14 |显示全部楼层
日本也有linux内核高手? 传统概念上高手似乎都在美国和欧洲。

另外,个人感觉最困难的地方在于多核调度、内存管理和文件系统, 有太多的细节和小技巧, 需要慢慢品味

论坛徽章:
0
发表于 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》

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

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2013-03-24 00:46 |显示全部楼层
回复 23# craftor

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


   

论坛徽章:
0
发表于 2013-03-24 14:56 |显示全部楼层
回复 1# send_linux


   谢谢楼主

论坛徽章:
0
发表于 2013-03-24 15:31 |显示全部楼层
这个好诶,linux很喜欢,也曾经看过一些linux内核,不过后来工作了,没什么时间看了,必须重拾啊

论坛徽章:
16
天秤座
日期:2014-08-17 11:27:4215-16赛季CBA联赛之青岛
日期:2017-02-27 17:06:3015-16赛季CBA联赛之广夏
日期:2017-02-08 13:34:58白银圣斗士
日期:2015-11-30 20:57:05冥斗士
日期:2015-12-01 09:49:10嗜杀者
日期:2015-12-01 09:49:10白银圣斗士
日期:2015-11-27 23:56:51神斗士
日期:2015-12-01 09:49:10嗜杀者
日期:2015-12-01 09:49:10青铜圣斗士
日期:2015-12-01 09:49:10白银圣斗士
日期:2015-11-25 14:19:53黄金圣斗士
日期:2015-11-24 10:43:13
发表于 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内核。

论坛徽章:
31
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43CU十二周年纪念徽章
日期:2013-10-24 15:41:34丑牛
日期:2013-12-01 10:11:07水瓶座
日期:2014-01-15 08:47:25
发表于 2013-03-24 16:54 |显示全部楼层
本帖最后由 ddd010 于 2013-03-25 14:52 编辑

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

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

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-03-24 21:12 |显示全部楼层
本帖最后由 chishanmingshen 于 2013-03-24 21:21 编辑

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


内核入魔中的人飘过。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP