linux内核书籍

linux内核书籍

 1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,CPU和系统总线、内存的关系(很粗略即可),等等。
2, 关于C语言。不需要已经很精通C语言,只要能熟练编写C程序,能看懂链表、散列表等数据结构的C实现,用过gcc编译器,就可以了。当然,如果已经精通C语言显然是大占便宜的。
3, 关于CPU的知识。这块儿可以在学习内核过程中补,但这样的话你就需要看讲解很详细的书,比方后面将会提到的《情景分析》。你是否熟悉Intel 80386 CPU?尝试着回答这几个问题来判断一下:1)说出80386的中断门和陷阱门的区别;2)说出保护模式与实模式的区别;3)多处理器机器上,普通的读- 改-写回一块内存这样的动作,为什么需要特殊的手段来保护。等等。讲解基于其它CPU的Linux内核的书,目前好象只有一本《IA64Linux内核: 设计与实现》──也还是Intel的,其它都是讲解基于IA32的。

以上算是知识方面吧,如果还要再补充一条,我想就是:动手编译过内核。

好了,我们接下来走。好多人装上Linux之后,第一件事找到内核源码所在的路径,打开一个C程序文件,开始哗哗哗翻页,看看大名鼎鼎的Linux内核代 码到底长啥模样──然后关闭。这是可理解的,但却不是学习的方法。刚开始,必须从读书入手。至少要对内核有一个Overview之后,才有可能带着问题去 试图阅读源代码本身。 下面就讲一下我读过的几本书:

1, 《Linux内核设计与实现》,英文名Linux Kernel Development(所以有人叫它LKD),机械工业出版社,¥35, 美国Robert Love著,陈莉君译者。评说:此书是当今首屈一指的入门最佳图书。作者是为2.6内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因 此本书是很权威的。这本书讲解浅显易懂,全书没有列举一条汇编语句,但是给出了整个Linux操作系统2.6内核的概观,使你能通过阅读迅速获得一个 overview。而且对内核中较为混乱的部分(如下半部),它的讲解是最透彻的。对没怎么深入内核的人来说,这是强烈推荐的一本书。
翻译:翻译水平、负责任程度都不错,但是印刷存在一些错误。买了此书的朋友可以参考我在Linux高级应用版的《Linux内核设计与实现中文版勘误》:
http://bbs.chinaunix.net/forum/viewtopic.php?t=541234
另外,此书2005年有了第二版,目前尚无中译本面世。我就是对照着2nd-en勘误1st-cn的。

2, 《Linux内核源代码情景分析》上、下。毛德操、胡希明著,浙江大学出版社,上册¥80,下册¥70. 评说:

本书是基于2.4.0内核的,比较早,也没听说会出第二版。上册讲解内存管理、中断、异常与系统调用、进程控制、文件系统与传统Unix IPC;下册讲解socket、设备驱动、SMP和引导。关于这套书的评价褒贬不一,我个人认为其深度是同类著作中最优秀的。本书基于Intel IA32体系,由于厚度大,很多体系上的知识都捎带讲解了,所以如果你想深入了解内核的工作机制而又不非常熟悉Intel CPU的体系构造,本书是最合适的。缺点是:版本较老,没有TCP/IP协议栈部分(它讲的socket只是Unix域协议的),图表太少,不适合初学者 入门。还有就是对学生朋友来说,可能书价偏高,这样的话可以考虑先买上册,因为上册是核心部分,下册一大部分都在讲具体PCI/ISA/USB设备的驱 动。
翻译:没什么翻译,作者是国人,而且行文流畅。本人书桌上诸多计算机经典图书当中,这套是唯一又经典又无阅读障碍的。
www.linuxforum.net内核版好多朋友已经把这书读到六七遍了,我很惭愧,上册差不多读熟了,下册就SMP部分还看过──但这就花费了整整 1年的时间,还有好多弄不懂的。这里顺便说明另外一个研究内核常见的误区:目标太庞大。要知道Linux内核(最新的2.6.13)bzip2压缩之后 37M,解压缩之后244M,根本不是哪个人能够吃透的。即使是内核的核心开发团队中,恐怕也只Linus Torvalds、Alan Cox、David Miller、Ingo Molnar寥寥数人会有比较全面的了解,其它人都是做自己专门的部分。我自己来说,目前已经决定放弃内存管理的全部(slab层、LRU、rbtree 等)、文件系统部分、外设驱动部分,暂时也没打算弄IA32以外的其它体系的部分。

