Linux设备驱动开发详解

出版社:人民邮电
出版日期:2008-2
ISBN:9787115172396
作者:宋宝华
页数:686页

作者简介

本书是一本介绍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终端设备驱动
……

书籍目录

第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 USB2.3.4 以太网接口2.3.5 ISA总线2.3.6 PCI和cPCI2.4 CPLD和FPGA2.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和Makefile3.4.3 Linux内核的引导3.5 Linux下的C编程3.5.1 Linux程序命名习惯3.5.2 GNUC与ANSIC3.5.3 do{}while(0)3.5.4 goto3.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 模块与GPL4.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 创建和配置udev5.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/O8.1 阻塞与非阻塞I/O8.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/O9.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/O9.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/O11.1.1 内存空间与I/O空间11.1.2 内存管理单元MMU11.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 DMA11.6.1 DMA与Cache一致性11.6.2 Linux下的DMA编程11.7 总结第12章 Linux字符设备驱动综合实例12.1 按键的设备驱动12.1.1 按键的硬件原理12.1.2 按键驱动中的数据结构12.1.3 按键驱动的模块加载和卸载函数12.1.4 按键设备驱动中断、定时器处理程序12.1.5 按键设备驱动的打开、释放函数12.1.6 按键设备驱动读函数12.2 触摸屏的设备驱动12.2.1 触摸屏的硬件原理12.2.2 触摸屏设备驱动中数据结构12.2.3 触摸屏驱动中的硬件控制12.2.4 触摸屏驱动模块加载和卸载函数12.2.5 触摸屏驱动中断、定时器处理程序12.2.6 触摸屏设备驱动的打开、释放函数12.2.7 触摸屏设备驱动的读函数12.2.8 触摸屏设备驱动的轮询与异步通知12.2.9 Linux输入子系统12.3 DSPHPI的设备驱动12.3.1 HPI接口的硬件原理12.3.2 HPI接口设备驱动中数据结构12.3.3 HPI接口设备驱动的读写函数12.4 NVRAM设备驱动12.4.1 NVRAM设备驱动的数据结构12.4.2 NVRAM设备驱动的模块加载与卸载函数12.4.3 NVRAM设备驱动读写函数12.4.4 NVRAM设备驱动的seek函数12.5 看门狗设备驱动12.5.1 看门狗硬件原理12.5.2 看门狗驱动中的数据结构12.5.3 看门狗驱动模块的加载和卸载函数12.5.4 看门狗驱动探测和移除函数12.5.5 看门狗驱动的挂起和恢复函数12.5.6 看门狗驱动的打开和释放函数12.5.7 看门狗驱动写函数12.6 总结第3篇 Linux设备驱动实例第13章 Linux块设备驱动13.1 块设备的I/O操作特点13.2 Linux块设备驱动结构13.2.1 block_device_operations结构体13.2.2 gendisk结构体13.2.3 request与bio结构体13.2.4 块设备驱动注册与注销13.3 Linux块设备驱动的模块加载与卸载13.4 块设备的打开与释放13.5 块设备驱动的ioctl函数13.6 块设备驱动的I/O请求处理13.6.1 使用请求队列13.6.2 不使用请求队列13.7 实例1:RamDisk驱动13.7.1 RamDisk的硬件原理13.7.2 RamDisk驱动模块的加载与卸载13.7.3 RamDisk设备驱动block_device_operations及成员函数13.7.4 RamDiskI/O请求处理13.8 实例2:IDE硬盘设备驱动13.8.1 IDE硬盘设备原理13.8.2 IDE硬盘设备驱动的block_device_operations及成员函数13.8.3 IDE硬盘设备驱动的I/O请求处理13.8.4 在内核中增加对新系统IDE设备的支持13.9 总结第14章 Linux终端设备驱动14.1 终端设备14.2 终端设备驱动结构14.3 终端设备驱动的初始化与释放14.3.1 模块加载与卸载函数14.3.2 打开与关闭函数14.4 数据发送和接收14.5 tty线路设置14.5.1 线路设置用户空间接口14.5.2 tty驱动的set_termios函数14.5.3 tty驱动的tiocmget和tiocmset函数14.5.4 tty驱动的ioctl函数14.6 UART设备驱动14.7 S3C2410UART的驱动实例14.7.1 S3C2410串口硬件描述14.7.2 S3C2410串口驱动的数据结构14.7.3 S3C2410串口驱动的初始化与释放14.7.4 S3C2410串口数据收发14.7.5 S3C2410串口线路设置14.8 总结第15章 Linux的I2C核心、总线与设备驱动15.1 Linux的I2C体系结构15.2 LinuxI2C核心15.3 LinuxI2C总线驱动15.3.1 I2C适配器驱动加载与卸载15.3.2 I2C总线通信方法15.4 LinuxI2C设备驱动15.4.1 LinuxI2C设备驱动的模块加载与卸载15.4.2 LinuxI2C设备驱动的i2c_driver成员函数15.4.3 LinuxI2C设备驱动的文件操作接口15.4.4 Linux的i2c-dev.c文件分析15.5 S3C2410I2C总线驱动实例15.5.1 S3C2410I2C控制器硬件描述15.5.2 S3C2410I2C总线驱动总体分析15.5.3 S3C2410I2C适配器驱动的模块加载与卸载15.5.4 S3C2410I2C总线通信方法15.6 SAA7113H视频AD芯片的I2C设备驱动实例15.6.1 SAA7113H视频AD芯片硬件描述15.6.2 SAA7113H视频AD芯片驱动的模块加载与卸载15.6.3 SAA7113H设备驱动的i2c_driver成员函数15.7 总结第16章 Linux网络设备驱动16.1 Linux网络设备驱动的结构16.1.1 网络协议接口层16.1.2 网络设备接口层16.1.3 设备驱动功能层16.1.4 网络设备与媒介层16.2 网络设备驱动的注册与注销16.3 网络设备的初始化16.4 网络设备的打开与释放16.5 数据发送流程16.6 数据接收流程16.7 网络连接状态16.8 参数设置和统计数据16.9 CS8900网卡设备驱动实例16.9.1 CS8900网卡硬件描述16.9.2 CS8900网卡驱动设计分析16.9.3 CS8900网卡注册、初始化与注销16.9.4 CS8900网卡发送数据流程16.9.5 CS8900网卡接收数据流程16.10 总结第17章 Linux音频设备驱动17.1 数字音频设备17.2 音频设备硬件接口17.2.1 PCM接口17.2.2 IIS接口17.2.3 AC97接口17.3 LinuxOSS音频设备驱动17.3.1 OSS驱动的组成17.3.2 mixer接口17.3.3 dsp接口17.3.4 OSS用户空间编程17.4 LinuxALSA音频设备驱动17.4.1 ALSA的组成17.4.2 card和组件管理17.4.3 PCM设备17.4.4 控制接口17.4.5 AC97API接口17.4.6 ALSA用户空间编程17.5 S3C2410+UDA1341OSS驱动实例17.5.1 S3C2410与UDA1341接口硬件描述17.5.2 注册dsp和mixer接口17.5.3 mixer接口的I/O控制函数17.5.4 dsp接口音频数据传输17.6 SA1100+UDA1341ALSA驱动实例17.6.1 card注册与注销17.6.2 PCM设备的实现17.6.3 控制接口的实现17.7 PXA255+AC97ALSA驱动实例17.8 总结第18章 LCD设备驱动18.1 LCD硬件原理18.2 帧缓冲18.2.1 帧缓冲的概念18.2.2 显示缓冲区与显示点18.2.3 Linux帧缓冲相关数据结构与函数18.3 Linux帧缓冲设备驱动结构18.4 帧缓冲设备驱动的模块加载与卸载函数18.5 帧缓冲设备显示缓冲区的申请与释放18.6 帧缓冲设备的参数设置18.6.1 定时参数18.6.2 像素时钟18.6.3 颜色位域18.6.4 固定参数18.7 帧缓冲设备驱动的fb_ops成员函数18.8 LCD设备驱动的读写、mmap和ioctl函数18.9 帧缓冲设备的用户空间访问18.10 Linux图形用户界面18.10.1 Qt-X11/QtEmbedded/Qtopia18.10.2 Microwindows/Nano-X18.10.3 MiniGUI18.11 实例:S3C2410LCD设备驱动18.11.1 S3C2410LCD控制器硬件描述18.11.2 S3C2410LCD驱动的模块加载与卸载函数18.11.3 S3C2410LCD驱动的探测与移除函数18.11.4 S3C2410LCD驱动挂起与恢复函数18.11.5 S3C2410LCD驱动的fb_ops成员函数18.12 总结第19章 Flash设备驱动19.1 LinuxFlash驱动结构19.1.1 LinuxMTD系统层次19.1.2 LinuxMTD系统接口19.1.3 MTD用户空间编程19.2 NORFlash驱动19.3 NANDFlash驱动19.4 NORFlash驱动实例:S3C2410外围的NORFlash驱动19.5 NANDFlash驱动实例:S3C2410外围的NANDFlash驱动19.5.1 S3C2410NAND控制器硬件描述19.5.2 nand_chip初始化和成员函数19.5.3 NAND设备驱动初始化与释放19.6 Flash文件系统的建立19.6.1 Flash转换层19.6.2 CramFS19.6.3 JFFS/JFFS219.6.4 YAFFS/YAFFS219.7 总结第20章 USB主机与设备驱动20.1 LinuxUSB驱动层次20.1.1 主机侧与设备侧USB驱动20.1.2 设备、配置、接口、端点20.2 USB主机驱动20.2.1 USB主机驱动的整体结构20.2.2 实例:S3C2410USB主机驱动20.3 USB设备驱动20.3.1 USB设备驱动整体结构20.3.2 USB请求块(URB)20.3.3 探测和断开函数20.3.4 USB骨架程序20.4 USB设备驱动实例20.4.1 USB串口驱动20.4.2 USB键盘驱动20.5 总结第21章 PCI设备驱动21.1 PCI总线与配置空间21.1.1 PCI总线的Linux描述21.1.2 PCI设备的Linux描述21.1.3 PCI配置空间访问21.2 PCI设备驱动结构21.2.1 pci_driver结构体21.2.2 PCI设备驱动的组成21.2.3 旧版内核的PCI设备探测21.3 实例:Intel810主板声卡驱动21.4 总结第4篇 Linux设备驱动测试、移植第22章 Linux设备驱动的调试22.1 Linux开发环境建设22.1.1 实验室建设22.1.2 工具链22.1.3 串口工具22.2 GDB调试器用法22.2.1 GDB基本用法22.2.2 DDD图形界面调试工具22.3 Linux内核调试22.4 内核打印信息-printk()22.5 使用/proc22.6 Oops22.7 监视工具22.8 内核调试器22.8.1 kcore22.8.2 KDB22.8.3 KGDB22.9 使用仿真器调试内核22.10 应用程序调试22.11 总结第23章 Linux设备驱动的移植23.1 编写可移植的设备驱动23.1.1 可移植的数据类型23.1.2 结构体对界23.1.3 LittleEndian与BigEndian23.1.4 内存页面大小23.2 巧用同类设备驱动23.2.1 巧用demo板驱动23.2.2 巧用类似芯片的驱动程序23.2.3 借用芯片厂商的范例程序23.3 从Linux2.4移植设备驱动到Linux2.623.4 Linux与其他操作系统之间的驱动移植23.5 总结参考文献

