Linux UART串口驱动开发详解:从硬件到软件

需积分: 18 2 下载量 40 浏览量 更新于2024-12-08 收藏 236KB PDF 举报
"UART串口驱动开发文档详细阐述了Linux环境下串口驱动的实现,包括串口接口层次、中断机制、软中断、TTY与串口的关联,以及使用示例。文档作者为侯辉华,主要关注w83697和w83977超级I/O串口驱动,并探讨了在Linux系统初期启动阶段如何处理串口硬件资源,尤其是当内核尚未完全初始化时的终端使用问题。" 在Linux系统中,UART(通用异步收发传输器)串口驱动扮演着至关重要的角色,它负责与硬件串口IC的交互,提供统一的编程接口。驱动开发者需要根据不同的串口IC来编写特定的配置宏,这些宏涉及读写操作、中断开启和关闭以及FIFO(先进先出)状态处理。串口硬件资源的处理在驱动中占据基础地位,直接处理底层的数据传输。 例如,在ep93xx板子上,W83697的硬件空间始于0x20000000,大小为1K;而W83977始于0x30000000,同样为1K空间。由于串口可能作为终端使用,其初始化可能发生在内核的早期阶段,那时内核还没有完成mem_init(),即虚存管理机制尚未建立。因此,不能直接使用ioremap进行物理内存到虚存的映射,与Framebuffer的处理方式不同。 串口驱动还需要理解Linux的中断机制,包括中断处理和中断共享。中断处理涉及接收和发送数据时的响应,中断共享则是在多个设备共用同一中断线时的策略。此外,软中断机制在串口缓冲中起到关键作用,它允许在中断上下文中执行非阻塞的数据处理。 TTY(Teletype Terminal)与串口的关联也是串口驱动的一部分,串口可以作为TTY终端设备使用。在内核启动的终端注册和使用路径中,如start_kernel -> console_init -> uart_console_init等步骤,串口被注册为一个控制台设备,允许用户输入和输出。 最后,文档还提供了串口使用示例,帮助开发者理解和应用串口驱动技术。这些示例涵盖了从初始化到数据传输的各种操作,有助于实际的驱动开发和调试工作。