深入Linux设备驱动程序内核机制

深入Linux设备驱动程序内核机制
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2012-01
版次: 1
ISBN: 9787121150524
定价: 98.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 540页
字数: 856千字
86人买过
  •   《深入Linux设备驱动程序内核机制》是一本系统阐述Linux设备驱动程序技术内幕的专业书籍,它的侧重点不是讨论如何在Linux系统下编写设备驱动程序,而是要告诉读者隐藏在这些设备驱动程序背后的那些内核机制及原理。作者通过对Linux内核源码抽丝剥茧般的解读,再辅之以精心设计的大量图片,使读者在阅读完本书后对驱动程序前台所展现出来的那些行为特点变得豁然开朗。

      本书涵盖了编写设备驱动程序所需要的几乎所有的内核设施,比如内核模块、中断处理、互斥与同步、内存分配、延迟操作、时间管理,以及新设备驱动模型等内容。为了避免读者迷失在某一技术细节的讨论当中,本书在一个比较高的层面上进行展开,以一种先框架再细节的结构安排极大地简化了读者的阅读与学习。  陈学松,曾任职于Intel,Marvell等半导体公司,9年以上Linux内核、设备驱动程序、嵌入式LinuxBSP等领域的开发经验。专注于Linux系统内核、BIOS、文件系统及软件虚拟化等技术,曾模仿Linux内核编写过微型操作系统。工作之余喜欢以文章的形式将自己的学习心得进行总结,善于运用图形等元素将复杂概念具体化,梳理脉络而不拘于细节。05年在IBMLinux开发者论坛所发表的《解析Linux中的VFS文件系统机制》则堪称作者这一写作特色的代表之作,该文发表后曾被多家技术网站、论坛及个人博客所转载。喜欢游泳,四肢发达,胸无城府。古文功底颇深,少时涉猎甚广,现在则主要阅读一些历史题材类的书籍,熟读《三国志》。目前任职于AMD上海研发中心,主要从事Linux显卡驱动等领域的研发工作。 第1章 内核模块 

    1.1 内核模块的文件格式 

    1.2 EXPORT_SYMBOL的内核实现 

    1.3 模块的加载过程 

    1.3.1 sys_init_module(第一部分) 

    1.3.2 struct module 

    1.3.3 load_module 

    1.3.4 sys_init_module(第二部分) 

    1.3.5 模块的卸载 

    1.4 本章小结 

    第2章 字符设备驱动程序 

    2.1 应用程序与设备驱动程序互动实例 

    2.2 struct file_operations 

    2.3 字符设备的内核抽象 

    2.4 设备号的构成与分配 

    2.4.1 设备号的构成 

    2.4.2 设备号的分配与管理 

    2.5 字符设备的注册 

    2.6 设备文件节点的生成 

    2.7 字符设备文件的打开操作 

    2.8 本章小结 

    第3章 分配内存 

    3.1 物理内存的管理 

    3.1.1 内存节点node 

    3.1.2 内存区域zone 

    3.1.3 内存页 

    3.2 页面分配器(page allocator) 

    3.2.1 gfp_mask 

    3.2.2 alloc_pages 

    3.2.3 __get_free_pages 

    3.2.4 get_zeroed_page 

    3.2.5 __get_dma_pages 

    3.3 slab分配器(slab allocator) 

    3.3.1 管理slab的数据结构 

    3.3.2 kmalloc与kzalloc 

    3.3.3 kmem_cache_create与kmem_cache_alloc 

    3.4 内存池(mempool) 

    3.5 虚拟内存的管理 

    3.5.1 内核虚拟地址空间构成 

    3.5.2 vmalloc与vfree 

    3.5.3 ioremap 

    3.6 per-CPU变量 

    3.6.1 静态per-CPU变量的声明与定义 

    3.6.2 静态per-CPU变量的链接脚本 

    3.6.3 setup_per_cpu_areas函数 

    3.6.4 使用per-CPU变量 

    3.7 本章小结 

    第4章 互斥与同步 

    4.1 并发的来源 

    4.2 local_irq_enable与local_irq_disable 

    4.3 自旋锁 

    4.3.1 spin_lock 

    4.3.2 spin_lock的变体 

    4.3.3 单处理器上的spin_lock函数 

    4.3.4 读取者与写入者自旋锁rwlock 

    4.4 信号量(semaphore) 

    4.4.1 信号量的定义与初始化 

    4.4.2 DOWN操作 

    4.4.3 UP操作 

    4.4.4 读取者与写入者信号量rwsem 

    4.5 互斥锁mutex 

    4.5.1 互斥锁的定义与初始化 

    4.5.2 互斥锁的DOWN操作 

    4.5.3 互斥锁的UP操作 

    4.6 顺序锁seqlock 

    4.7 RCU 

    4.7.1 读取者的RCU临界区 

    4.7.2 写入者的RCU操作 

    4.7.3 RCU使用的特点 

    4.8 原子变量与位操作 

    4.9 等待队列 

    4.9.1 等待队列头wait_queue_head_t 

    4.9.2 等待队列的节点 

    4.9.3 等待队列的应用 

    4.10 完成接口completion 

    4.11 本章小结 

    第5章 中断处理 

    5.1 中断的硬件框架 

    5.2 PIC与软件中断号 

    5.3 通用的中断处理函数 

    5.4 do_IRQ函数 

    5.5 struct irq_chip 

    5.6 struct irqaction 

    5.7 irq_set_handler 

    5.8 handle_irq_event 

    5.9 request_irq 

    5.10 中断处理的irq_thread机制 

    5.11 free_irq 

    5.12 SOFTIRQ 

    5.13 irq的自动探测 

    5.14 中断处理例程 

    5.15 中断共享 

    5.16 本章小结 

    第6章 延迟操作 

    6.1 tasklet 

    6.1.1 tasklet机制初始化 

    6.1.2 提交一个tasklet 

    6.1.3 tasklet_action 

    6.1.4 tasklet的其他操作 

    6.2 工作队列work queue 

    6.2.1 数据结构 

    6.2.2 create_singlethread_workqueue和create_workqueue 

    6.2.3 工人线程worker_thread 

    6.2.4 destroy_workqueue 

    6.2.5 提交工作节点queue_work 

    6.2.6 内核创建的工作队列 

    6.3 本章小结 

    第7章 设备文件的高级操作 

    7.1 ioctl文件操作 

    7.1.1 ioctl的系统调用 

    7.1.2 ioctl的命令编码 

    7.1.3 copy_from_user和copy_to_user 

    7.2 字符设备的I/O模型 

    7.3 同步阻塞型I/O 

    7.3.1 wait_event_interruptible 

    7.3.2 wake_up_interruptible 

    7.4 同步非阻塞型I/O 

    7.5 异步阻塞型I/O 

    7.6 异步非阻塞型I/O 

    7.7 驱动程序的fsync例程 

    7.8 fasync例程 

    7.9 llseek例程 

    7.10 访问权能 

    7.11 本章小结 

    第8章 时间管理 

    8.1 jiffies 

    8.1.1 时间比较 

    8.1.2 时间转换 

    8.2 延时操作 

    8.2.1 长延时 

    8.2.2 短延时 

    8.3 内核定时器 

    8.3.1 init_timer 

    8.3.2 add_timer 

    8.3.3 del_timer和del_timer_sync 

    8.4 本章小结 

    第9章 Linux设备驱动模型 

    9.1 sysfs文件系统 

    9.2 kobject和kset 

    9.2.1 kobject 

    9.2.2 kobject的类型属性 

    9.2.3 kset 

    9.2.4 热插拔中的uevent和call_usermodehelper 

    9.2.5 实例源码 

    9.3 总线、设备与驱动 

    9.3.1 总线及其注册 

    9.3.2 总线的属性 

    9.3.3 设备与驱动的绑定 

    9.3.4 设备 

    9.3.5 驱动 

    9.4 class 

    9.5 本章小结 

    第10章 内存映射与DMA 

    10.1 设备缓存与设备内存 

    10.2 mmap 

    10.2.1 struct vm_area_struct 

    10.2.2 用户空间虚拟地址布局 

    10.2.3 mmap系统调用过程 

    10.2.4 驱动程序中mmap方法的实现 

    10.2.5 mmap使用范例 

    10.2.6 munmap 

    10.3 DMA 

    10.3.1 内核中的DMA层 

    10.3.2 物理地址与总线地址 

    10.3.3 dma_set_mask 

    10.3.4 DMA映射 

    10.3.5 回弹缓冲区(bounce buffer) 

    10.3.6 DMA池 

    10.4 本章小结 

    第11章 块设备驱动程序 

    11.1 块子系统初始化 

    11.2 ramdisk源码实例 

    11.2.1 make_request版本的RAM DISK源码 

    11.2.2 request版本的RAM DISK源码 

    11.2.3 ramdisk的使用 

    11.3 块设备号的注册与管理 

    11.4 block_device 

    11.5 struct gendisk 

    11.6 struct hd_struct 

    11.7 用alloc_disk分配gendisk对象 

    11.8 向系统添加一个块设备add_disk 

    11.9 block_device_operations 

    11.10 块设备文件的打开 

    11.11 blk_init_queue 

    11.12 blk_queue_make_request 

    11.13 向队列提交请求 

    11.14 块设备的请求处理函数 

    11.15 bio结构 

    11.16 本章小结
  • 内容简介:
      《深入Linux设备驱动程序内核机制》是一本系统阐述Linux设备驱动程序技术内幕的专业书籍,它的侧重点不是讨论如何在Linux系统下编写设备驱动程序,而是要告诉读者隐藏在这些设备驱动程序背后的那些内核机制及原理。作者通过对Linux内核源码抽丝剥茧般的解读,再辅之以精心设计的大量图片,使读者在阅读完本书后对驱动程序前台所展现出来的那些行为特点变得豁然开朗。

      本书涵盖了编写设备驱动程序所需要的几乎所有的内核设施,比如内核模块、中断处理、互斥与同步、内存分配、延迟操作、时间管理,以及新设备驱动模型等内容。为了避免读者迷失在某一技术细节的讨论当中,本书在一个比较高的层面上进行展开,以一种先框架再细节的结构安排极大地简化了读者的阅读与学习。
  • 作者简介:
     陈学松,曾任职于Intel,Marvell等半导体公司,9年以上Linux内核、设备驱动程序、嵌入式LinuxBSP等领域的开发经验。专注于Linux系统内核、BIOS、文件系统及软件虚拟化等技术,曾模仿Linux内核编写过微型操作系统。工作之余喜欢以文章的形式将自己的学习心得进行总结,善于运用图形等元素将复杂概念具体化,梳理脉络而不拘于细节。05年在IBMLinux开发者论坛所发表的《解析Linux中的VFS文件系统机制》则堪称作者这一写作特色的代表之作,该文发表后曾被多家技术网站、论坛及个人博客所转载。喜欢游泳,四肢发达,胸无城府。古文功底颇深,少时涉猎甚广,现在则主要阅读一些历史题材类的书籍,熟读《三国志》。目前任职于AMD上海研发中心,主要从事Linux显卡驱动等领域的研发工作。
  • 目录:
    第1章 内核模块 

    1.1 内核模块的文件格式 

    1.2 EXPORT_SYMBOL的内核实现 

    1.3 模块的加载过程 

    1.3.1 sys_init_module(第一部分) 

    1.3.2 struct module 

    1.3.3 load_module 

    1.3.4 sys_init_module(第二部分) 

    1.3.5 模块的卸载 

    1.4 本章小结 

    第2章 字符设备驱动程序 

    2.1 应用程序与设备驱动程序互动实例 

    2.2 struct file_operations 

    2.3 字符设备的内核抽象 

    2.4 设备号的构成与分配 

    2.4.1 设备号的构成 

    2.4.2 设备号的分配与管理 

    2.5 字符设备的注册 

    2.6 设备文件节点的生成 

    2.7 字符设备文件的打开操作 

    2.8 本章小结 

    第3章 分配内存 

    3.1 物理内存的管理 

    3.1.1 内存节点node 

    3.1.2 内存区域zone 

    3.1.3 内存页 

    3.2 页面分配器(page allocator) 

    3.2.1 gfp_mask 

    3.2.2 alloc_pages 

    3.2.3 __get_free_pages 

    3.2.4 get_zeroed_page 

    3.2.5 __get_dma_pages 

    3.3 slab分配器(slab allocator) 

    3.3.1 管理slab的数据结构 

    3.3.2 kmalloc与kzalloc 

    3.3.3 kmem_cache_create与kmem_cache_alloc 

    3.4 内存池(mempool) 

    3.5 虚拟内存的管理 

    3.5.1 内核虚拟地址空间构成 

    3.5.2 vmalloc与vfree 

    3.5.3 ioremap 

    3.6 per-CPU变量 

    3.6.1 静态per-CPU变量的声明与定义 

    3.6.2 静态per-CPU变量的链接脚本 

    3.6.3 setup_per_cpu_areas函数 

    3.6.4 使用per-CPU变量 

    3.7 本章小结 

    第4章 互斥与同步 

    4.1 并发的来源 

    4.2 local_irq_enable与local_irq_disable 

    4.3 自旋锁 

    4.3.1 spin_lock 

    4.3.2 spin_lock的变体 

    4.3.3 单处理器上的spin_lock函数 

    4.3.4 读取者与写入者自旋锁rwlock 

    4.4 信号量(semaphore) 

    4.4.1 信号量的定义与初始化 

    4.4.2 DOWN操作 

    4.4.3 UP操作 

    4.4.4 读取者与写入者信号量rwsem 

    4.5 互斥锁mutex 

    4.5.1 互斥锁的定义与初始化 

    4.5.2 互斥锁的DOWN操作 

    4.5.3 互斥锁的UP操作 

    4.6 顺序锁seqlock 

    4.7 RCU 

    4.7.1 读取者的RCU临界区 

    4.7.2 写入者的RCU操作 

    4.7.3 RCU使用的特点 

    4.8 原子变量与位操作 

    4.9 等待队列 

    4.9.1 等待队列头wait_queue_head_t 

    4.9.2 等待队列的节点 

    4.9.3 等待队列的应用 

    4.10 完成接口completion 

    4.11 本章小结 

    第5章 中断处理 

    5.1 中断的硬件框架 

    5.2 PIC与软件中断号 

    5.3 通用的中断处理函数 

    5.4 do_IRQ函数 

    5.5 struct irq_chip 

    5.6 struct irqaction 

    5.7 irq_set_handler 

    5.8 handle_irq_event 

    5.9 request_irq 

    5.10 中断处理的irq_thread机制 

    5.11 free_irq 

    5.12 SOFTIRQ 

    5.13 irq的自动探测 

    5.14 中断处理例程 

    5.15 中断共享 

    5.16 本章小结 

    第6章 延迟操作 

    6.1 tasklet 

    6.1.1 tasklet机制初始化 

    6.1.2 提交一个tasklet 

    6.1.3 tasklet_action 

    6.1.4 tasklet的其他操作 

    6.2 工作队列work queue 

    6.2.1 数据结构 

    6.2.2 create_singlethread_workqueue和create_workqueue 

    6.2.3 工人线程worker_thread 

    6.2.4 destroy_workqueue 

    6.2.5 提交工作节点queue_work 

    6.2.6 内核创建的工作队列 

    6.3 本章小结 

    第7章 设备文件的高级操作 

    7.1 ioctl文件操作 

    7.1.1 ioctl的系统调用 

    7.1.2 ioctl的命令编码 

    7.1.3 copy_from_user和copy_to_user 

    7.2 字符设备的I/O模型 

    7.3 同步阻塞型I/O 

    7.3.1 wait_event_interruptible 

    7.3.2 wake_up_interruptible 

    7.4 同步非阻塞型I/O 

    7.5 异步阻塞型I/O 

    7.6 异步非阻塞型I/O 

    7.7 驱动程序的fsync例程 

    7.8 fasync例程 

    7.9 llseek例程 

    7.10 访问权能 

    7.11 本章小结 

    第8章 时间管理 

    8.1 jiffies 

    8.1.1 时间比较 

    8.1.2 时间转换 

    8.2 延时操作 

    8.2.1 长延时 

    8.2.2 短延时 

    8.3 内核定时器 

    8.3.1 init_timer 

    8.3.2 add_timer 

    8.3.3 del_timer和del_timer_sync 

    8.4 本章小结 

    第9章 Linux设备驱动模型 

    9.1 sysfs文件系统 

    9.2 kobject和kset 

    9.2.1 kobject 

    9.2.2 kobject的类型属性 

    9.2.3 kset 

    9.2.4 热插拔中的uevent和call_usermodehelper 

    9.2.5 实例源码 

    9.3 总线、设备与驱动 

    9.3.1 总线及其注册 

    9.3.2 总线的属性 

    9.3.3 设备与驱动的绑定 

    9.3.4 设备 

    9.3.5 驱动 

    9.4 class 

    9.5 本章小结 

    第10章 内存映射与DMA 

    10.1 设备缓存与设备内存 

    10.2 mmap 

    10.2.1 struct vm_area_struct 

    10.2.2 用户空间虚拟地址布局 

    10.2.3 mmap系统调用过程 

    10.2.4 驱动程序中mmap方法的实现 

    10.2.5 mmap使用范例 

    10.2.6 munmap 

    10.3 DMA 

    10.3.1 内核中的DMA层 

    10.3.2 物理地址与总线地址 

    10.3.3 dma_set_mask 

    10.3.4 DMA映射 

    10.3.5 回弹缓冲区(bounce buffer) 

    10.3.6 DMA池 

    10.4 本章小结 

    第11章 块设备驱动程序 

    11.1 块子系统初始化 

    11.2 ramdisk源码实例 

    11.2.1 make_request版本的RAM DISK源码 

    11.2.2 request版本的RAM DISK源码 

    11.2.3 ramdisk的使用 

    11.3 块设备号的注册与管理 

    11.4 block_device 

    11.5 struct gendisk 

    11.6 struct hd_struct 

    11.7 用alloc_disk分配gendisk对象 

    11.8 向系统添加一个块设备add_disk 

    11.9 block_device_operations 

    11.10 块设备文件的打开 

    11.11 blk_init_queue 

    11.12 blk_queue_make_request 

    11.13 向队列提交请求 

    11.14 块设备的请求处理函数 

    11.15 bio结构 

    11.16 本章小结