编辑推荐

  业界权威机构和专家强力推荐,多年培训、研发经验的总结。  设备驱动程序是嵌入式操作系统的重要模块,也是难点之一,Linux设备驱动程序更以复杂和繁多而著名,本书的作者集多年授课和开发的经验,以简洁的语言和丰富的实例讲述了这一技术,深入浅出,值得一读。  北京麦克泰软件技术有限公司(BMR)董事长/电子产品世界杂志编委 何小庆  本书有个非常突出的特点——实用,全书以大量实例来引导读者编写以及移植Linux设备驱动,这些实例是作者多年Linux设备驱动开发从业经验的总结,读者一定会从中受益。  中国软件行业协会嵌入式系统分会秘书长郭淳学  在Linux系统广泛应用、嵌入式系统飞速发展的今天,Linux没备驱动正在、发挥着越来越大的作用,这本书是学习Linux设备驱动很好的选择。  信息产业部软件与集成电路促进中心(CSIP)教育培训部主任杜广斌

图书封面


 Linux设备驱动开发详解下载 更多精彩书评



发布书评

 
 


精彩书评 (总计1条)

  •     书中有错,有疏漏,有讲得不深入的地方,没错,但是这书实在。我相信现在没有人在看内核框架编写或移植驱动的时候会同时只看一本书在一棵树上吊死的

