免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 37907 | 回复: 65

[学习分享] 专家坐堂:Godbach 详解Linux内核学习方法(获奖名单已公布-2014-1-14) [复制链接]

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:41:40IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:42:01每日论坛发贴之星
日期:2015-12-09 06:20:00
发表于 2013-12-17 15:11 |显示全部楼层
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4119143-1-1.html

在中国一些知名的讨论Linux内核的论坛CU上,每天都有大量网友就Linux内核问题提问。Linux内核目前已经如此庞大,为什么要学习内核?从内核中到底学习什么?

本期特邀Linux内核资深专家、CU社区版主:Godbach。针对Linux内核的学习问题给予解答,欢迎网友积极提问,与专家一起讨论!

讨论话题:
1、为什么学习Linux内核?
2、如何学习内核?
3、学习Linux内核对实际工作会有哪些实际帮助?

PS:欢迎大家在活动时间内在本贴集中提问,期间专家会对每一个问题认真进行答复。

讨论时间:2013.12.17--2013.1.6

活动奖励:活动结束后将会抽取3名会员赠送《Linux入门很简单》一本。
QQ截图20131217151026.jpg

论坛徽章:
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-12-17 15:13 |显示全部楼层
本帖最后由 Godbach 于 2014-01-04 22:40 编辑

回复 1# arron刘

欢迎大家积极参与。 :wink:

不敢妄称专家,只是做过一些 kernel 的研究和工作,分享一下个人学习 kernel 的经历。

1. 最开始接触 kernel 是本科毕业设计中,研究嵌入式设备中的一些驱动,主要是音频驱动。当时不知道有 CU 这样的技术论坛,周围也缺少指导的人。只是被告知可以看一下《Linux Device Drivers》(简称 LDD)应该是第二版吧,还是说 2.4 内核的。最终下来动手写的代码不多,主要熟悉了 kernel 的一些基础知识和设备驱动的框架,以及写 driver 的基本套路。

2. 后来接触到了 CU 论坛之后,再次的在很多帖子的帮助之下,重新看了一遍 LDD,发现比最早看的时候可以理解更多的内容,书中的很多例子都实践了一下。

3. 工作之后,这也是 kernel 学习最快,提升最明显的阶段,因为工作需要,都是奔着要解决问题的目的而发帖讨论问题的。

下面的整个介绍偏重于网络。

上学的时候喜欢计算机网络,而且还做了不少关于计算机网络的实现,比如抓包,一个字节一个字节的分析报文各个层的数据,自己手工的计算 IP 头的校验和等。工作的内容正好是网络相关的,做网络安全。因此,正好开启了了学习 kernel 网络子系统的大门。

学习的顺序基本上就是从 iptables 和 Netfilter 入手。分析 iptalbes 的执行流程,学习 iptalbes 中规则的组织形式以及处理方式,研究规则如何在用户态和内核态传递方式,以及规则在 kernel 中即 Netfilter 框架中如何生效。这一整套学习下来之后,系统的学到了很多知识,包括 iptables 规则的使用以及匹配的逻辑,用户态和内核态通信的多种机制,Nefilter 的工作原理等等,数据报文在整个 IP 层的处理流程。

掌握了 Netfilter 的工作原理,就可以进一步的注册自己的 Netfilter hook 函数。这样就可以去拦截 kernel 中的数据包。要想 hack 截获的数据包,就需要掌握 kernel 中数据包的基本数据结构 skb 以及操作 skb 的一些通用接口。在此基础上,按照自己的需求处解析报文(查看三层四层头部详细信息以及应用层数据)并且对报文做出 ACCEPT/DROP 等处理,且进一步掌握了如何修改报文。

掌握了数据报文在 IP 层的流程,基本上就可以较快的掌握 conntrack 的工作逻辑以及实现,还有 NAT 以及路由子系统等。

同时,在研究 kernel 网络子系统的同时,基本上就需要学习或者至少了解内存管理、内核同步、中断、多核等多个方面的知识。

