-
Linux设备驱动开发详解
本书是一本介绍Linux设备驱动开发理论、框架与实例的书,本书以Linux 2.6版本内核为蓝本,详细介绍自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞I/O、非阻塞I/O等Linux 设备驱动理论;字符设备、块设备、TTY设备、IC设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等Linux设备驱动的架构和框架中各个复杂数据架构和函数的关系,并讲解了Linux驱动开发的大量实例,使读者能够独立开发各类Linux设备驱动。本书内容全面,实例丰富,操作性强,语言通俗易懂,适合广大Linux开发人员、嵌入式工程师参考使用。 目录 第1篇 Linux设备驱动入门 第1章 设备驱动概述 1.1 设备驱动的作用 1.2 无操作系统时的设备驱动 1.3 有操作系统时的设备驱动 1.4 Linux设备驱动 1.4.1 设备的分类及特点 1.4.2 Linux设备驱动与整个软硬件系统的关系 1.4.3 编写Linux设备驱动的技术基础 1.4.4 Linux设备驱动的学习方法 1.5 设备驱动的HelloWorld:LED驱动 1.5.1 无操作系统时的LED驱动 1.5.2 Linux系统下的LED驱动 第2章 驱动设计的硬件基础 2.1 处理器 2.1.1 通用处理器 2.1.2 数字信号处理器 2.2 存储器 2.3 接口与总线 2.3.1 串口 2.3.2 I2C总线 2.3.3 USB 2.3.4 以太网接口 2.3.5 ISA总线 2.3.6 PCI和cPCI 2.4 CPLD和FPGA 2.5 原理图分析 2.5.1 原理图分析的内容 2.5.2 原理图的分析方法 2.6 硬件时序分析 2.6.1 时序分析的概念 2.6.2 典型硬件时序 2.7 仪器仪表使用 2.7.1 万用表 2.7.2 示波器 2.7.3 逻辑分析仪 2.8 总结 第3章 Linux内核及内核编程 3.1 Linux内核的发展与演变 3.2 Linux2.6内核的特点 3.3 Linux内核的组成 3.3.1 Linux内核源代码目录结构 3.3.2 Linux内核的组成部分 3.3.3 Linux内核空间与用户空间 3.4 Linux内核的编译及加载 3.4.1 Linux内核的编译 3.4.2 Kconfig和Makefile 3.4.3 Linux内核的引导 3.5 Linux下的C编程 3.5.1 Linux程序命名习惯 3.5.2 GNUC与ANSIC 3.5.3 do{}while(0) 3.5.4 goto 3.6 总结 第2篇 Linux设备驱动核心理论 第4章 Linux内核模块 4.1 Linux内核模块简介 4.2 Linux内核模块的程序结构 4.3 模块加载函数 4.4 模块卸载函数 4.5 模块参数 4.6 导出符号 4.7 模块声明与描述 4.8 模块的使用计数 4.9 模块的编译 4.10 模块与GPL 4.11 总结 第5章 Linux文件系统与设备文件系统 5.1 Linux文件操作 5.1.1 文件操作的相关系统调用 5.1.2 C库函数的文件操作 5.2 Linux文件系统 5.2.1 Linux文件系统目录结构 5.2.2 Linux文件系统与设备驱动 5.3 devfs设备文件系统 5.4 udev设备文件系统 5.4.1 udev与devfs的区别 5.4.2 sysfs文件系统与Linux设备模型 5.4.3 udev的组成 5.4.4 udev规则文件 5.4.5 创建和配置udev 5.5 总结 第6章 字符设备驱动 6.1 Linux字符设备驱动结构 6.1.1 cdev结构体 6.1.2 分配和释放设备号 6.1.3 file_operations结构体 6.1.4 Linux字符设备驱动的组成 6.2 globalmem虚拟设备实例描述 6.3 globalmem设备驱动 6.3.1 头文件、宏及设备结构体 6.3.2 加载与卸载设备驱动 6.3.3 读写函数 6.3.4 seek()函数 6.3.5 ioctl()函数 6.3.6 使用文件私有数据 6.4 globalmem驱动在用户空间的验证 6.5 总结 第7章 Linux设备驱动中的并发控制 7.1 并发与竞态 7.2 中断屏蔽 7.3 原子操作 7.3.1 整型原子操作 7.3.2 位原子操作 7.4 自旋锁 7.4.1 自旋锁的使用 7.4.2 读写自旋锁 7.4.3 顺序锁 7.4.4 读-拷贝-更新 7.5 信号量 7.5.1 信号量的使用 7.5.2 信号量用于同步 7.5.3 完成量用于同步 7.5.4 自旋锁vs信号量 7.5.5 读写信号量 7.6 互斥体 7.7 增加并发控制后的globalmem驱动 7.8 总结 第8章 Linux设备驱动中的阻塞与非阻塞I/O 8.1 阻塞与非阻塞I/O 8.1.1 等待队列 8.1.2 支持阻塞操作的globalfifo设备驱动 8.1.3 在用户空间验证globalfifo的读写 8.2 轮询操作 8.2.1 轮询的概念与作用 8.2.2 应用程序中的轮询编程 8.2.3 设备驱动中的轮询编程 8.3 支持轮询操作的globalfifo驱动 8.3.1 在globalfifo驱动中增加轮询操作 8.3.2 在用户空间验证globalfifo设备的轮询 8.4 总结 第9章 Linux设备驱动中的异步通知与异步I/O 9.1 异步通知的概念与作用 9.2 Linux异步通知编程 9.2.1 Linux信号 9.2.2 信号的接收 9.2.3 信号的释放 9.3 支持异步通知的globalfifo驱动 9.3.1 在globalfifo驱动中增加异步通知 9.3.2 在用户空间验证globalfifo的异步通知 9.4 Linux2.6异步I/O 9.4.1 AIO概念与GNUC库函数 9.4.2 使用信号作为AIO的通知 9.4.3 使用回调函数作为AIO的通知 9.4.4 AIO与设备驱动 9.5 总结 第10章 中断与时钟 10.1 中断与定时器 10.2 Linux中断处理程序架构 10.3 Linux中断编程 10.3.1 申请和释放中断 10.3.2 使能和屏蔽中断 10.3.3 底半部机制 10.3.4 实例:S3C2410实时钟中断 10.4 中断共享 10.5 内核定时器 10.5.1 内核定时器编程 10.5.2 实例:秒字符设备 10.6 内核延时 10.6.1 短延迟 10.6.2 长延迟 10.6.3 睡着延迟 10.7 总结 第11章 内存与I/O访问 11.1 CPU与内存和I/O 11.1.1 内存空间与I/O空间 11.1.2 内存管理单元MMU 11.2 Linux内存管理 11.3 内存存取 11.3.1 用户空间内存动态申请 11.3.2 内核空间内存动态申请 11.3.3 虚拟地址与物理地址关系 11.4 设备I/O端口和I/O内存的访问 11.4.1 LinuxI/O端口和I/O内存访问接口 11.4.2 申请与释放设备I/O端口和I/O内存 11.4.3 设备I/O端口和I/O内存访问流程 11.4.4 将设备地址映射到用户空间 11.5 I/O内存静态映射 11.6 DMA 11.6.1 DMA与Cache一致性 11.6.2 Linux下的DMA编程 11.7 总结 第12章 Linux字符设备驱动综合实例 第3篇 Linux设备驱动实例 第13章 Linux块设备驱动 第14章 Linux终端设备驱动 …… -
高性能Linux服务器构建实战
本书以构建高性能Linux服务器为核心内容,从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等多个方面深入讲解了如何构建高性能的Linux服务器。全书以实战性为导向,所有内容都来自于作者多年实践经验的总结,同时从社区中收集了大量Linux运维人员遇到的有代表性的疑难问题,并给出了优秀的解决方案,实践指导意义极强。 全书分为5个部分。Web应用篇详细介绍了Nginx、Varnish和Memcached这三款Linux服务器上极为常用的Web应用软件的安装、配置、管理、使用方法、工作原理和性能调优技巧。数据备份与恢复篇首先讲述了开源备份软件bacula的使用与管理技巧,并通过实例讲解了在bacula上进行各种备份与恢复操作的具体方法;其次讲解了开源数据镜像备份工具rsync和unison的使用,并通过两个企业级案例演示了这两个工具在生产环境中的使用过程;最后讲解了如何利用ext3grep工具来恢复误删除的数据文件和MySQL数据库的方法。网络存储应用篇首先系统地讲解了网络存储技术iSCSI的配置和使用,然后讲解了分布式存储系统MFS的使用和维护。运维监控与性能优化篇通过理论与实践相结合的方法讲解了如何利用Nagios进行性能监控,以及Linux服务器的性能分析原则和优化方法。集群高级应用篇是前面内容的综合,也是本书的核心,主要讲述了如何通过LVS+heartbeat、piranha、LVS+Keepalived来构建高可用的负载均衡集群,其次讲解了红帽集群套件RHCS的配置、管理、维护和监控,然后讲解了Oracle集群解决方案,即Oracle RAC数据库的构建、使用和维护。最后以构建一个MySQL+heartbeat+DRBD+LVS集群系统的实战案例结束全书,巧妙地将本书的所有核心内容都融合到了一起。 -
Linux Shell脚本攻略
《Linux Shell脚本攻略》通过细致剖析实际应用中的110多个案例,使许多看似复杂的Linux shell脚本任务迎刃而解。《Linux Shell脚本攻略》会帮助读者利用少量命令的组合完成诸如文本处理、文件管理、备份等复杂的数据管理工作。它将告诉你如何利用shell命令快速开发常规任务,综合应用grep、find、sed和awk等常用命令,凭借短短几个命令行从Web挖掘数据的shell脚本,利用归档工具运行并自动化各种任务,诸如自动备份和存储;帮助你理解文件系统、文件类型以及文件管理;用shell创建以及维护文件或目录归档、压缩格式和加密技术;通过srlell脚本设置以太网和无线LAN;使用登录技术监控网络上的各种动态。 -
The Linux Programming Interface
The Linux Programming Interface describes the Linux API (application programming interface)-the system calls, library functions, and other low-level interfaces that are used, directly or indirectly, by every program that runs on Linux. Programs that explicitly use these interfaces are commonly called system programs, and include applications such as shells, editors, windowing systems, terminal emulators, file managers, compilers, database management systems, virtual machines, network servers, and much of the other software that is employed on a daily basis on Linux systems. Extensively indexed and heavily cross-referenced, The Linux Programming Interface is both an introductory guide for readers new to the topic of system programming, and a comprehensive reference for experienced system programmers. Although this book goes into detail on a wealth of Linux-specific features, it gives careful attention to contemporary Unix programming standards and to portability issues. -
Linux内核完全剖析
本书对早期Linux操作系统内核全部代友文件进行了详细的剖析,旨在让读者在尽量短的时间内对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。虽然选择的版本较低,但该内核已能够正常编译运行,并且其中已包括了Linux工作原理的精髓。书中首先以Linux源代码版本的变迁为主线,简要介绍了Lin-ux系统的发展历史,同时着重说明了各个内核版本之间的主要区别和改进方面给出了选择0.11版内核源代码作为研究对象的原因。然后概要介绍了PC机的硬件组成结构、编制内核使用的汇编语言和C语言扩展部分,并且重点说明了80X86处理器在保护模下运行的编程方法。接着详细介绍了Linux内核源代码目录树组织结构,并依据该组织结构对所有内核程序和文件进行了注释和详细说明。为了加深读者的内核工作原理的理解,书中最后一章给出了围绕Linux 0.11系统的多个试验。试验中使用的相关程序均可从本书配套网站(www.oldinux.org)上下载。 -
Unix内核源码剖析
为什么要阅读内核源代码 ● 对计算机系统的全貌有更深入的了解 ● 对学到的算法和思路举一反三 ● 加深对操作系统的理解 ● 提升自身的技术水平 为什么选择UNIX V6? ● 代码行数约为1 万行 ● 有充实的资料可参考 ● 网罗了操作系统的基本功能 ● 简化的设计 ● 便于读者对系统有完整的了解 ● 有模拟器可供参考 本书是一本Unix内核源代码的阅读指南。作者结合UNIX V6已公开的相关文档,对其内核源码进行详细剖析,旨在让读者更深入地理解进程、中断、块I/O系统、文件系统、字符I/O系统、启动系统等操作系统的基本原理。 本书适合操作系统的初中级学习者阅读,特别适合通过大学课程和其他入门书对操作系统有所了解,但是对具体细节缺乏深入理解的读者,以及那些对操作系统的具体实现有兴趣的读者。