3, 《深入理解Linux内核》第二版。中国电力出版社。也是陈莉君译。此书是Linux内核黑客在推荐图书时的首选。 评说:

此书C版的converse兄送了我一本第一版,因此就没买第二版,比较后悔。因此只就第一版说一说,第一版基于2.2,第二版2.4 。我见O'Reilly官方主页上说第三版的英文版将于2005年11月出版,也不知咱们何时才能见到。此书图表很多,形象地给出了关键数据结构的定义, 与《情景分析》相比,本书内容紧凑,不会一个问题讲解动辄上百页,有提纲挈领的功用,但是深度上要逊于《情景分析》。

4, 其它的几本书。市面上能见到的其它的Linux内核的图书,象《Linux设备驱动程序》、《Linux内核源代码完全注释》以及新出的《Linux内核分析及编程》等。
《Linux设备驱动程序》第二版是基于2.4的,中文翻译不错,中国电力出版。这书强调动手实践,但它是讲解“设备驱动”的,不是最核心的东西,而且有 些东西没硬件的话无法实践,可能更适合驱动开发的程序员吧,不太适合那些For fun and profit的人。此书有第三版英文版,东南大学出版社影印,讲解2.6的,行文流畅,讲解的面也比第二版更广泛,我读过其中关于同步与互斥、内存分配的 部分,感觉很不错。
《Linux内核源代码完全注释》(机械工业出版社)是同济大学的博士生赵炯的著作,讲解0.1Linux内核,我没买也没看,有看过的朋友说一说。
《Linux内核分析及编程》(电子工业出版社)是刚刚出版的,国人写的,讲解2.6.11 。很多人说好,但有人说不够系统,我没买,不敢评说。
还有一本清华出的《Linux内核编程指南(第三版)》,原书应该是好书,但是翻译、排版十分糟烂,脱字跳行,根本没法看,我买了一本又扔掉了。

5, 其它资源。 TLDP(The Linux Documentation Project)有大量文档,其中不少是关于内核的,有些是在国外出版过的,象《Linux Kernel Interls》《The Linux Kernel》《Linux Kernel Module Programming Guide》等,作者都是亲身参加开发的人,著作较为可信。Http://www.linuxforum.net中国Linux论坛的内核版。该版是研究 内核的中文Linux社区中水平最高的,有很多专家级别的牛人,强烈推荐去学习一下(但建议不要问太过分简单的问题,人家脾气再好也会烦的^_^),它的 置顶贴简直是一个包罗万象的FAQ,精华区也有很多资料。只可惜太过曲高和寡,人气不是很旺。

6, 一本不是讲解Linux的书:《现代体系结构上的Unix系统:内核程序员的SMP和Caching技术》,人民邮电出版社2003版,定价¥39. 本书虽然不是讲解Linux,但是对所有Unix内核都是适用的,适合对SMP和CPU的Cache这些组成原理知识不是很熟的朋友,而且是很多国外牛人 推荐的书。中文版翻译非常负责。

还有个很重要的问题:怎样浏览内核源代码。有的朋友喜欢在Windows上工作,用Source Insight;有的在Linux,用Source Navigator;还有专门浏览源代码的软件,象lxr(Linux Cross Reference);还有用ctags/ectags/cscope等,这些都是很优秀的软件。我个人用Vim + ctags浏览(参考了www.linuxforum.net内核版wheelz大侠的文档,)。

