0 0 0

Linux设备驱动开发详解:基于最新的Linux4.0内核.epub

月球上的种花人
1月前 320
我用夸克网盘分享了「Linux设备驱动开发详解:基于最新的Linux4.0内核.epub」,点击链接即可保存。打开「夸克APP」在线查看,支持多种文档格式转换。
Linux设备驱动开发详解 作者: 宋宝华 出版社: 机械工业出版社 副标题: 基于最新的Linux 4.0内核 出版年: 2015-8 页数: 618 定价: 89.00元 装帧: 平装 丛书: 电子与嵌入式系统设计译丛 ISBN: 9787111507895

内容简介

对于嵌入式工程师来说,进入更高阶段后,学习Linux设备驱动开发无疑就是职业生涯的一次“重生”。这是因为Linux设备驱动开发不仅仅涉及操作系统的转换,开发方式的转换,更重要的是思维上的转变。对于Linux这样一个复杂系统,如何从复杂的代码中抓住设备驱动开发的关键是任何一个Linux设备驱动开发者入门时需要面对的挑战。除了知识、工具之外,往往还需要思路上的指导。本书不但帮助Linux设备驱动开发的初学者厘清必要的概念,还从具体的实例、设备驱动开发的指导原则循序渐进地引导读者渐入学习佳境。为了让读者能够达到Linux设备驱动开发的至臻境界,作者更是从软件工程的角度抽象出设备驱动开发的一般思想。毫无疑问,本书将成为读者学习Linux设备驱动开发过程中的一座“灯塔”。

作者简介

宋宝华, Linux布道者,知名嵌入式系统专家,《Essential Linux Device Drivers》译者。作为最早从事Linux内核与设备驱动研究的专家之一,他在众多国内外知名企业开展Linux技术培训。他也是一位活跃的Linux开发者和深度实践者,为Linux官方内核贡献了大量的Linux源码并承担代码审核工作。至今已向Linux官方内核提交逾数万行代码和几百个补丁。他的《Linux设备驱动开发详解》系列书在嵌入式Linux开发者中有口皆碑,是众多Linux书籍中为数不多的畅销书。

网友热评

伊森亨特: 为什么08年的版本分数高,这个分数这么低呢

图书目录

