我把我学习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. asp.net 中使用不同的数据源绑定gridview

    第一种,使用SqlDataReader绑定gridview.代码如下: public SqlDataReader bind() { SqlConnection con = new SqlConnect ...

  2. asp.net 中excel 导入数据库

    protected void Button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(Sy ...

  3. c#转义字符串中的所有正则特殊字符

    /// <summary> /// 转义字符串中所有正则特殊字符 /// </summary> /// <param name="input"> ...

  4. ios常用的一些类库

    在网上收集到的 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https:/ ...

  5. iOS开发——极光推送

    1.到极光官网 https://www.jpush.cn/ 下载极光推送SDK. 具体如何集成最好参考官网的文档,以及一些失败的原因.文档非常详细,我也是参考集成的. 2.到极光推送官网注册自己的应用 ...

  6. (CodeForces 558C) CodeForces 558C

    题目链接:http://codeforces.com/problemset/problem/558/C 题意:给出n个数,让你通过下面两种操作,把它们转换为同一个数.求最少的操作数. 1.ai = a ...

  7. OpenJudge / Poj 1928 The Peanuts C++

    链接地址:http://bailian.openjudge.cn/practice/1928 题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 Mr. Robinson and h ...

  8. Windows Phone 动态改变ListBox样式

    使用ListBox时通常会借助ItemTemplate帮助我们实现更复杂多样的样式显示,体现了Xaml的灵活.如何动态改变变ListBox的样式,实现类似电脑资源管理器中列表显示和图标显示形式的替换. ...

  9. 【HeadFirst设计模式】7.适配器模式与外观模式

    今晚学习完第七章,顺便做一下知识备忘. 适配器模模式: 定义:将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 对象适配器: 类适配器: 外观模式: 提供了一个统一 ...

  10. windows 安装 setuptools

    在python的网站上 : https://pypi.python.org/pypi/setuptools/ 查找windows,显不如下: 点击 ez_setup.py进入, 并将内容复制下来, 保 ...