此外,前边已经提到的一个重要的问题是:你研究内核的目的是什么, 开发?乐趣?如果是开发,而且是国内做开发,把kernel API熟悉一下就差不太多了(你也知道国内的水平有多差),比方说copy_from_user()、kmalloc()函数等,kernel API在Internet上找得到,编译内核时也可以用DocBook生成(具体请参考内核源代码包下的README文件);如果是研究,那就差别很大 了,需要下很大的苦功:会用kmalloc()绝不说明你懂得Linux内核的虚存管理子系统,正如同会讲汉语不说明你懂中国文化一样。

说完了,发现前面讲的太罗嗦了,简化一下:
1, 动手编译内核
2, 精读《Linux内核设计与实现》
3, 上www.linuxforum.net内核版看置顶贴与精华区
此外就凭自己兴趣选择吧。

PS:
关于linux内核方面的书籍。两年前买了几块的linux砖头内核的书籍,不分先后的读起来,激情磨灭了不少,有时候搞得一头雾水、很是懊恼。凡是分个循序渐进的好,呵呵!
Linux内核完全剖析,0.11版本内核,赵炯写的,觉得麻雀虽小,五脏具全。一本书中差不多包含了所有的代码,而且加了很多注释。分析的很透彻,不错 的内核研度入门书。 深入理解LINUX内核第二版,关于2.4内核的,如果有一些linux操作系统的基础,读着相当爽, 内容全面,而且用大量数据结构、宏名和函数,贯穿其中。遇到重点时,又附以代码、图解,理解起来比较容易。其中有些概念不是很正统,可能是作者有意为之 吧!第三版是关于2.6。
linux内核源代码情景分析 ,中国人写的,博大精深呀。经常在细节上深入进去,看的时候,要记得经常切换回来。不是很容易看懂。因为有太多细节,经常看着前面的,就忘了后面的,特别是函数、宏名,要是觉得自己内存堆栈空间够大的话。可以拿来试试。
Linux设备驱动程序,虽是挂着设备驱动,但是大多是讲内核,也讲了很多系统接口。
内核2.4版源代码分析大全,李善平写的,典型的中国人写的书,概念都很清楚,整体框架也不错。比较理解“中国国情”。
还有UC/OS_II,5000多行代码的嵌入式操作系统,也是开源的,有了任哲、邵贝贝的那两本书,足以搞定了。感觉比较适合本科操作系统课程的课程设计,可惜俺哪会还看到。

posted on 2014-02-12 15:11 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/book.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 内核定时器实验————复习到这

目录Linux 时间管理和内核定时器简介内核时间管理简介内核定时器简介Linux 内核短延时函数硬件原理图分析实验程序编写修改设备树文件定时器驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试定时器是我们最常用到的功能,一般用来完成定时功能&#xf…

商品评价判别,文本分类——学习笔记

FASTTEXT(Facebook开源技术) 二分类任务,监督学习。 自然语言 NLP自然语言处理 步骤: 语料Corpus:好评和差评分词Words Segmentation:基于HMM构建dict tree 构建词向量Construct Vector: one-ho…

跨平台(Android, iOS, WP, HTML5)游戏开发libGDX学习教程

2019独角兽企业重金招聘Python工程师标准>>> 疯狂小土豆的跨平台游戏开发引擎libGDX游戏开发视频,本视频主讲Android和桌面游戏开发。libGdx是一个跨平台的2D/3D的游戏开发框 架,它由Java/C/C语言编写而成。它基于Apache License, Version 2.…

分页器 版本控制

分页器 三种分页: 第一种: 类似于原来django中的分页 -page_size api_settings.PAGE_SIZE -page_query_param page -page_size_query_param -max_page_size 第二种:偏移分页 #每页显示的条数 default_limit api_settings.PAGE_SIZE #标杆值 offset_query_param offset #往后…

Linux 中断实验

目录Linux 中断简介Linux 中断API 函数上半部与下半部设备树中断信息节点获取中断号硬件原理图分析实验程序编写修改设备树文件按键中断驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试不管是裸机实验还是Linux 下的驱动实验,中断都是频繁使用的功能…

如何为libs目录下的jar包关联源代码

以前,我们可以为lib目录下的jar包关联源代码,但是现在似乎不行了。 下面是一篇讲述此问题解决方法的文章: How to attach javadoc or sources to jars in libs folder? 下面是google论坛对此问题的一篇讨论: https://code.google…

