免费注册 查看新帖 |

Chinaunix

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

有奖线上连载讨论:我的内核学习之路-回忆录 活动结束 获奖名单公布 [复制链接]

论坛徽章:
0
发表于 2011-08-15 23:31 |显示全部楼层
05年年底看CU好多牛逼人在搞啥内核,不知道啥是内核编程。。。
在网上搜linux内核开发,发现LKD这本书
就让同学给买下来。。
至今看了好几遍了,不能完全看懂,但是却成为内核入门的第一本教材。。
后来就在网上看帖子,看源码,自己实践,加上09-10年打黑工,搞点内核开发
总算有些眉目了。可惜目前又远离内核开发了。。
不过好消息是过一段时间又要去搞内核研究了

论坛徽章:
0
发表于 2011-08-16 08:19 |显示全部楼层
回复 12# 贺兰云天


    你这种人才是大牛啊!以后多给大家分享点经验啊,能不能分享一下自己曾经遇到的一些困惑,然后自己怎么去解决的?

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
发表于 2011-08-16 22:27 |显示全部楼层
本帖最后由 dooros 于 2011-08-16 22:49 编辑

回复 1# chenrvmldd

我来说说我的学习之路,其实我根本就没学习完,甚至可以说根本就只是开了个头,但是我想对于初学者还是有点借鉴的,给入门者一点帮助。

高中毕业那会儿,不知道自己哪根神经搭错了,就在想,有没有windows之外的操作系统呢?然后,就到网上搜了下,当然了,百度,那时还不知道有个东西叫Google……
一不小心就搜到了Linux,一不小心就知道了有个操作系统叫Red Hat 9。
可惜家里没电脑啊,没办法,也就在网吧看看文章而已。

然后,大学开学了,就去图书馆借了N多Red Hat 9的书看,做了N多笔记。没办法,自己不是计算机系的,用不了计算机系的机房,而我们能用的机房配置又低,虚拟机之类的想都别想。大一的时候还申请了一堆Ubuntu 6.06 LTS的光盘。
大二的时候买了电脑了,然后就自己倒腾Red Hat9啊,Red Hat9的书,你懂的,没有神马包管理器,没有yum,装任何软件都要编译。而且学校的网用了造孽的Dr.com这个客户端,当时也是无解的。所以,为了装个软件,放个电影,就来回跑网吧。当然了,编译始终是不顺利的,不是这个错误就是那个错误,不是缺这个包,就是少那个包。这个时候,我知道了有个比百度更NB的东西叫Google,然后知道了各种Linux发行版,知道有种玩法叫LFS,也就是这个时候,开始了解了linux下的程序编译的一些原理(应该说是步骤比较合适)。

差不多Linux应用层方面的东西都学的差不多了,本来应该向Shell、python、甚至内核这方面深入。但是因为自己学的是电子,大部分时间都跟各种电路打交道,所以Linux没有深入的学习。后来,接触到perl,学了个把星期,学了个皮毛,然后就没学了。主要原因是这个N流大学的图书馆里只有这么一本perl的书,看完了之后……

大四,哥又头脑发热,准备考研,考的还不是电子本行,而是计算机,其实这也不见怪,我班上当时还有考生物工程和法学的……
因为考研,深入学习了下计算机操作系统原理、数据结构和计算机网络。
计算机操作系统原理的教材大概读了个三四遍,算的上十分熟悉了;数据结构也读了个两遍,程序没写,只是把伪代码读通了;计算机网络算是简单的了,当然只是基本原理,深层的协议没研究过。
最后,研究生没考上。然后找个一工作,搞Python。说实话,Python这东西我是快毕业的时候才知道。到了公司,发现有好多书,这时候我发现了《FreeBSD内核设计与实现》,我就拿出来看了几眼,感觉好不错。可惜,好景不长,我就离开了这个公司,跑到一家电子厂搞本行去了。

然后,临近毕业的时候,回来做毕业设计。顺便到图书馆借了本Linux内核的书来瞅瞅。这也是我学习linux内核的开端,当然,也是结尾了。
由于计算机操作系统原理和数据结构学的还不错,所以,理论知识方面的讲解基本不是问题。但是看的时候,就会发现,越来越空泛,越来越空泛。还没待我深入,我就毕业了,然后,又开始操起了电烙铁,电脑上开着的软件是protel。

最后,我总结下,虽然我只是开了个头,但还是有些心得和体会。
1.必须对linux熟悉,这里指应用操作,如果你连linux是个什么东西都不知道,额……这也太那个什么了。
2.必须熟悉C语言,内核就是用这个写的,你懂的。
3.必须熟悉操作系统原理和数据结构。
以上三条是学习内核的基础,没有这些基础,看再多遍源码也是白搭。
4.不要专看书不看代码,书上一般是一段理论分析,然后加一段代码,在附上作者认为必要的代码分析。有时候,这些分析还没有注释写的详细。当然,必要的英文阅读能力在这里就显得很重要了。
5.最好结合书中制定的版本号的源代码,边看书边看到代码。顺便结合最新的源代码,看看有什么变动。我当时是一开始就拿最新的源代码结合书来看,不料有许多地方代码有变动,后来找来相应版本号的代码,再结合新旧代码的注释,你会有意想不到的收获。

大概就这些吧,现在我又开始学习Linux来了,为了学习嵌入式啊,诶,人生就是折腾啊。