赞誉 推荐序一 推荐序二 前言 第1章 Linux设备驱动概述及开发环境构建1 1.1 设备驱动的作用1 1.2 无操作系统时的设备驱动2 1.3 有操作系统时的设备驱动4 1.4 Linux设备驱动5 1.4.1 设备的分类及特点5 1.4.2 Linux设备驱动与整个软硬件系统的关系6 1.4.3 Linux设备驱动的重点、难点7 1.5 Linux设备驱动的开发环境构建8 1.5.1 PC上的Linux环境8 1.5.2 QEMU实验平台11 1.5.3 源代码阅读和编辑13 1.6 设备驱动HelloWorld:LED驱动15 1.6.1 无操作系统时的LED驱动15 1.6.2 Linux下的LED驱动15 第2章 驱动设计的硬件基础20 2.1 处理器20 2.1.1 通用处理器20 2.1.2 数字信号处理器22 2.2 存储器24 2.3 接口与总线28 2.3.1 串口28 2.3.2 I2C29 2.3.3 SPI30 2.3.4 USB31 2.3.5 以太网接口33 2.3.6 PCI和PCI-E34 2.3.7 SD和SDIO36 2.4 CPLD和FPGA37 2.5 原理图分析40 2.6 硬件时序分析42 2.6.1 时序分析的概念42 2.6.2 典型的硬件时序43 2.7 芯片数据手册阅读方法44 2.8 仪器仪表使用47 2.8.1 万用表47 2.8.2 示波器47 2.8.3 逻辑分析仪49 2.9 总结51 第3章 Linux内核及内核编程52 3.1 Linux内核的发展与演变52 3.2 Linux2.6后的内核特点56 3.3 Linux内核的组成59 3.3.1 Linux内核源代码的目录结构59 3.3.2 Linux内核的组成部分60 3.3.3 Linux内核空间与用户空间64 3.4 Linux内核的编译及加载64 3.4.1 Linux内核的编译64 3.4.2 Kconfig和Makefile66 3.4.3 Linux内核的引导74 3.5 Linux下的C编程特点75 3.5.1 Linux编码风格75 3.5.2 GNUC与ANSIC78 3.5.3 do{}while(0)语句83 3.5.4 goto语句85 3.6 工具链85 3.7 实验室建设88 3.8 串口工具89 3.9 总结91 第4章 Linux内核模块92 4.1 Linux内核模块简介92 4.2 Linux内核模块程序结构95 4.3 模块加载函数95 4.4 模块卸载函数97 4.5 模块参数97 4.6 导出符号99 4.7 模块声明与描述100 4.8 模块的使用计数100 4.9 模块的编译101 4.10 使用模块“绕开”GPL102 4.11 总结103 第5章 Linux文件系统与设备文件104 5.1 Linux文件操作104 5.1.1 文件操作系统调用104 5.1.2 C库文件操作108 5.2 Linux文件系统109 5.2.1 Linux文件系统目录结构109 5.2.2 Linux文件系统与设备驱动110 5.3 devfs114 5.4 udev用户空间设备管理116 5.4.1 udev与devfs的区别116 5.4.2 sysfs文件系统与Linux设备模型119 5.4.3 udev的组成128 5.4.4 udev规则文件129 5.5 总结133 第6章 字符设备驱动134 6.1 Linux字符设备驱动结构134 6.1.1 cdev结构体134 6.1.2 分配和释放设备号136 6.1.3 file_operations结构体136 6.1.4 Linux字符设备驱动的组成138 6.2 globalmem虚拟设备实例描述142 6.3 globalmem设备驱动142 6.3.1 头文件、宏及设备结构体142 6.3.2 加载与卸载设备驱动143 6.3.3 读写函数144 6.3.4 seek函数146 6.3.5 ioctl函数146 6.3.6 使用文件私有数据148 6.4 globalmem驱动在用户空间中的验证156 6.5 总结157 第7章 Linux设备驱动中的并发控制158 7.1 并发与竞态158 7.2 编译乱序和执行乱序160 7.3 中断屏蔽165 7.4 原子操作166 7.4.1 整型原子操作167 7.4.2 位原子操作168 7.5 自旋锁169 7.5.1 自旋锁的使用169 7.5.2 读写自旋锁173 7.5.3 顺序锁174 7.5.4 读-复制-更新176 7.6 信号量181 7.7 互斥体183 7.8 完成量184 7.9 增加并发控制后的globalmem的设备驱动185 7.10 总结188 第8章 Linux设备驱动中的阻塞与非阻塞I/O189 8.1 阻塞与非阻塞I/O189 8.1.1 等待队列191 8.1.2 支持阻塞操作的globalfifo设备驱动194 8.1.3 在用户空间验证globalfifo的读写198 8.2 轮询操作198 8.2.1 轮询的概念与作用198 8.2.2 应用程序中的轮询编程199 8.2.3 设备驱动中的轮询编程201 8.3 支持轮询操作的globalfifo驱动202 8.3.1 在globalfifo驱动中增加轮询操作202 8.3.2 在用户空间中验证globalfifo设备的轮询203 8.4 总结205 第9章 Linux设备驱动中的异步通知与异步I/O206 9.1 异步通知的概念与作用206 9.2 Linux异步通知编程207 9.2.1 Linux信号207 9.2.2 信号的接收208 9.2.3 信号的释放210 9.3 支持异步通知的globalfifo驱动212 9.3.1 在globalfifo驱动中增加异步通知212 9.3.2 在用户空间中验证globalfifo的异步通知214 9.4 Linux异步I/O215 9.4.1 AIO概念与GNUC库AIO215 9.4.2 Linux内核AIO与libaio219 9.4.3 AIO与设备驱动222 9.5 总结223 第10章 中断与时钟224 10.1 中断与定时器224 10.2 Linux中断处理程序架构227 10.3 Linux中断编程228 10.3.1 申请和释放中断228 10.3.2 使能和屏蔽中断230 10.3.3 底半部机制230 10.3.4 实例:GPIO按键的中断235 10.4 中断共享237 10.5 内核定时器238 10.5.1 内核定时器编程238 10.5.2 内核中延迟的工作delayed_work242 10.5.3 实例:秒字符设备243 10.6 内核延时247 10.6.1 短延迟247 10.6.2 长延迟248 10.6.3 睡着延迟248 10.7 总结250 第11章 内存与I/O访问251 11.1 CPU与内存、I/O251 11.1.1 内存空间与I/O空间251 11.1.2 内存管理单元252 11.2 Linux内存管理256 11.3 内存存取261 11.3.1 用户空间内存动态申请261 11.3.2 内核空间内存动态申请262 11.4 设备I/O端口和I/O内存的访问267 11.4.1 LinuxI/O端口和I/O内存访问接口267 11.4.2 申请与释放设备的I/O端口和I/O内存268 11.4.3 设备I/O端口和I/O内存访问流程269 11.4.4 将设备地址映射到用户空间270 11.5 I/O内存静态映射276 11.6 DMA277 11.6.1 DMA与Cache一致性278 11.6.2 Linux下的DMA编程279 11.7 总结285 第12章 Linux设备驱动的软件架构思想286 12.1 Linux驱动的软件架构286 12.2 platform设备驱动290 12.2.1 platform总线、设备与驱动290 12.2.2 将globalfifo作为platform设备293 12.2.3 platform设备资源和数据295 12.3 设备驱动的分层思想299 12.3.1 设备驱动核心层和例化299 12.3.2 输入设备驱动301 12.3.3 RTC设备驱动306 12.3.4 Framebuffer设备驱动309 12.3.5 终端设备驱动311 12.3.6 misc设备驱动316 12.3.7 驱动核心层321 12.4 主机驱动与外设驱动分离的设计思想321 12.4.1 主机驱动与外设驱动分离321 12.4.2 LinuxSPI主机和设备驱动322 12.5 总结330 第13章 Linux块设备驱动331 13.1 块设备的I/O操作特点331 13.2 Linux块设备驱动结构332 13.2.1 block_device_operations结构体332 13.2.2 gendisk结构体334 13.2.3 bio、request和request_queue335 13.2.4 I/O调度器339 13.3 Linux块设备驱动的初始化340 13.4 块设备的打开与释放342 13.5 块设备驱动的ioctl函数342 13.6 块设备驱动的I/O请求处理343 13.6.1 使用请求队列343 13.6.2 不使用请求队列347 13.7 实例:vmem_disk驱动349 13.7.1 vmem_disk的硬件原理349 13.7.2 vmem_disk驱动模块的加载与卸载349 13.7.3 vmem_disk设备驱动的block_device_operations351 13.7.4 vmem_disk的I/O请求处理352 13.8 LinuxMMC子系统354 13.9 总结357 第14章 Linux网络设备驱动358 14.1 Linux网络设备驱动的结构358 14.1.1 网络协议接口层359 14.1.2 网络设备接口层363 14.1.3 设备驱动功能层367 14.2 网络设备驱动的注册与注销367 14.3 网络设备的初始化369 14.4 网络设备的打开与释放370 14.5 数据发送流程371 14.6 数据接收流程372 14.7 网络连接状态375 14.8 参数设置和统计数据377 14.9 DM9000网卡设备驱动实例380 14.9.1 DM9000网卡硬件描述380 14.9.2 DM9000网卡驱动设计分析380 14.10 总结386 第15章 LinuxI2C核心、总线与设备驱动387 15.1 LinuxI2C体系结构387 15.2 LinuxI2C核心394 15.3 LinuxI2C适配器驱动396 15.3.1 I2C适配器驱动的注册与注销396 15.3.2 I2C总线的通信方法397 15.4 LinuxI2C设备驱动399 15.4.1 LinuxI2C设备驱动的模块加载与卸载400 15.4.2 LinuxI2C设备驱动的数据传输400 15.4.3 Linux的i2c-dev.c文件分析400 15.5 TegraI2C总线驱动实例405 15.6 AT24xxEEPROM的I2C设备驱动实例410 15.7 总结413 第16章 USB主机、设备与Gadget驱动414 16.1 LinuxUSB驱动层次414 16.1.1 主机侧与设备侧USB驱动414 16.1.2 设备、配置、接口、端点415 16.2 USB主机控制器驱动420 16.2.1 USB主机控制器驱动的整体结构420 16.2.2 实例:ChipideaUSB主机驱动425 16.3 USB设备驱动425 16.3.1 USB设备驱动的整体结构425 16.3.2 USB请求块430 16.3.3 探测和断开函数435 16.3.4 USB骨架程序436 16.3.5 实例:USB键盘驱动443 16.4 USBUDC与Gadget驱动446 16.4.1 UDC和Gadget驱动的关键数据结构与API446 16.4.2 实例:ChipideaUSBUDC驱动451 16.4.3 实例:LoopbackFunction驱动453 16.5 USBOTG驱动456 16.6 总结458 第17章 I2C、SPI、USB驱动架构类比459 17.1 I2C、SPI、USB驱动架构459 17.2 I2C主机和外设眼里的Linux世界460 第18章 ARMLinux设备树461 18.1 ARM设备树起源461 18.2 设备树的组成和结构462 18.2.1 DTS、DTC和DTB等462 18.2.2 根节点兼容性468 18.2.3 设备节点兼容性470 18.2.4 设备节点及label的命名475 18.2.5 地址编码477 18.2.6 中断连接479 18.2.7 GPIO、时钟、pinmux连接480 18.3 由设备树引发的BSP和驱动变更484 18.4 常用的OFAPI490 18.5 总结493 第19章 Linux电源管理的系统架构和驱动494 19.1 Linux电源管理的全局架构494 19.2 CPUFreq驱动495 19.2.1 SoC的CPUFreq驱动实现495 19.2.2 CPUFreq的策略501 19.2.3 CPUFreq的性能测试和调优501 19.2.4 CPUFreq通知502 19.3 CPUIdle驱动504 19.4 PowerTop508 19.5 Regulator驱动508 19.6 OPP511 19.7 PMQoS515 19.8 CPU热插拔518 19.9 挂起到RAM522 19.10 运行时的PM528 19.11 总结534 第20章 Linux芯片级移植及底层驱动535 20.1 ARMLinux底层驱动的组成和现状535 20.2 内核节拍驱动536 20.3 中断控制器驱动541 20.4 SMP多核启动以及CPU热插拔驱动549 20.5 DEBUG_LL和EARLY_PRINTK的设置556 20.6 GPIO驱动557 20.7 pinctrl驱动560 20.8 时钟驱动572 20.9 dmaengine驱动578 20.10 总结580 第21章 Linux设备驱动的调试581 21.1 GDB调试器的用法581 21.1.1 GDB的基本用法581 21.1.2 DDD图形界面调试工具591 21.2 Linux内核调试594 21.3 内核打印信息——printk()596 21.4 DEBUG_LL和EARLY_PRINTK599 21.5 使用“/proc”600 21.6 Oops606 21.7 BUG_ON()和WARN_ON()608 21.8 strace609 21.9 KGDB610 21.10 使用仿真器调试内核612 21.11 应用程序调试613 21.12 Linux性能监控与调优工具616 21.13 总结618

Linux设备驱动开发详解:基于最新的Linux4.0内核.epub"网盘下载"

版权说明

1、本站不保存、不存储任何实质资源,以上二维码指向为网盘资源链接,其内容归对应版权方所有
2、如有侵犯版权的情况,请点击下面举报/反馈按钮反馈或发送邮件[email protected]投诉说明情况
3、我们核实后将第一时间删除相关页面内容,谢谢理解和配合

这些人下载过 (12)
  • 感觉男神的身上有wifi
  • 唯我独尊
  • 寄信给风
  • 二维马
  • 我不会写诗
  • 住平生
  • 披谎
  • 手持温柔刀
  • 性命
  • 墨香书卷
  • 离散的风
  • 花心落荒而逃
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!