深入Linux设备驱动程序内核机制
深入Linux设备驱动程序内核机制
基本信息
- 作者: 陈学松
- 出版社:电子工业出版社
- ISBN:9787121150524
- 上架时间:2012-2-6
- 出版日期:2012 年1月
http://product.china-pub.com/198916
内容简介
<!--更改-->《深入linux设备驱动程序内核机制》涵盖了编写设备驱动程序所需要的几乎所有的内核设施,比如内核模块、中断处理、互斥与同步、内存分配、延迟操作、时间管理,以及新设备驱动模型等内容。为了避免读者迷失在某一技术细节的讨论当中,本书在一个比较高的层面上进行展开,以一种先框架再细节的结构安排极大地简化了读者的阅读与学习。
《深入linux设备驱动程序内核机制》不仅适合那些在linux系统下从事设备驱动程序开发的专业技术人员阅读,也同样适合有志于从事linux设备驱动程序开发或对linux设备驱动程序及linux内核感兴趣的在校学生等阅读。对于没有任何linux设备驱动程序开发经验的初学者,建议先阅读那些讨论“如何”在linux系统下编写设备驱动程序的入门书籍,然后再阅读本书来理解“为什么”要以这样或者那样的方式来编写设备驱动程序。目录
第1章内核模块1
1.1内核模块的文件格式2
1.2export_symbol的内核实现5
1.3模块的加载过程8
1.3.1sys_init_module(第一部分)9
1.3.2structmodule9
1.3.3load_module13
1.3.4sys_init_module(第二部分)49
1.3.5模块的卸载54
1.4本章小结55
第2章字符设备驱动程序57
2.1应用程序与设备驱动程序互动实例58
2.2structfile_operations62
2.3字符设备的内核抽象63
2.4设备号的构成与分配65
2.4.1设备号的构成65
2.4.2设备号的分配与管理66
2.5字符设备的注册71
2.6设备文件节点的生成74
2.8本章小结85
第3章分配内存87
3.1物理内存的管理87
3.1.1内存节点node87
3.1.2内存区域zone88
3.1.3内存页89
3.2页面分配器(pageallocator)90
3.2.1gfp_mask91
3.2.2alloc_pages95
3.2.3__get_free_pages96
3.2.4get_zeroed_page97
3.2.5__get_dma_pages97
3.3slab分配器(slaballocator)98
3.3.1管理slab的数据结构99
3.3.2kmalloc与kzalloc105
3.3.3kmem_cache_create与kmem_cache_alloc108
3.4内存池(mempool)110
3.5虚拟内存的管理111
3.5.1内核虚拟地址空间构成111
3.5.2vmalloc与vfree112
3.5.3ioremap115
3.6per-cpu变量115
3.6.1静态per-cpu变量的声明与定义116
3.6.2静态per-cpu变量的链接脚本117
3.6.3setup_per_cpu_areas函数118
3.6.4使用per-cpu变量121
3.7本章小结125
第4章互斥与同步127
4.1并发的来源127
4.2local_irq_enable与local_irq_disable128
4.3自旋锁129
4.3.1spin_lock130
4.3.2spin_lock的变体133
4.3.3单处理器上的spin_lock函数136
4.3.4读取者与写入者自旋锁rwlock137
4.4信号量(semaphore)141
4.4.1信号量的定义与初始化141
4.4.2down操作142
4.4.3up操作145
4.4.4读取者与写入者信号量rwsem146
4.5互斥锁mutex148
4.5.1互斥锁的定义与初始化148
4.5.2互斥锁的down操作149
4.5.3互斥锁的up操作150
4.6顺序锁seqlock152
4.7rcu155
4.7.1读取者的rcu临界区156
4.7.2写入者的rcu操作156
4.7.3rcu使用的特点157
4.8原子变量与位操作159
4.9等待队列162
4.9.1等待队列头wait_queue_head_t162
4.9.2等待队列的节点163
4.9.3等待队列的应用164
4.10完成接口completion164
4.11本章小结168
第5章中断处理169
5.1中断的硬件框架169
5.2pic与软件中断号170
5.3通用的中断处理函数171
5.4do_irq函数172
5.5structirq_chip178
5.6structirqaction179
5.7irq_set_handler180
5.8handle_irq_event184
5.9request_irq186
5.10中断处理的irq_thread机制190
5.11free_irq191
5.12softirq192
5.13irq的自动探测196
5.14中断处理例程200
5.15中断共享201
5.16本章小结202
第6章延迟操作203
6.1tasklet203
6.1.1tasklet机制初始化204
6.1.2提交一个tasklet205
6.1.3tasklet_action209
6.1.4tasklet的其他操作212
6.2工作队列workqueue214
6.2.1数据结构214
6.2.2create_singlethread_workqueue和create_workqueue216
6.2.3工人线程worker_thread219
6.2.4destroy_workqueue221
6.2.5提交工作节点queue_work224
6.2.6内核创建的工作队列229
6.3本章小结230
第7章设备文件的高级操作231
7.1ioctl文件操作231
7.1.1ioctl的系统调用231
7.1.2ioctl的命令编码235
7.1.3copy_from_user和copy_to_user238
7.2字符设备的i/o模型243
7.3同步阻塞型i/o244
7.3.1wait_event_interruptible244
7.3.2wake_up_interruptible246
7.4同步非阻塞型i/o250
7.5异步阻塞型i/o251
7.6异步非阻塞型i/o258
7.7驱动程序的fsync例程259
7.8fasync例程260
7.9llseek例程269
7.10访问权能272
7.11本章小结273
第8章时间管理274
8.1jiffies274
8.1.1时间比较277
8.1.2时间转换278
8.2延时操作279
8.2.1长延时280
8.2.2短延时285
8.3内核定时器286
8.3.1init_timer289
8.3.2add_timer289
8.3.3del_timer和del_timer_sync293
8.4本章小结293
第9章linux设备驱动模型295
9.1sysfs文件系统295
9.2kobject和kset298
9.2.1kobject298
9.2.2kobject的类型属性305
9.2.3kset308
9.2.4热插拔中的uevent和call_usermodehelper311
9.2.5实例源码320
9.3总线、设备与驱动328
9.3.1总线及其注册328
9.3.2总线的属性335
9.3.3设备与驱动的绑定338
9.3.4设备339
9.3.5驱动348
9.4class351
9.5本章小结355
第10章内存映射与dma356
10.1设备缓存与设备内存356
10.2mmap356
10.2.1structvm_area_struct357
10.2.2用户空间虚拟地址布局358
10.2.3mmap系统调用过程362
10.2.4驱动程序中mmap方法的实现368
10.2.5mmap使用范例373
10.2.6munmap383
10.3dma384
10.3.1内核中的dma层384
10.3.2物理地址与总线地址386
10.3.3dma_set_mask387
10.3.4dma映射388
10.3.5回弹缓冲区(bouncebuffer)401
10.3.6dma池401
10.4本章小结405
第11章块设备驱动程序407
11.1块子系统初始化408
11.2ramdisk源码实例410
11.2.1make_request版本的ramdisk源码411
11.2.2request版本的ramdisk源码416
11.2.3ramdisk的使用420
11.3块设备号的注册与管理422
11.4block_device424
11.5structgendisk425
11.6structhd_struct428
11.7用alloc_disk分配gendisk对象428
11.8向系统添加一个块设备add_disk430
11.9block_device_operations439
11.10块设备文件的打开440
11.11blk_init_queue448
11.12blk_queue_make_request459
11.13向队列提交请求460
11.14块设备的请求处理函数466
11.15bio结构467
11.16本章小结472
第12章网络设备驱动程序473
12.1net_device475
12.2网络设备的注册488
12.3设备方法492
12.3.1设备初始化494
12.3.2设备接口的打开与停止495
12.3.3数据包的发送495
12.3.4网络数据包发送过程中的流控机制500
12.3.5传输超时(watchdogtimeout)503
12.3.6数据包的接收506
12.4套接字缓冲区510
12.5中断处理518
12.6napi520
12.7本章小结522