linuxUART串口驱动开发文档
w83697/w83977 super I/O串口驱动开发
内容简介: 介绍了Linux下的串口驱动的设计层次及接口, 并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用), 以及Linux下的中断处理机制/中断共享机制, 还有串口缓冲机制当中涉及的软中断机制; 其中有关w83697/w83977 IC方面的知识, 具体参考相关手册, 对串口的配置寄存器有详细介绍, 本文不再进行说明.
目录索引:
一. Linux的串口接口及层次.
二. Linux的中断机制及中断共享机制.
三. Linux的软中断机制.
四. TTY与串口的具体关联.
一. Linux的串口接口及层次.
串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输.
1. 串口硬件资源的处理.
W83697及W83977在ep93xx板子上的映射的硬件物理空间如下:
W83697: 0x20000000起1K空间.
W83977: 0x30000000起1K空间.
因为串口设备的特殊性, 可以当作终端使用, 但是终端的使用在内核还未完全初始化之前(关于串口与终端的关联及层次在第四节中详细), 此时还没有通过mem_init()建立内核的虚存管理机制, 所以不能通过ioreamp来进行物理内存到虚存的映射(物理内存必须由内核映射成系统管理的虚拟内存后才能进行读写访问), 这与先前所讲的framebuffer的物理内存映射是不同的, 具体原因如下:
√终端在注册并使用的调用路径如下:
start_kernel→console_init→uart_console_init→ep93xxuart_console_init→register_console→csambuart_console_write.
√FrameBuffer显卡驱动中的物理内存映射调用路径如下:
start_kernel→ rest_init→init(内核初始线程)→ do_basic_setup→ do_initcalls→fbmem_init→lanrryfb_init
(Linux下用__setup启动初期初始机制与__initcall系统初始化完成后的调用机制, 这两个机制本质没有什么差别,主要是执行时所处的系统时段)
√串口物理内存映射到虚存的时机:
依据上面所介绍的两条执行路径,再看内核的内存初始化的调用时期,只有完成这个初始化后才能进行物理内存到虚存的映射,内存的初始化主要是在start_kernel中调用的mem_init,这个调用明显在uart_console_init之后,在fbmem_init之后,到此就全部说明了为何不能在对串口使用ioremap进行物理内存的映射了。那么究竟要在什么时机用什么方法进行串口物理内存的映射呢?
相关文章
- 2021-11-17使用单片机对瓦斯气体浓度信息检测和报警设计
- 2023-06-10电子钢材秤缓冲装置的选择与应用
- 2023-10-27关节臂式坐标测量机角度传感器偏心参数辨识
- 2021-12-16基于FPGA的数字复接系统的设计与实现
- 2023-08-24复合球坐标系中便携式坐标测量机的数学模型
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。