免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: arron刘
打印 上一主题 下一主题

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

论坛徽章:
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
51 [报告]
发表于 2013-12-23 09:01 |只看该作者
lol
好久没关心kernel了

论坛徽章:
17
戌狗
日期:2013-09-02 23:43:02技术图书徽章
日期:2014-04-29 14:16:02技术图书徽章
日期:2014-04-24 15:51:26未羊
日期:2014-04-06 22:10:30丑牛
日期:2014-04-06 21:23:29辰龙
日期:2014-04-06 21:20:22处女座
日期:2014-04-06 21:16:18技术图书徽章
日期:2014-04-02 15:10:51金牛座
日期:2014-03-10 22:26:18巨蟹座
日期:2014-02-17 17:12:12技术图书徽章
日期:2014-01-24 10:38:43摩羯座
日期:2013-11-29 18:00:18
52 [报告]
发表于 2013-12-23 11:01 |只看该作者
支持Linux内核话题,支持开源,支持linxu开源软件。

求职 : 系统工程师等
论坛徽章:
5
技术图书徽章
日期:2014-04-19 22:01:05天蝎座
日期:2014-05-09 13:49:28双子座
日期:2014-06-16 15:08:042015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:28
53 [报告]
发表于 2013-12-23 11:04 |只看该作者
1、为什么学习Linux内核?
    我是做研发的,使用的平台是基于Linux内核的,为了更好更快的开发,需要对Linux内核有所了解。
    此外,对Linux内核也有点兴趣,很好奇各种机制是如何实现的。


2、如何学习内核?
    书+代码。
    书就那几本比较经典的。挑一本薄的,对感兴趣的部分随便翻下,乱序读,想看哪章就拿起来看看。有了初步的认识之后,结合代码看下,同时整理代码研读笔记。
    有了个别点的深入认识之后,进行横向的拓展,渐渐就连点成面了。

3、学习Linux内核对实际工作会有哪些实际帮助?
     工作主要是驱动相关,以前写驱动程序,如果出了问题,不知道从哪里入手分析。研究过内核之后,可以跟踪内核里面的机制,查问题会快很多。
     有时需要使用内核的提供的数据结构(如队列、hash表等)、内核提供的机制(定时器、tasklet、等待队列等),研究过内核之后,对这些认识就很深入了。
     此外,用户态使用的系统调用,以前只是简单知道做什么的,但是具体实现不清楚,理解的不够深刻。研究过内核的对应代码之后,清晰多了。


论坛徽章:
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
54 [报告]
发表于 2013-12-24 10:37 |只看该作者
回复 51# T-Bagwell

在关心如何做管理吧


   

论坛徽章:
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
55 [报告]
发表于 2013-12-24 10:38 |只看该作者
回复 53# qxhgd
3、学习Linux内核对实际工作会有哪些实际帮助?
     工作主要是驱动相关,以前写驱动程序,如果出了问题,不知道从哪里入手分析。研究过内核之后,可以跟踪内核里面的机制,查问题会快很多。
     有时需要使用内核的提供的数据结构(如队列、hash表等)、内核提供的机制(定时器、tasklet、等待队列等),研究过内核之后,对这些认识就很深入了。
     此外,用户态使用的系统调用,以前只是简单知道做什么的,但是具体实现不清楚,理解的不够深刻。研究过内核的对应代码之后,清晰多了。



嗯,了解底层的工作机制和原理,对于处理上层一些的工作大有裨益

   

论坛徽章:
2
C
日期:2016-10-25 16:11:40极客徽章
日期:2016-12-07 14:07:30
56 [报告]
发表于 2013-12-28 16:02 |只看该作者
1、为什么学习Linux内核?
答:提高对自己硬件的认识和自己的动手能力,更深入了解LINUX的工作原理,为自己的发展打下良好的基础。

2、如何学习内核?
一要了解自己,明白自己需要了解哪些内容,喜欢哪些内容?二要有针对性;从系统级的开发开始学习,然后根据自己的理解,向操作系统的内核深入,对比一下就会有深刻的体会。

3、学习Linux内核对实际工作会有哪些实际帮助?
学习严谨的编程思想,加强自己对LINUX的认识

论坛徽章:
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
57 [报告]
发表于 2013-12-28 21:44 |只看该作者
Godbach 发表于 2013-12-24 10:37
回复 51# T-Bagwell

在关心如何做管理吧


这个不关心,主要是发现玩应用程序毕玩内核好玩

论坛徽章:
0
58 [报告]
发表于 2014-01-03 20:31 |只看该作者
我觉得学习linux内核,了解内核的实现机制,对做linux设备驱动开发帮助很大,了解了原理,才能更好的做开发。至于如何学习,个人觉得还是先看书,弄懂原理 机制,然后实际动手操作相结合,会有更好的效果,时常逛逛有关网站,看看 那些 大牛对linux的理解,会有很大帮助的。

论坛徽章:
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
59 [报告]
发表于 2014-01-04 22:42 |只看该作者
本帖最后由 Godbach 于 2014-01-04 22:43 编辑

回复 28# fengzhanhai
回复 29# 瀚海书香

不敢妄称专家,只是做过一些 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 网络子系统的同时,基本上就需要学习或者至少了解内存管理、内核同步、中断、多核等多个方面的知识。

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


   

论坛徽章:
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
60 [报告]
发表于 2014-01-04 22:44 |只看该作者
回复 57# T-Bagwell

应用程序要考虑的问题更多更复杂。但是有内核背景知识,会对开发应用程序有很大帮助,性能调优的时候思路也会更加开阔一些。


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP