倪继利著
2005年8月出版
ISBN 7-121-01518-5
900页
88.00元(估价)
倪
倪继利著
2005年8月出版
ISBN 7-121-01518-5
900页
88.00元(估价)
倪
内 容 简 介
本书作者在整理自己多年研发笔记的基础上,以精心挑选的典型开发实例向读者详细地讲述了内核源代码的各部分结构、原理及组成框架,主要分析了Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux 内核,精通Linux内核编程。全书分为20章,内容包括进程管理、进程间通信、内存管理、文件系统、I/O接口及资源管理、内核的编译及调试原理、网络通信、内核安全、USB驱动程序等。
对于想了解Linux开发,以及从事Linux内核编程的开发人员来说,本书是一本集大成之作,它既有讲解透彻的原理,也有详细实用的示例,更有作者多年从事实际开发工作的心得。本书主要针对从事Linux内
前言
Linux是开放的源代码,它具备了UNIX的全部特征,它还同POSIX标准兼容。Linux操作系统,如Red hat Linux 9,被广泛地应用于PC、服务器,还广泛地用于手机、PDA等高端嵌入设备。由于Linux综合了UNIX主要派生系统(包括SysV、BSD)的先进技术,因而,Linux操作系统上能运行原UNIX系统的各种应用程序,同时,还存在大量的应用程序开放源代码供开发者使用。而且,许多著名公司将自己的Linux程序源代码进行发布。这些因素导致了Linux在嵌入系统中的大量应用。
为什么写作本书
如今,Linux内核代码几乎是每个软件工程师必读的,但是内核代码复杂难懂。作为一名Linux编程者,我一向颇为留意内核编程方面的图书,我理想中的这本书应该是一本实践性很强的书,是真正从事Linux内核开发的人士写作的。由于我多年以来一直记有从事Linux内核开发的笔记,后来,我便想到,如果我从一名研发者的角度来写作这样一本书,把自己的笔记加以整理,那么,对读者的实践应该会有不小的帮助。在整理自己的开发笔记的基础上,我还查阅了大量相关资料,加强研究,力求融会贯通,费时两年,写成这本书。
Linux 2.6版内核改写了以前版本内核的绝大部分,本书主要针对目前Linux的最新版本2.6.11版,对以后的新版本也具有普适性。本书的主要目的是帮助软件工程师读懂linux2.6.11版本内核,并能开发各种驱动程序、编写内核模块。在这本书里,我将平常编程中遇到的重点、难点进行分析,并给予充分的论述,相信其中许多问题是其他内核编程者也会遇到的。对于一名软件工程师来说,本书有助于他们少走弯路,更快地掌握Linux 2.6.11内核源代码及编程技巧。
关于本书作者
笔者从在清华大学电子系读研究生起,就开始从事Linux内核编程,后又一直在外国著名公司从事Linux内核编程工作。先后从事过Linux内核的移植、USB驱动程序编写、内核安全程序的编写等。目前,Linux被广泛地应用于手机、PDA等高端嵌入设备,笔者在这方面有丰富的开发经验。
本书主要内容
本书共包括20章,每章的主要内容如下:
第1章“数据类型及链表”介绍了数据类型占用的空间及用户空间输出的数据类型,说明了内核通用链表的原理,还介绍了行内汇编语言的语法。
第2章“进程及进程调度”分析了进程结构及进程调度算法。
第3章“内核同步机制”介绍了内核的互斥机制:自旋锁、原子操作和信号量。还说明了RCU读写机制,及内核与用户空间进行通信的机制。
第4章“内存管理”介绍了虚拟内存及映射,还分析了物理内存的管理(它包括缓存的分配及回收,请页机制,交换空间等),还说明了内存缓冲池和大块内存的管理机制。
第5章“虚拟文件系统”介绍了虚拟文件系统的结构和实现文件操作的机制,还介绍了底层各种缓存的管理。
第6章“EXT2文件系统”介绍了EXT2文件系统逻辑分区的结构、节点和dentry的管理,说明了读写系统调用的具体实现过程。
第7章“其他文件系统”介绍了常用的一些文件系统:ramfs、proc、vfat、devfs和sysfs。
第8章“I/O端口资源管理”介绍了中断处理、DMA及电源管理的实现机制。
第9章“模块机制”介绍了内核模块的实现机制,还分析了内核空间的保护机制。
第10章“设备驱动程序”介绍了字符设备及块设备驱动程序的工作原理,分析了通用硬盘及块层的机制,还说明了如何编写字符设备与块设备驱动程序。
第11章“Flash闪存及SD/MMC卡”分析了MTD设备驱动程序和MMC/SD驱动程序,它们分别驱动Flash闪存和存储卡,是嵌入设备的主要存储设备。
第12章“Linux系统初始化”阐述了在i386机器上的BootLoader和嵌入设备上的Blob,分析了Linux系统的启动过程。
第13章“系统调用”分析了系统调用的实现机制。
第14章“Linux网络系统分层结构”介绍了数据包的传递过程、与应用层的接口、与底层的接口以及网络驱动程序的编写。
第15章“执行文件的运行过程”阐述了动态链接与静态链接的概念,并说明了动态链接中函数定位的原理。然后分析了ELF文件格式,以及ELF文件在内核中是如何加载运行的。
第16章“进程间通信”分析了进程间通信机制在内核中的实现原理。
第17章“Linux的安全策略”介绍了selinux的安全策略配置语言、selinux模块的实现,以及病毒防火墙的原理。
第18章“内核配置与编译”说明了内核的配置、配置语言的语法,还分析了makefile是如何进行内核编译的。
第19章“Linux内核调试”分析了内核调试的方法,控制台驱动程序以及如何将打印信息显示在控制台上,阐述了日志系统是如何工作的,还说明了ptrace调试跟踪的原理。
第20章“USB总线驱动程序”分析了USB总线接口驱动程序(包括USB总线驱动程序的结构、编写方法和USB接口的U盘设备驱动程序)。
附录A列表说明了系统调用的功能,供读者快速查询。
如何阅读本书
这是一本大厚书,读者应该怎样利用这本书呢?
在阅读此书前,读者应当学过操作系统原理、数据结构、计算机结构及组成、汇编语言及C语言等课程或具备这方面的知识。这本书章节的安排是依据读者对内核学习循序渐进的顺序设立的,建议初学者从前至后阅读。由于Linux内核复杂难懂,我建议读者分几遍阅读本书。
? 第一遍先将书通读,主要弄清楚概念,程序代码部分可以只是浏览一下。当对概念有初步认识时,再尝试编译安装内核,安装一个驱动程序模块。
? 第二遍再对照源代码详细看一个驱动程序,如:USB驱动程序,理解驱动程序模块是如果调用内核函数、注册驱动程序等,再反过来,仔细看这些内核函数的实现,就明白了内核为什么要写这些函数了。
? 第三遍再根据需要对照源程序看相关章节,例如:对照源程序看“内存管理”一章中vmolloc函数是如何实现的。这种阅读法使读者能从本书中获得最大收效,是学习内核的好方法。当然,如果你是一名内核精通者,也可以根据需要直接跳读到相关章节,查阅你需要的内容。
阅读内核是一个反复又枯燥的过程,读者只有在反复的研读中,才能逐渐使自己的内核知识条理化,在此基础上,你还需要去应用这些知识,比如,你可以尝试写一个驱动程序、系统调用或文件系统,在实践的过程中再反复查阅参考书及源代码,这样才能达到掌握内核知识的目的。
致谢
我首先要特别感谢我的妻子邓咏秋,我记录开发笔记的初衷只是总结自己的经验和收获,供自己使用,或与朋友分享,是她促成了这本书的出版,使这本书能与千千万万读者分享。她在撰写博士学位论文的同时,热情而高效率地充当着我的“经纪人”,帮我承担了与出版社联系的大部分工作,使我能够全身心投入到书稿写作中去。
我还要真诚地感谢三家优秀的计算机图书出版社:电子工业出版社、清华大学出版社和人民邮电出版社,他们都愿意出版我的这本书。在此,我非常感谢他们对这本书的认可和兴趣。
电子工业出版社计算机图书事业部主任郭立女士的热情推动最终促成了我们与电子工业出版社的合作。她有敏锐的市场眼光,以专业的营销数据为我们分析了这本书的市场前景,对于作者的种种顾虑总是愿意真诚的倾听,并且能从作者角度替我们分析问题。在此书写作过程中,她多次邀请专家对此书提出有益意见,对于此书的修改完善起到了重要作用。很感谢郭立女士和电子工业出版社对本书的重视,以及她们为本书出版所做的一切。
由于作者水平有限,书中不足及错误之处在所难免,敬请专家和读者给予批评指正。
谨以此书献给正在从事和将要从事Linux内核编程的人们。
倪继利
2005年7月
倪继利著
2005年8月出版
ISBN 7-121-01518-5
900页
88.00元(估价)
倪
倪继利著
2005年8月出版
ISBN 7-121-01518-5
900页
88.00元(估价)
倪
内 容 简 介
本书作者在整理自己多年研发笔记的基础上,以精心挑选的典型开发实例向读者详细地讲述了内核源代码的各部分结构、原理及组成框架,主要分析了Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux 内核,精通Linux内核编程。全书分为20章,内容包括进程管理、进程间通信、内存管理、文件系统、I/O接口及资源管理、内核的编译及调试原理、网络通信、内核安全、USB驱动程序等。
对于想了解Linux开发,以及从事Linux内核编程的开发人员来说,本书是一本集大成之作,它既有讲解透彻的原理,也有详细实用的示例,更有作者多年从事实际开发工作的心得。本书主要针对从事Linux内
前言
Linux是开放的源代码,它具备了UNIX的全部特征,它还同POSIX标准兼容。Linux操作系统,如Red hat Linux 9,被广泛地应用于PC、服务器,还广泛地用于手机、PDA等高端嵌入设备。由于Linux综合了UNIX主要派生系统(包括SysV、BSD)的先进技术,因而,Linux操作系统上能运行原UNIX系统的各种应用程序,同时,还存在大量的应用程序开放源代码供开发者使用。而且,许多著名公司将自己的Linux程序源代码进行发布。这些因素导致了Linux在嵌入系统中的大量应用。
为什么写作本书
如今,Linux内核代码几乎是每个软件工程师必读的,但是内核代码复杂难懂。作为一名Linux编程者,我一向颇为留意内核编程方面的图书,我理想中的这本书应该是一本实践性很强的书,是真正从事Linux内核开发的人士写作的。由于我多年以来一直记有从事Linux内核开发的笔记,后来,我便想到,如果我从一名研发者的角度来写作这样一本书,把自己的笔记加以整理,那么,对读者的实践应该会有不小的帮助。在整理自己的开发笔记的基础上,我还查阅了大量相关资料,加强研究,力求融会贯通,费时两年,写成这本书。
Linux 2.6版内核改写了以前版本内核的绝大部分,本书主要针对目前Linux的最新版本2.6.11版,对以后的新版本也具有普适性。本书的主要目的是帮助软件工程师读懂linux2.6.11版本内核,并能开发各种驱动程序、编写内核模块。在这本书里,我将平常编程中遇到的重点、难点进行分析,并给予充分的论述,相信其中许多问题是其他内核编程者也会遇到的。对于一名软件工程师来说,本书有助于他们少走弯路,更快地掌握Linux 2.6.11内核源代码及编程技巧。
关于本书作者
笔者从在清华大学电子系读研究生起,就开始从事Linux内核编程,后又一直在外国著名公司从事Linux内核编程工作。先后从事过Linux内核的移植、USB驱动程序编写、内核安全程序的编写等。目前,Linux被广泛地应用于手机、PDA等高端嵌入设备,笔者在这方面有丰富的开发经验。
本书主要内容
本书共包括20章,每章的主要内容如下:
第1章“数据类型及链表”介绍了数据类型占用的空间及用户空间输出的数据类型,说明了内核通用链表的原理,还介绍了行内汇编语言的语法。
第2章“进程及进程调度”分析了进程结构及进程调度算法。
第3章“内核同步机制”介绍了内核的互斥机制:自旋锁、原子操作和信号量。还说明了RCU读写机制,及内核与用户空间进行通信的机制。
第4章“内存管理”介绍了虚拟内存及映射,还分析了物理内存的管理(它包括缓存的分配及回收,请页机制,交换空间等),还说明了内存缓冲池和大块内存的管理机制。
第5章“虚拟文件系统”介绍了虚拟文件系统的结构和实现文件操作的机制,还介绍了底层各种缓存的管理。
第6章“EXT2文件系统”介绍了EXT2文件系统逻辑分区的结构、节点和dentry的管理,说明了读写系统调用的具体实现过程。
第7章“其他文件系统”介绍了常用的一些文件系统:ramfs、proc、vfat、devfs和sysfs。
第8章“I/O端口资源管理”介绍了中断处理、DMA及电源管理的实现机制。
第9章“模块机制”介绍了内核模块的实现机制,还分析了内核空间的保护机制。
第10章“设备驱动程序”介绍了字符设备及块设备驱动程序的工作原理,分析了通用硬盘及块层的机制,还说明了如何编写字符设备与块设备驱动程序。
第11章“Flash闪存及SD/MMC卡”分析了MTD设备驱动程序和MMC/SD驱动程序,它们分别驱动Flash闪存和存储卡,是嵌入设备的主要存储设备。
第12章“Linux系统初始化”阐述了在i386机器上的BootLoader和嵌入设备上的Blob,分析了Linux系统的启动过程。
第13章“系统调用”分析了系统调用的实现机制。
第14章“Linux网络系统分层结构”介绍了数据包的传递过程、与应用层的接口、与底层的接口以及网络驱动程序的编写。
第15章“执行文件的运行过程”阐述了动态链接与静态链接的概念,并说明了动态链接中函数定位的原理。然后分析了ELF文件格式,以及ELF文件在内核中是如何加载运行的。
第16章“进程间通信”分析了进程间通信机制在内核中的实现原理。
第17章“Linux的安全策略”介绍了selinux的安全策略配置语言、selinux模块的实现,以及病毒防火墙的原理。
第18章“内核配置与编译”说明了内核的配置、配置语言的语法,还分析了makefile是如何进行内核编译的。
第19章“Linux内核调试”分析了内核调试的方法,控制台驱动程序以及如何将打印信息显示在控制台上,阐述了日志系统是如何工作的,还说明了ptrace调试跟踪的原理。
第20章“USB总线驱动程序”分析了USB总线接口驱动程序(包括USB总线驱动程序的结构、编写方法和USB接口的U盘设备驱动程序)。
附录A列表说明了系统调用的功能,供读者快速查询。
如何阅读本书
这是一本大厚书,读者应该怎样利用这本书呢?
在阅读此书前,读者应当学过操作系统原理、数据结构、计算机结构及组成、汇编语言及C语言等课程或具备这方面的知识。这本书章节的安排是依据读者对内核学习循序渐进的顺序设立的,建议初学者从前至后阅读。由于Linux内核复杂难懂,我建议读者分几遍阅读本书。
? 第一遍先将书通读,主要弄清楚概念,程序代码部分可以只是浏览一下。当对概念有初步认识时,再尝试编译安装内核,安装一个驱动程序模块。
? 第二遍再对照源代码详细看一个驱动程序,如:USB驱动程序,理解驱动程序模块是如果调用内核函数、注册驱动程序等,再反过来,仔细看这些内核函数的实现,就明白了内核为什么要写这些函数了。
? 第三遍再根据需要对照源程序看相关章节,例如:对照源程序看“内存管理”一章中vmolloc函数是如何实现的。这种阅读法使读者能从本书中获得最大收效,是学习内核的好方法。当然,如果你是一名内核精通者,也可以根据需要直接跳读到相关章节,查阅你需要的内容。
阅读内核是一个反复又枯燥的过程,读者只有在反复的研读中,才能逐渐使自己的内核知识条理化,在此基础上,你还需要去应用这些知识,比如,你可以尝试写一个驱动程序、系统调用或文件系统,在实践的过程中再反复查阅参考书及源代码,这样才能达到掌握内核知识的目的。
致谢
我首先要特别感谢我的妻子邓咏秋,我记录开发笔记的初衷只是总结自己的经验和收获,供自己使用,或与朋友分享,是她促成了这本书的出版,使这本书能与千千万万读者分享。她在撰写博士学位论文的同时,热情而高效率地充当着我的“经纪人”,帮我承担了与出版社联系的大部分工作,使我能够全身心投入到书稿写作中去。
我还要真诚地感谢三家优秀的计算机图书出版社:电子工业出版社、清华大学出版社和人民邮电出版社,他们都愿意出版我的这本书。在此,我非常感谢他们对这本书的认可和兴趣。
电子工业出版社计算机图书事业部主任郭立女士的热情推动最终促成了我们与电子工业出版社的合作。她有敏锐的市场眼光,以专业的营销数据为我们分析了这本书的市场前景,对于作者的种种顾虑总是愿意真诚的倾听,并且能从作者角度替我们分析问题。在此书写作过程中,她多次邀请专家对此书提出有益意见,对于此书的修改完善起到了重要作用。很感谢郭立女士和电子工业出版社对本书的重视,以及她们为本书出版所做的一切。
由于作者水平有限,书中不足及错误之处在所难免,敬请专家和读者给予批评指正。
谨以此书献给正在从事和将要从事Linux内核编程的人们。
倪继利
2005年7月