精彩短评 (总计17条)

  •     还行吧,什么都介绍到了,但是又不深入。查个模板API啥的可以看看。
  •     入门级参考,可以作为参考书,随手翻翻。
  •     一般般
  •     这本书写得还不错,主要是比那本经典的linux驱动更加通俗易懂一些……
  •     大而全,注定不可能深入,入门不错,用6410的。
  •     烂的不可思议,天下文章一大抄,只要是技术类书籍,国内挂羊头卖狗肉那帮教授孙子一个比一个会CTRL+V.我擦,就这书还好意思出来混口饭吃,就忽悠学生还行。现在人心太黑了。
  •     驱动开发手册,随时翻翻
  •     配合ldd3非常不错
  •     还可以,主要是从自我理解角度来讲的,对于入门级较为有用。
  •     不错!linux驱动讲得挺全面的
  •     此书非常全面的讲解了linux内核驱动开发的原理和方法,内容很详尽,给的例子直观易懂,是一本比较好的嵌入式linux驱动开发培训的好书,值得反复学习。
  •     初学还是很不错的
  •     驱动开发之经典!
  •     大体看了一下。
  •     比老外的那本结构紧凑,看着顺当些
  •     国内算写的最好的关于Linux驱动方面的书了。语言诙谐幽默,适合驱动开发者细读
  •     从师兄那里蹭来的
 

农业基础科学,时尚,美术/书法,绘画,软件工程/开发项目管理,研究生/本专科,爱情/情感,动漫学堂PDF下载,。 PDF下载网 

PDF下载网 @ 2024