总的来讲,个人的内核学习路程,就是从一个点(网络)切入内核,然后深入学习内核态网络的实现,并在学习过程中研究和学习其他相关联的多个子系统。


   

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2013-12-17 15:19 |显示全部楼层
1、为什么学习Linux内核?
当初学是为了了解计算机工作原理,好奇操作系统是咋工作的

2、如何学习内核?

找一个切入点,深入进去,然后扩展开,不止要看代码,看书,还要动手写,要不还是啥都不会
3、学习Linux内核对实际工作会有哪些实际帮助?
其实没啥帮助,就是兴趣爱好,不过内核里有些思想,有些算法还是不错的,可以借鉴出来开发应用程序

论坛徽章:
0
发表于 2013-12-17 15:20 |显示全部楼层
本帖最后由 duanjigang 于 2013-12-17 16:13 编辑

1、为什么学习Linux内核?
一开始是觉得内核好玩,后来工作需要。
2、如何学习内核?
看经典文章科普,掌握理论基础,然后找入门例子代码修改,测试,接着看内核源码,再看文档。
最好工作内容有内核开发的部分。
3、学习Linux内核对实际工作会有哪些实际帮助?
内核中的一些思想,面向对象,任务队列,链表,内存池等经典源码值得学习,能帮助解决不少工作中的问题。

论坛徽章:
459
亥猪
日期:2014-05-31 12:08:03亥猪
日期:2014-05-31 12:07:38亥猪
日期:2014-05-31 12:08:04亥猪
日期:2014-05-31 12:07:43亥猪
日期:2014-05-31 12:07:52亥猪
日期:2014-05-31 12:08:09亥猪
日期:2014-05-31 12:07:51亥猪
日期:2014-05-31 12:08:02亥猪
日期:2014-05-31 12:07:59亥猪
日期:2014-05-31 12:07:37亥猪
日期:2014-05-31 12:07:50亥猪
日期:2014-05-31 12:07:39
发表于 2013-12-17 15:31 |显示全部楼层
1、为什么学习Linux内核?
2、如何学习内核?
3、学习Linux内核对实际工作会有哪些实际帮助?

这些都是问题!
不知道看什么书比较好!

论坛徽章:
459
亥猪
日期:2014-05-31 12:08:03亥猪
日期:2014-05-31 12:07:38亥猪
日期:2014-05-31 12:08:04亥猪
日期:2014-05-31 12:07:43亥猪
日期:2014-05-31 12:07:52亥猪
日期:2014-05-31 12:08:09亥猪
日期:2014-05-31 12:07:51亥猪
日期:2014-05-31 12:08:02亥猪
日期:2014-05-31 12:07:59亥猪
日期:2014-05-31 12:07:37亥猪
日期:2014-05-31 12:07:50亥猪
日期:2014-05-31 12:07:39
发表于 2013-12-17 15:33 |显示全部楼层
本来向下狠心看看内核源码!
一翻书发现,根本看不懂哇!
能否给个进阶路线...

论坛徽章:
459
亥猪
日期:2014-05-31 12:08:03亥猪
日期:2014-05-31 12:07:38亥猪
日期:2014-05-31 12:08:04亥猪
日期:2014-05-31 12:07:43亥猪
日期:2014-05-31 12:07:52亥猪
日期:2014-05-31 12:08:09亥猪
日期:2014-05-31 12:07:51亥猪
日期:2014-05-31 12:08:02亥猪
日期:2014-05-31 12:07:59亥猪
日期:2014-05-31 12:07:37亥猪
日期:2014-05-31 12:07:50亥猪
日期:2014-05-31 12:07:39
发表于 2013-12-17 15:34 |显示全部楼层
再者,有什么样的基础才可研究内核源码?

论坛徽章:
0
发表于 2013-12-17 15:41 |显示全部楼层

论坛徽章:
0
发表于 2013-12-17 15:44 |显示全部楼层
Godbach 发表于 2013-12-17 15:13
回复 1# arron刘

欢迎大家积极参与。


向老大致敬。

论坛徽章:
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-12-17 15:52 |显示全部楼层
回复 7# 2009532140

需要有 C 语言的基础,Unix 环境高级编程 简称APUE  最好先看一下。

内核里面有很多子系统,建议找一个感兴趣的子系统切入。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP