我把我学习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. Switch的表达式的要求

    在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样),在java1.7后支持了对string的判断.

  2. 解决IIS7中出现An error occurred on the server when processing the URL错误提示的方法

    相信用过IIS7的朋友在调试程序的时候都遇到过下面这样的错误提示:    An error occurred on the server when processing the URL. Please ...

  3. IO流详解(半教材类型)

    这两天学习了IO流,整理了一些理论知识点,仅供参考. java流概述 一 流 从操作系统层面和文件系统,数据保存相关的是所有语言都具备的一个基本功能,java专门开发了一个包:java.io.*;ja ...

  4. Operation not allowed for reason code "7" on table 原因码 "7"的解决

    对表进行任何操作都不被允许,提示SQLSTATE=57016 SQLCODE=-668 ,原因码 "7"的错误:SQL0668N Operation not allowed for ...

  5. 无限大整数相加算法的C语言源代码

    忙里偷闲,终于完成了无限大整数相加算法的C语言代码,无限大整数相加算法的算法分析在这里. 500位的加法运行1000次,不打印结果的情况下耗时0.036秒,打印结果的情况下耗时16.285秒. 下面是 ...

  6. 九度OJ 1504 把数组排成最小的数【算法】-- 2009年百度面试题

    题目地址:http://ac.jobdu.com/problem.php?pid=1504 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如 ...

  7. 软件测试之 LoadRunner安装\破解\汉化

    一.下载 LoadRunner下载地址:http://kuai.xunlei.com/d/QRNIUASALOIE 二. 安装 1.启动安装程序 运行setup.exe,点击“LoadRunner完整 ...

  8. windows的路由例子

    一.不同网卡不同网关 wlan:192.168.100.1/24 wifi:192.168.8.1/24 1.如果想要特定的ip访问wifi网络 可以用 route add 1.2.3.4 mask ...

  9. stop() 是用于停止动画 :animated 用于判断动画是否在进行中

    stop() 是用于停止动画 if($("element").is(":animated"))  用于判断动画是否在进行中

  10. inline-block的兼容性问题

    inline-block的兼容性问题 Inline-block是元素display属性的一个值.这个名字的由来是因为,display设置这个值的元素,兼具行内元素( inline elements)跟 ...