___________________________
| |
| request_region() | 在设备驱动模块加载或open()函数中进行
|__________________________ |
|
___________________________
| |
| inb()、outb()等 | 在设备驱动初始化、write()、read()、iotcl()等函数中进行
|__________________________ |
|
___________________________
| |
| release_region()等 | 在设备驱动模块卸载或release()函数中进行
|__________________________ |
IO端口的访问流程(不映射到内存空间)
IO端口访问的另一种途径是将IO端口映射为内存进行访问:在设备打开或驱动模块被加载时,申请IO端口区域并使用ioport_map()映射到内存,之后使用IO内存的函数进行端口访问,最后,在设备关闭或驱动被卸载时释放IO端口并释放映射。整个流程如下图所示:
___________________________
| |
| request_region()等 | \
|__________________________ | \
| \ 在设备驱动模块加载或open()函数中进行
___________________________ /
| | /
| ioport_map()等 |
|__________________________ |
|
___________________________
| |
| ioread8、ioread16、 | 在设备驱动初始化、write()、read()、ioctl等函数中调用
| ioread32、iowrite8等 |
|__________________________ |
|
___________________________
| |
| ioport_unmap() |\
|__________________________ | \
| \
___________________________ /在设备驱动卸载或release()函数中调用
| | /
| release_region() | /
|__________________________ | |