王朝网络
分享
 
 
 

Linux设备驱动开发详解(第2版) (其他)

王朝导购·作者佚名
 
  点此进入淘宝搜索页搜索
  特别声明:本站仅为商品信息简介,并不出售商品,您可点击文中链接进入淘宝网搜索页搜索该商品,有任何问题请与具体淘宝商家联系。
  参考价格: 点此进入淘宝搜索页搜索
  分类: 图书,计算机与互联网,操作系统,Linux,Linux 编程开发,
  品牌: 华清远见嵌入式培训中心 宋宝华 编著

基本信息出版社:人民邮电出版社; 第02版其他:632页开本:16开ISBN:9787115236579条形码:9787115236579ASIN:B004A7L87I商品描述内容简介本书是一本介绍Linux设备驱动开发理论、框架与实例的书,本书基于LDD6410开发板,以Linux 2.6版本内核为蓝本,详细介绍自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞I/O、非阻塞I/O等Linux设备驱动理论;字符设备、块设备、TTY设备、I2C设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等Linux设备驱动的架构和框架中各个复杂数据架构和函数的关系,并讲解了Linux驱动开发的大量实例,使读者能够独立开发各类Linux设备驱动。 本书内容全面,实例丰富,操作性强,语言通俗易懂,适合广大Linux开发人员、嵌入式工程师参考使用。目录目录 第1篇Linux设备驱动入门 第1章Linux设备驱动概述及开发环境构建2 1.1设备驱动的作用3 1.2无操作系统时的设备驱动3 1.3有操作系统时的设备驱动5 1.4Linux设备驱动6 1.4.1设备的分类及特点6 1.4.2Linux设备驱动与整个软硬件系统的关系7 1.4.3Linux设备驱动的重点、难点8 1.5Linux设备驱动开发环境构建8 1.5.1PC上的Linux环境8 1.5.2LDD6410开发板11 1.5.3工具链安装13 1.5.4主机端nfs和tftp服务安装14 1.5.5源代码阅读和编辑14 1.6设备驱动Hello World:LED驱动15 1.6.1无操作系统时的LED驱动15 1.6.2Linux下的LED驱动16 1.7全书结构19 第2章驱动设计的硬件基础21 2.1处理器22 2.1.1通用处理器22 2.1.2数字信号处理器23 2.2存储器25 2.3接口与总线29 2.3.1串口29 2.3.2I2C30 2.3.3USB31 2.3.4以太网接口33 2.3.5ISA34 2.3.6PCI和cPCI35 2.4CPLD和FPGA38 2.5原理图分析41 2.5.1原理图分析的内容41 2.5.2原理图的分析方法41 2.6硬件时序分析43 2.6.1时序分析的概念43 2.6.2典型硬件时序44 2.7芯片手册阅读方法45 2.8仪器仪表使用48 2.8.1万用表48 2.8.2示波器48 2.8.3逻辑分析仪50 2.9总结52 第3章Linux内核及内核编程53 3.1Linux内核的发展与演变54 3.2Linux 2.6内核的特点55 3.3Linux内核的组成56 3.3.1Linux内核源代码目录结构56 3.3.2Linux内核的组成部分57 3.3.3Linux内核空间与用户空间60 3.4Linux内核的编译及加载60 3.4.1Linux内核的编译60 3.4.2Kconfig和Makefile62 3.4.3Linux内核的引导69 3.5Linux下的C编程特点71 3.5.1Linux编码风格71 3.5.2GNU C与ANSI C73 3.5.3do{ }while(0)77 3.5.4goto78 3.6总结79 第2篇Linux设备驱动核心理论 第4章Linux内核模块82 4.1Linux内核模块简介83 4.2Linux内核模块程序结构85 4.3模块加载函数85 4.4模块卸载函数86 4.5模块参数87 4.6导出符号88 4.7模块声明与描述89 4.8模块的使用计数89 4.9模块的编译90 4.10使用模块绕开GPL91 4.11总结91 第5章Linux文件系统与设备文件系统92 5.1Linux文件操作93 5.1.1文件操作系统调用93 5.1.2C库文件操作95 5.2Linux文件系统97 5.2.1Linux文件系统目录结构97 5.2.2Linux文件系统与设备驱动98 5.3devfs设备文件系统101 5.4udev设备文件系统102 5.4.1udev与devfs的区别102 5.4.2sysfs文件系统与Linux设备模型104 5.4.3udev的组成110 5.4.4udev规则文件111 5.4.5创建和配置mdev113 5.5LDD6410的SD和NAND文件系统114 5.6总结117 第6章字符设备驱动118 6.1Linux字符设备驱动结构119 6.1.1cdev结构体119 6.1.2分配和释放设备号120 6.1.3file_operations结构体120 6.1.4Linux字符设备驱动的组成122 6.2globalmem虚拟设备实例描述124 6.3globalmem设备驱动125 6.3.1头文件、宏及设备结构体125 6.3.2加载与卸载设备驱动126 6.3.3读写函数127 6.3.4seek函数128 6.3.5ioctl函数129 6.3.6使用文件私有数据130 6.4globalmem驱动在用户空间的验证136 6.5总结138 第7章Linux设备驱动中的并发控制139 7.1并发与竞态140 7.2中断屏蔽141 7.3原子操作142 7.3.1整型原子操作142 7.3.2位原子操作142 7.4自旋锁143 7.4.1自旋锁的使用143 7.4.2读写自旋锁145 7.4.3顺序锁147 7.4.4读-拷贝-更新148 7.5信号量152 7.5.1信号量的使用152 7.5.2信号量用于同步154 7.5.3完成量用于同步154 7.5.4自旋锁vs信号量155 7.5.5读写信号量155 7.6互斥体156 7.7增加并发控制后的globalmem驱动157 7.8总结160 第8章Linux设备驱动中的阻塞与非阻塞I/O161 8.1阻塞与非阻塞I/O162 8.1.1等待队列162 8.1.2支持阻塞操作的globalfifo设备驱动166 8.1.3在用户空间验证globalfifo的读写171 8.2轮询操作172 8.2.1轮询的概念与作用172 8.2.2应用程序中的轮询编程172 8.2.3设备驱动中的轮询编程172 8.3支持轮询操作的globalfifo驱动173 8.3.1在globalfifo驱动中增加轮询操作173 8.3.2在用户空间验证globalfifo设备的轮询174 8.4总结175 第9章Linux设备驱动中的异步通知与异步I/O176 9.1异步通知的概念与作用177 9.2Linux异步通知编程177 9.2.1Linux信号177 9.2.2信号的接收179 9.2.3信号的释放180 9.3支持异步通知的globalfifo驱动182 9.3.1在globalfifo驱动中增加异步通知182 9.3.2在用户空间验证globalfifo的异步通知184 9.4Linux 2.6异步I/O185 9.4.1AIO概念与GNU C库函数185 9.4.2使用信号作为AIO的通知188 9.4.3使用回调函数作为AIO的通知189 9.4.4AIO与设备驱动190 9.5总结192 第10章中断与时钟193 10.1中断与定时器194 10.2Linux中断处理程序架构195 10.3Linux中断编程196 10.3.1申请和释放中断196 10.3.2使能和屏蔽中断197 10.3.3底半部机制197 10.3.4实例:S3C6410实时钟中断200 10.4中断共享202 10.5内核定时器203 10.5.1内核定时器编程203 10.5.2内核中延迟的工作delayed_work205 10.5.3实例:秒字符设备206 10.6内核延时210 10.6.1短延迟210 10.6.2长延迟210 10.6.3睡着延迟211 10.7总结212 第11章内存与I/O访问213 11.1CPU与内存和I/O214 11.1.1内存空间与I/O空间214 11.1.2内存管理单元MMU215 11.2Linux内存管理218 11.3内存存取220 11.3.1用户空间内存动态申请220 11.3.2内核空间内存动态申请221 11.3.3虚拟地址与物理地址关系224 11.4设备I/O端口和I/O内存的访问225 11.4.1Linux I/O端口和I/O内存访问接口225 11.4.2申请与释放设备I/O端口和I/O内存226 11.4.3设备I/O端口和I/O内存访问流程227 11.4.4将设备地址映射到用户空间228 11.5I/O内存静态映射233 11.6DMA236 11.6.1DMA与Cache一致性236 11.6.2Linux下的DMA编程237 11.7总结241 第12章工程中的Linux设备驱动242 12.1platform设备驱动243 12.1.1platform总线、设备与驱动243 12.1.2将globalfifo作为platform设备244 12.1.3platform设备资源和数据246 12.2设备驱动的分层思想248 12.2.1设备驱动核心层和例化248 12.2.2输入设备驱动249 12.2.3RTC设备驱动254 12.3主机驱动与外设驱动分离思想255 12.3.1主机、外设驱动分离的意义255 12.3.2Linux SPI主机和设备驱动256 12.4设备驱动中的电源管理260 12.5misc设备驱动262 12.6基于sysfs的设备驱动263 12.7Linux设备驱动的固件加载265 12.8Android设备驱动266 12.9总结269 第3篇Linux设备驱动实例 第13章Linux块设备驱动272 13.1块设备的I/O操作特点273 13.2Linux块设备驱动结构273 13.2.1block_device_operations结构体273 13.2.2gendisk结构体274 13.2.3request与bio结构体276 13.2.4块设备驱动注册与注销285 13.3Linux块设备驱动的模块加载与卸载286 13.4块设备的打开与释放288 13.5块设备驱动的ioctl函数288 13.6块设备驱动的I/O请求处理289 13.6.1使用请求队列289 13.6.2不使用请求队列291 13.7实例1:vmem_disk驱动292 13.7.1vmem_disk的硬件原理292 13.7.2vmem_disk驱动模块的加载与卸载293 13.7.3vmem_disk设备驱动block_device_operations及成员函数296 13.7.4vmem_disk I/O请求处理298 13.8实例2:IDE硬盘设备驱动300 13.9总结303 第14章Linux终端设备驱动304 14.1终端设备305 14.2终端设备驱动结构307 14.3终端设备驱动初始化与释放311 14.3.1模块加载与卸载函数311 14.3.2打开与关闭函数312 14.4数据发送和接收313 14.5TTY线路设置316 14.5.1线路设置用户空间接口316 14.5.2tty驱动set_termios函数317 14.5.3tty驱动的tiocmget和tiocmset函数318 14.5.4tty驱动ioctl函数319 14.6UART设备驱动320 14.7printk和early_printk console驱动325 14.8实例:S3C6410串口与console驱动328 14.8.1S3C6410串口硬件描述328 14.8.2S3C6410串口UART驱动330 14.8.3S3C6410串口console驱动331 14.9总结332 第15章Linux的I2C核心、总线与设备驱动333 15.1Linux的I2C体系结构334 15.2Linux I2C核心339 15.3Linux I2C总线驱动341 15.3.1I2C适配器驱动加载与卸载341 15.3.2I2C总线通信方法342 15.4Linux I2C设备驱动344 15.4.1Linux I2C设备驱动的模块加载与卸载344 15.4.2Linux I2C设备驱动的数据传输344 15.4.3Linux的i2c-dev.c文件分析345 15.5S3C6410 I2C总线驱动实例349 15.5.1S3C6410 I2C控制器硬件描述349 15.5.2S3C6410 I2C总线驱动总体分析349 15.5.3S3C6410 I2C适配器驱动的模块加载与卸载350 15.5.4S3C6410 I2C总线通信方法354 15.6AT24XX EEPROM的I2C设备驱动实例359 15.7总结362 第16章Linux网络设备驱动363 16.1Linux网络设备驱动的结构364 16.1.1网络协议接口层364 16.1.2网络设备接口层366 16.1.3设备驱动功能层369 16.1.4网络设备与媒介层369 16.2网络设备驱动的注册与注销369 16.3网络设备的初始化371 16.4网络设备的打开与释放372 16.5数据发送流程373 16.6数据接收流程374 16.7网络连接状态377 16.8参数设置和统计数据378 16.9DM9000网卡设备驱动实例381 16.9.1DM9000网卡硬件描述381 16.9.2DM9000网卡驱动设计分析383 16.10总结387 第17章Linux音频设备驱动388 17.1数字音频设备389 17.2音频设备硬件接口390 17.2.1PCM接口390 17.2.2IIS接口390 17.2.3AC'97接口390 17.3Linux OSS音频设备驱动391 17.3.1OSS驱动的组成391 17.3.2mixer接口392 17.3.3dsp接口393 17.3.4OSS用户空间编程394 17.4Linux ALSA音频设备驱动399 17.4.1ALSA的组成399 17.4.2card和组件管理400 17.4.3PCM设备402 17.4.4控制接口412 17.4.5AC97 API接口416 17.4.6ALSA用户空间编程418 17.5Linux ASoC音频设备驱动423 17.5.1ASoC驱动的组成423 17.5.2ASoC Codec驱动423 17.5.3ASoC平台驱动426 17.5.4ASoC板驱动429 17.6S3C6410+WM9714 ASoC驱动实例430 17.7总结439 第18章LCD设备驱动440 18.1LCD硬件原理441 18.2帧缓冲443 18.2.1帧缓冲的概念443 18.2.2显示缓冲区与显示点443 18.2.3Linux帧缓冲相关数据结构与函数444 18.3Linux帧缓冲设备驱动结构450 18.4帧缓冲设备驱动的模块加载与卸载函数450 18.5帧缓冲设备显示缓冲区的申请与释放452 18.6帧缓冲设备的参数设置453 18.6.1定时参数453 18.6.2像素时钟454 18.6.3颜色位域454 18.6.4固定参数455 18.7帧缓冲设备驱动的fb_ops成员函数455 18.8LCD设备驱动的读写、mmap和ioctl函数456 18.9帧缓冲设备的用户空间访问461 18.10Linux图形用户界面463 18.10.1Qt-X11/QtEmbedded/Qtopia463 18.10.2Microwindows/Nano-X467 18.10.3MiniGUI469 18.10.4Android471 18.11实例:S3C6410 LCD设备驱动474 18.12总结478 第19章Flash设备驱动479 19.1Linux Flash驱动结构480 19.1.1Linux MTD系统层次480 19.1.2Linux MTD系统接口480 19.1.3MTD用户空间编程485 19.2NOR Flash驱动488 19.3NAND Flash驱动491 19.4NOR Flash驱动实例:S3C6410外围的NOR Flash驱动496 19.5NAND Flash驱动实例:S3C6410外围的NAND Flash驱动497 19.5.1S3C6410 NAND控制器硬件描述497 19.5.2S3C6410 nand_chip初始化与NAND探测498 19.6Flash文件系统的建立500 19.6.1Flash转换层500 19.6.2CramFS501 19.6.3JFFS/JFFS2501 19.6.4YAFFS/YAFFS2502 19.6.5UBI/UBIFS505 19.7总结506 第20章USB主机与设备驱动507 20.1Linux USB驱动层次508 20.1.1主机侧与设备侧USB驱动508 20.1.2设备、配置、接口、端点509 20.2USB主机控制器驱动512 20.2.1USB主机控制器驱动的整体结构512 20.2.2实例:S3C6410 USB 1.1主机驱动516 20.3USB设备驱动518 20.3.1USB设备驱动整体结构518 20.3.2USB请求块(URB)523 20.3.3探测和断开函数527 20.3.4USB骨架程序528 20.3.5实例:USB键盘驱动534 20.4USB UDC与gadget驱动536 20.4.1 UDC和gadget驱动关键数据结构与API536 20.4.2实例:S3C6410 USB 2.0的UDC驱动540 20.4.3实例:file storage gadget驱动542 20.5USB OTG驱动544 20.6总结545 第21章PCI设备驱动547 21.1PCI总线与配置空间548 21.1.1PCI总线的Linux描述548 21.1.2PCI设备的Linux描述550 21.1.3PCI配置空间访问551 21.1.4PCI DMA相关的API555 21.1.5PCI 设备驱动其他常用API555 21.2PCI设备驱动结构556 21.2.1PCI设备驱动的组成556 21.2.2实例:PCI骨架程序560 21.3总结562 第4篇Linux设备驱动调试、移植 第22章Linux设备驱动的调试564 22.1Linux开发环境建设565 22.1.1实验室建设565 22.1.2工具链566 22.1.3串口工具567 22.2GDB调试器用法570 22.2.1GDB基本用法570 22.2.2DDD图形界面调试工具578 22.3Linux内核调试580 22.4内核打印信息——printk()581 22.5使用/proc582 22.6Oops586 22.7监视工具588 22.8内核调试器589 22.8.1kcore589 22.8.2KDB592 22.8.3KGDB594 22.9使用仿真器调试内核595 22.10应用程序调试596 22.11Linux性能监控与调优工具598 22.12总结601 第23章Linux设备驱动的移植602 23.1编写可移植的设备驱动603 23.1.1可移植的数据类型603 23.1.2结构体对界604 23.1.3Little Endian与Big Endian605 23.1.4内存页面大小605 23.2巧用同类设备驱动606 23.2.1巧用demo板驱动606 23.2.2巧用类似芯片的驱动程序606 23.2.3借用芯片厂商的范例程序609 23.3从Linux 2.4移植设备驱动到Linux 2.6610 23.4Linux与其他操作系统之间的驱动移植618 23.5Linux内核的移植626 23.6总结630 参考文献631

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
更多商品
旅游摄影必备手册 (其他)
Visual Basic编程宝典(十年典藏版) (其他)
通信原理MATLAB仿真教程(中国通信学会普通高等教育“十二五”规划教材立项项目) (其他)
边做边学——Illustrator CS3平面设计案例教程 (其他)
我的第一部单反——佳能单反使用手册 (其他)
边做边学——3ds Max 9室内效果图设计案例教程 (其他)
二维动画制作案例教程(第2版) (其他)
我的第一部单反——尼康单反使用手册 (其他)
拖拖拉拉的孩子会变老/大头娃娃讲故事 (其他)
粗心的孩子常犯错/大头娃娃讲故事 (其他)
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有