查看详情
相关图书 / 更多
深入Linux设备驱动程序内核机制
深入理解移动互联网
吴功宜 吴英 编著
深入Linux设备驱动程序内核机制
深入实施“四个育人”,彰显本科人才培养特色——云南大学本科教育改革与创新优秀论文集
主编唐旭光
深入Linux设备驱动程序内核机制
深入浅出C语言程序设计(第3版·微课版)
李俊·c;强振平;荣剑;张晴晖;赵毅力;钟丽辉
深入Linux设备驱动程序内核机制
深入浅出C#(视频教学版)
赵云
深入Linux设备驱动程序内核机制
深入实践Kotlin元编程
霍丙乾 著
深入Linux设备驱动程序内核机制
深入北方的小路(布克奖震撼杰作。人生在世,行走于地狱屋顶,凝望花朵。余华力荐“了不起的小说”!)
[澳]理查德·弗兰纳根 著;新经典 出品
深入Linux设备驱动程序内核机制
深入学习习近平关于科技创新的重要论述
科学技术部编写组 著
深入Linux设备驱动程序内核机制
深入浅出IoT:完整项目通关实战
[英]吉姆·贝内特(Jim Bennett) 著;柴火创客空间 译;[美]珍·福克斯(Jen Fox);[美]珍·卢珀(Jen Looper)
深入Linux设备驱动程序内核机制
深入浅出SSD:固态存储核心技术、原理与实战 第2版
SSDFans 胡波 石亮 岑彪
深入Linux设备驱动程序内核机制
深入地心 少儿科普 新华正版
英国尤斯伯恩出版公司
深入Linux设备驱动程序内核机制
深入理解FFmpeg
刘歧 赵军 杜金房 赵文杰 宋韶颍
深入Linux设备驱动程序内核机制
深入人心:数字产品设计的底层逻辑
林婕
您可能感兴趣 / 更多
深入Linux设备驱动程序内核机制
数值分析
陈学松
深入Linux设备驱动程序内核机制
新工科数学基础二 高等数学 (下册)
陈学松 钟婵燕 霍颖莹