我把我学习kernel编程的过程介绍给大家,希望大家有个参考。

学习kernel编程需要阅读大量的kernel方面的书籍,在此我列举一下我读过的kernel书籍(按时间先后顺序),并给一些建议。

1. LDDv3(Linux Device Driver Program)linux设备驱动编程

2. Linux内核情景分析,上,下

3. ULK(Understanding Linux Kernel)v2, v3

4. Linux 0.11内核完全注释

5. ULN(Understanding Linux Networking)

以上是我阅读过的算是大部头的Linux Kernel编程方面的书籍。当然如果你刚开始学习Linux编程,并希望向底层发展,那么我建议你先阅读:

1. C语言程序设计

2. APUE(Advanced Programming in the UNIX Environment)Unix高级环境编程

3. Unix网络编程,卷一,卷二

4. TCP/IP详解,卷一、卷二、卷三

5. C语言标准与实现(选读,强烈推荐你读一下,读完后会对C语言有很深入的了解)

初学Linux,读完以上这3类书籍,你对Linux系统编程就会相当的了解了,建议还要至少读一本shell编程方面的书,原因就不用说了吧。

好现在你有了一定的系统知识和C语言编程技能了,那么来说说你怎么读kernel的书籍。

上面列出的5种书籍我都读过,建议你这样阅读。

首先读LDDv3,读到内存映射部分,这时好多概念你不容易理解,可以等以后精度,到这以后可以先马虎的读一遍。

然后读Linux内核情景分析,上,下,这两本书是我见过的最厚的书了,一定要坚持读下来,讲述的2.4内核的情景。(阅读时最好把代码打开,讲到哪你看到哪,我是这样的)

再后可以读ULK v2或v3,ULKv2讲的是2.4的内核,ULKv3讲的是2.6的内核,直接读v3没有问题,要尽量的理解全部内容。

这时如果以上你都读完了,那么可以把LDDv3内存映射开始章节和往后的章节重读一遍,你会完全理解了。

关于0.11内核完全注释,这本书你可以现在读了,这本主要是锻炼你的基本编程知识,包括对一些ATT汇编也有了一些认识,对你看当今最新的内核原理方面没有什么帮助。

但也推荐你看看,这本书会告诉你诸如printf是怎么实现的,还是很有意思的。(要打开代码同步阅读,最好)

ULN是完全讲述的Linux网络子系统,当你对Linux Kernel编程有一定基础和概念了可以开始阅读了,我是最后阅读的,你会完全在概念上了解Linux网络子系统的实现。

读了那么多的书,该行万里路了,写代码来实践是非常重要的,没有目标就自己想象一个,例如,读完怎样编写网络驱动后(LDD中),可以自己写个虚拟网卡,当你ping你虚拟网卡地址时,

你在驱动中把IP地址对调,并修改协议为ICMP回显,然后再发回给kernel,这样ping命令就会有回显,好像你真ping到了那个地址,其实是你自己在kernel中做了点手脚。

有实际的工作目标是最好的了,多实践还是硬道理。祝你成功!

学习kernel编程的建议的更多相关文章

  1. C++编程开发学习的50条建议(转)

    每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少.本文就给出了网上流传的对C++编程开发学习的50条建议,总结的还是相当不错的,编程学习者(不仅限于C++学习者)如果真 ...

  2. Linux运维人员如何学习python编程

    Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...

  3. Linux系统新手学习的11点建议

    随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux的一些建议. 一.从基础开始:常常有些朋友在Linux论 ...

  4. 新手学习.net编程计划-1

    .NET是一个庞大的学习体系,对于新手来说会感觉无从下手.学习知识必须从入门的基础学起,才能更好地掌握.学习.net也是如此,最基础的莫过于了解.net平台,以及掌握.net的基础语法C#. 本计划是 ...

  5. 有一定基础的 C++ 学习者该怎样学习 Windows 编程?

    人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...

  6. [蛙蛙推荐]SICP第一章学习笔记-编程入门

    本书简介 <计算机程序的构造与解释>这本书是MIT计算机科学学科的入门课程, 大部分学生在学这门课程前都没有接触过程序设计,也就是说这本书是针对编程新手写的. 虽然是入门课程,但起点比较高 ...

  7. 学习 Python 编程的 19 个资源 (转)

    学习 Python 编程的 19 个资源 2018-01-07 数据与算法之美 编译:wzhvictor,英文:codecondo segmentfault.com/a/119000000418731 ...

  8. 【译】快速高效学习Java编程在线资源Top 20

    想要加强你的编程能力吗?想要提升你的 Java 编程技巧和效率吗? 不用担心.本文将会提供快速高效学习 Java 编程的 50 多个网站资源: 开始探索吧: 1.MKyong:许多开发者在这里可以找到 ...

  9. 快速高效学习Java编程在线资源Top 20(转载)

    想要加强你的编程能力吗?想要提升你的 Java 编程技巧和效率吗? 不用担心.本文将会提供快速高效学习 Java 编程的 50 多个网站资源: 开始探索吧: 1.MKyong:许多开发者在这里可以找到 ...

随机推荐

  1. UIButton 未响应原因分析

    1.父视图响应者链被阻断;例如:在 UILabel,UIImageView 控件添加UIButton,因为UILabel(userInteractionEnabled属性值为NO) 阻断了响应者链,所 ...

  2. asp:保留两位小数:

    <%=Formatnumber(-6665.8999,3,-1,-1,0)%>(6665.900)一个例子用到了函数Formatnumber()的所有参数:第一个参数(-6665.8999 ...

  3. asp.net 备份和恢复数据库

    观看了Insus的视频写下来的,代码可能有点冗长,如有好的想法的,可以多交流. 前台: <form id="form1" runat="server"&g ...

  4. javascript Date类型 学习笔记

    1 创建一个新的日期对象,如果不带参数,则对象自动获得当前的日期和时间 var d = new Date() 2 如果需要指定特定的日期,则可以通过Date.parse() 或者 Date().UTC ...

  5. 用Python进行语音信号处理

    1.语音信号处理之时域分析-音高追踪及其Python实现 2.语音信号处理之时域分析-音高及其Python实现 参考: 1.NumPy

  6. Update msi using vbscript

    参考: http://stackoverflow.com/questions/1609250/how-do-i-add-update-a-property-inside-an-msi-from-the ...

  7. windows下vs2013使用C++访问redis

    刚开始在windows下使用c++访问reids各种报错,经过网上到处搜方案,终于可以在windows下访问redis了,特将注意事项记录下来: 1.获取redis Window下的开发库源码,从gi ...

  8. 深度模拟java动态代理实现机制系类之二

    这次我们要实现的是对任意接口,任意的方法进行特定的代理 这里不一样的只有Proxy类,要实现对所有方法进行代理,那么重点就在于获得接口的所有方法 import java.io.File; import ...

  9. php 一维数组排序,保留key值

    function sort_with_keyName($arr,$orderby='desc'){ //在内存的另一处 $a 复制内容与 $arr 一样的数组 foreach($arr as $key ...

  10. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(五)

    这一节,用个简单的例子来调用下之前生成的service.ane 首先建一个flex手机项目 然后在构建路径中把ane引进来 可以看到此ane支持Android平台. serviceMobile.mxm ...