UDLD(Unidirectional Link Detection)

1、UDLD(单向链路检测协议)工作原理 为了在生成转发环路之前检测到单向链路,Cisco 设计并实施了 UDLD 协议。UDLD 是与第 1 层 (L1) 机制一起工作以确定链路物理状态的第 2 层 (L2) 协议。 在第 1 层中,自动协商…

小议map排序问题

map有序无序?如果说有序, 这个顺序是怎么定义的? 安装put的先后顺序吗? 还是被put元素的内容呢? 经观察,应该是后者,跟put先后顺序无关, 跟内部实现有关(可能是hash排序的…

Linux 阻塞和非阻塞IO 实验

目录阻塞和非阻塞IO阻塞和非阻塞简介等待队列轮询1、select 函数2、poll 函数3、epoll 函数Linux 驱动下的poll 操作函数阻塞IO 实验硬件原理图分析实验程序编写运行测试非阻塞IO 实验硬件原理图分析实验程序编写运行测试阻塞和非阻塞IO 是Linux 驱动开发里面很常见的两种设备访…

编程小白的第一条博客

本人AlleyMeowy,编程小白一只,非理工科学校,非科班出身,为了成为大牛不断努力。 ——2018年12月23日,在博客园创建博客第一天 转载于:https://www.cnblogs.com/AlleyMeowy/p/10165440.html

【转】BMP图像文件格式

5.1 BMP图像文件格式 BMP图像文件格式是游戏中常用的图像资源文件格式,BMP图像文件起源早,程序员对BMP都比较熟悉,再加上BMP格式简单,读取和写入非常容易实现,所以无论Windows的还是Driect X,都有支持读取…

异步通知实验(信号)

目录异步通知异步通知简介驱动中的信号处理应用程序对异步通知的处理硬件原理图分析实验程序编写修改设备树文件程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式…

事务与分布式事务

很多同学在开发中已经不自觉的接触了很多事务相关的代码(尤其是在数据库操作中),但是事务究竟是做什么的,有没有必要必须这么操作? 一段典型的代码如下: db.beginTransaction(); try {// do some CRUD oper…

使用Python连接数据库的脚本

在centos6.4系统上使用Python编写连接数据库需要使用的rpmMySQL-python-1.2.3-0.3.c1.1.el6.x86_64python连接、操作数据库实例脚本如下所示:mysql.py#!/usr/bin/python #codingutf-8 import MySQLdb connMySQLdb.connect(hostlocalhost,userroot,passwd123456) cur…

platform 设备驱动实验

目录Linux 驱动的分离与分层驱动的分隔与分离驱动的分层platform 平台驱动模型简介platform 总线platform 驱动platform 设备硬件原理图分析试验程序编写platform 设备与驱动程序编写测试APP 编写54.5 运行测试编译驱动程序和测试APP运行测试我们在前面几章编写的设备驱动都非常…

python FTP服务器实现(Python3)

创建一个ftp.py文件(Linux环境),插入以下代码: from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer # 实例化DummyAuthorizer来创建ftp用户 authorizer…

linux 恢复数据

对于很多 Linux 的用户来说,可能有一个问题一直都非常头疼:对于那些不小心删除的数据来说,怎样才能恢复出来呢?大家知道,在 Windows 系统上,回收站中保存了最近使用资源管理器时删除的文件。即便是对于那些…

设备树下的platform 驱动编写

目录设备树下的platform 驱动简介硬件原理图分析实验程序编写修改设备树文件platform 驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试上一章我们详细的讲解了Linux 下的驱动分离与分层,以及总线、设备和驱动这样的驱动框架。基于总线、设备和驱动这…

回归测试——游戏版本发布前的最后关口

回归测试在软件开发中很常用,在游戏测试中也是很重要的一个环节,它起着保障作用。可能各个公司游戏项目的回归测试流程不大相同,我就拿我参与的游戏项目来举例。在一个迭代的过程中,最后收尾动作就是回归测试,简单说就…