学习kernel编程的建议
我把我学习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编程的建议的更多相关文章
- C++编程开发学习的50条建议(转)
每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少.本文就给出了网上流传的对C++编程开发学习的50条建议,总结的还是相当不错的,编程学习者(不仅限于C++学习者)如果真 ...
- Linux运维人员如何学习python编程
Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...
- Linux系统新手学习的11点建议
随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux的一些建议. 一.从基础开始:常常有些朋友在Linux论 ...
- 新手学习.net编程计划-1
.NET是一个庞大的学习体系,对于新手来说会感觉无从下手.学习知识必须从入门的基础学起,才能更好地掌握.学习.net也是如此,最基础的莫过于了解.net平台,以及掌握.net的基础语法C#. 本计划是 ...
- 有一定基础的 C++ 学习者该怎样学习 Windows 编程?
人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...
- [蛙蛙推荐]SICP第一章学习笔记-编程入门
本书简介 <计算机程序的构造与解释>这本书是MIT计算机科学学科的入门课程, 大部分学生在学这门课程前都没有接触过程序设计,也就是说这本书是针对编程新手写的. 虽然是入门课程,但起点比较高 ...
- 学习 Python 编程的 19 个资源 (转)
学习 Python 编程的 19 个资源 2018-01-07 数据与算法之美 编译:wzhvictor,英文:codecondo segmentfault.com/a/119000000418731 ...
- 【译】快速高效学习Java编程在线资源Top 20
想要加强你的编程能力吗?想要提升你的 Java 编程技巧和效率吗? 不用担心.本文将会提供快速高效学习 Java 编程的 50 多个网站资源: 开始探索吧: 1.MKyong:许多开发者在这里可以找到 ...
- 快速高效学习Java编程在线资源Top 20(转载)
想要加强你的编程能力吗?想要提升你的 Java 编程技巧和效率吗? 不用担心.本文将会提供快速高效学习 Java 编程的 50 多个网站资源: 开始探索吧: 1.MKyong:许多开发者在这里可以找到 ...
随机推荐
- C#集合之ArrayList
C#中之所以有集合这个东东,是因为数组的长度是固定的,而实际需求是,不确定未来这个“数组”的个数,故出现集合这个概念,因为集合的容量会随元素的增加曾倍数增长.C#中有2类常用集合:ArrayList, ...
- Asp.net基础知识
1.[项目结构] 1.1文件后缀: .cs 源文件(程序代码) .csproj 项目文件(管理文件项) .sln 解决方案文件(管理项目) .config ...
- plsql导入导出表
原来总是直接 tools->import talbes->Oracle Import结果发现有的时候会出错:有的表不能正确导入, baidu+googel解决办法如下: 导出步骤: 1 t ...
- Linux Terminal命令
Linux Terminal命令 1.Ctrl + a 回到命令行の「行首/head」. 2.Ctrl + e 回到命令行の「行尾/tail」, ctrl + end. 3.Ctrl + w 後向/b ...
- 空对象模式(Null Object Pattern)
空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract ...
- 4.MySQL连接并选择数据库(SQL & C)
在连接了MySQL数据库之后,可以通过SQL命令或者C.PHP.JAVA等程序来指定需要操作的数据库.这里主要介绍SQL命令和相应的C程序. 首先创建用户rick(赋予所有权限) mysql> ...
- windows phone 网易云阅读hubtile效果实现
效果图 曾几何时,刚接触wp的时候做了一个类似的界面,不过是Rectangle实现的,还是一个个摆的..囧啊 现在感觉这种应该是用hubtile实现的,Toolkit(http://silverlig ...
- [原创整理]这些术语你知道吗?(Web篇)
每一个术语代表的或是一种技术,或是一项标准,那么,作为混在IT界这个江湖的你,对这些术语熟悉么? 你知道它们所指代的事物么?你知道他们被创造的目的么?你了解了设计者的思想与精髓了么?亲,跟上时代的脚步 ...
- Linux硬链接和符号链接(转)
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引节点来进行连接.在Li ...
- Style 的优先级
Dependency Property(简称DP)是WPF的核心,Style就是基于Dependency Property的,关于DP的内幕,请参见深入WPF--依赖属性.Style中的Setter就 ...