评分

参与人数 1可用积分 +10 收起 理由
无风之谷 + 10 欢迎分享经验~!

查看全部评分

论坛徽章:
0
发表于 2011-08-17 08:32 |显示全部楼层
回复 14# dooros


    很赞同你说的这句:人生就是折腾,确实有的时候人真的身不由己啊,呵呵,我们做技术的就是这样,那边需要什么样的技术,我们就需要学什么样的技术,所以有的时候我经常想,在我们学习的过程中其实最重要的并不是你掌握的技术越多越好,
而是你去学习技术的方法,以及去思考问题的方法,我觉得这个更为重要,

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2011-08-17 09:38 |显示全部楼层
回复 14# dooros


    确实比较折腾!

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2011-08-17 09:46 |显示全部楼层
回复 13# 2502964709


    学习学习!

论坛徽章:
0
发表于 2011-08-17 10:58 |显示全部楼层
[b]深入理解之前的痛苦和摸索
记得一个老师曾经说过,做学问的三重境界:
第一:昨夜西风凋碧树,独上高楼,忘尽天涯路,相信每个刚开始接触LINUX内核的兄弟都有这样的感受,
第二重:衣带渐宽终不悔,为“伊”消得人憔悴,看代码的时候每个人都会被一段弄不懂,或者不理解的机制搞的晕头转向吧!

第三重:众里寻他千百度蓦然回首那人却在灯火阑珊处,当兄弟们突然弄懂某个问题的时候,有木有这样的感受啊!有木有啊!

废话少说了:简单的谈谈自己痛苦的这段过程吧,我发现,其实人很奇怪,让我们回首最深刻,最刻骨铭心的那些记忆,往往是痛苦的事情!还记得,当初读的第一段代码:bootmme.c
看这个代码看的真是让人崩溃啊,前前后后总共看了一个月,还是清楚的记得:当初为了弄懂PAGE_MASK,PAGE_SHIFT,等等这些东东,看了很多方面的书,后来最终弄懂也是通过结合源码和深入理解Linux内核这本书,后来发现漫无目的的乱看源码效率很低!
于是做了一个决定,首先将《深入理解LINUX内核》和《linux源码情景分析》这两本书各自看了2-3遍,看完之后大概对LINUX整体系统的结构有了一些清晰的了解,
对内存管理这块的结构,以及在系统中的位置,与其他模块的交互,以及LINUX内存管理提供的功能,每个功能实现的方案都有了一定的了解!于是我决定要去看源码了,统计了,我发现虚拟内存管理这块的源码大概有10W左右(我看的是2.4内核),有了上面两本书的基础,我决定将源码分为以下几个部分慢慢去琢磨:
第一部分:启动部分与内存管理相关的
第二部分:初始化部分与内存管理相关的
第三部分:系统正常运行的时候内存管理部分
第四部分:内存管理与其他子系统之间的交互部分
第一部分:发现这部分其实蛮难读的,因为这块主要是汇编语言,说实在话,对于我来说完全读懂是不可能的,但是,从这里,我大概知道几点:段表的设置,页表的设置,寄存器的一些配置,内存大小的探测,
当初看这部分的代码的时候:有一个问题困扰了我一下,就是VGA的问题与页表映射的问题,
第二部分:初始化部分与内存管理相关的,到这边开始慢慢进入的佳境,读起来很快,没有遇到什么问题
其实真正的问题主要是在第三部分,这部分相对来说是比较难的,因为这块也是比较核心的,当初这块不懂的问题最多了,还记得曾经为了弄清楚缺页异常的每一个流程,就花了1一个月的时间,还发帖子到CU上,发现没人回复,没办法,有得自己闷头去搞了!
对于我们搞内核的人来讲,条件是蛮艰苦的,很多问题别人是不了解的,就算了解也不是那么的深刻,每个人也许只对自己弄的那块比较熟悉,可以对于你这块,别人不一定了解,那怎么办只能靠自己去摸索,去研究!
发现,真正静下心来搞内核的人是需要非常大的耐心,也需要你的激情,因为内核代码不是几百行,几千行,而是几万行,甚至10几万行,以前认识一个牛人:专门是做IO优化的,他说他做了一辈子的IO优化了,他说有的时候搞一个问题,也许一搞就能搞上几个月,
我一个师兄,以前在查一个内核问题,查了3个月,后来发现越来是一个函数在初始化的时候把值设置错误了!所以,可以看出耐心和激情,兴趣是多么的重要!
哎,做内核的真的是伤不起啊!有木有啊!

论坛徽章:
0
发表于 2011-08-17 13:34 |显示全部楼层
回复 18# chenrvmldd


    希望越来越多的兄弟参与进来讨论,其实不管新入门的,还是接触很久的,大家都过来聊聊,这样才不会觉得自己是一个人在奋斗!

论坛徽章:
0
发表于 2011-08-17 13:52 |显示全部楼层
好事啊,欢迎大家积极参与分享~! 热心回帖分享的网友即有积分奉上~!

论坛徽章:
0
发表于 2011-08-17 14:03 |显示全部楼层
现在学linux还是停留在应用层这一块,虽然想学内核的东西,但是内核的开发不是我现在工作所需要用到的东西,如果想更进一步的去学习linux,就必须要向内核这条路走吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP