linux uart 串口驱动开发文档

linux uart 串口驱动开发文档

ID:34580536

大小:237.35 KB

页数:19页

时间:2019-03-08

linux uart 串口驱动开发文档_第1页
linux uart 串口驱动开发文档_第2页
linux uart 串口驱动开发文档_第3页
linux uart 串口驱动开发文档_第4页
linux uart 串口驱动开发文档_第5页
资源描述:

《linux uart 串口驱动开发文档》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、linuxUART串口驱动开发文档摘要:介绍了Linux下的串口驱动的设计层次及接口,并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用),以及Linux下的中断处理机制/中断共享机制,还有串口缓冲机制当中涉及的软中断机制;其中有关w83697/w83977IC方面的知识,具体参考相关手册,对串口的配置寄存器有详细介绍,。关键词:UART,Linux,串口驱动,接口w83697/w83977superI/O串口驱动开发内容简介:介绍了Linux下的串口驱动的设计层次及接口,并指出串口与TTY终端

2、之间的关联层次(串口可作TTY终端使用),以及Linux下的中断处理机制/中断共享机制,还有串口缓冲机制当中涉及的软中断机制;其中有关w83697/w83977IC方面的知识,具体参考相关手册,对串口的配置寄存器有详细介绍,本文不再进行说明.目录索引:一.Linux的串口接口及层次.二.Linux的中断机制及中断共享机制.三.Linux的软中断机制.四.TTY与串口的具体关联.一.Linux的串口接口及层次.串口是使用已经非常广的设备了,因此在linux下面的支持已经很完善了,具有统一的编程接口,驱动开发

3、者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏,这此配置宏包括读与写,中断打开与关闭(如传送与接收中断),接收状态处理,有FIFO时还要处理FIFO的状态.如下我们就首先切入这一部分,具体了解一下与硬件串口IC相关的部分在驱动中的处理,这一部分可以说是串口驱动中的最基础部分,直接与硬件打交道,完成最底层具体的串口数据传输.1.串口硬件资源的处理.W83697及W83977在ep93xx板子上的映射的硬件物理空间如下:W83697:0x20000000起1K空间.W83977:0x3000000

4、0起1K空间.因为串口设备的特殊性,可以当作终端使用,但是终端的使用在内核还未完全初始化之前(关于串口与终端的关联及层次在第四节中详细),此时还没有通过mem_init()建立内核的虚存管理机制,所以不能通过ioreamp来进行物理内存到虚存的映射(物理内存必须由内核映射成系统管理的虚拟内存后才能进行读写访问),这与先前所讲的framebuffer的物理内存映射是不同的,具体原因如下:√终端在注册并使用的调用路径如下:start_kernel→console_init→uart_console_init→

5、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系统初始化完成后的调用机制,这两个机制本质没有什么差别,主要是执行时所处的

6、系统时段)√串口物理内存映射到虚存的时机:依据上面所介绍的两条执行路径,再看内核的内存初始化的调用时期,只有完成这个初始化后才能进行物理内存到虚存的映射,内存的初始化主要是在start_kernel中调用的mem_init,这个调用明显在uart_console_init之后,在fbmem_init之后,到此就全部说明了为何不能在对串口使用ioremap进行物理内存的映射了。那么究竟要在什么时机用什么方法进行串口物理内存的映射呢?√串口物理内存的映射方式:参考ep93xx的板载I/O的映射处理,它的处理方

7、式是一次性将所有的物理I/O所在的内存空间映射到虚存空间,映射的基址是IO_BASE_VIRT,大小是IO_SIZE./*WhereinvirtualmemorytheIOdevices(timers,systemcontrollers*andsoon).Thisgetsusedinarch/arm/mach-ep93xx/mm.c.*/#defineIO_BASE_VIRT0xFF000000//VirtualaddressofIO#defineIO_BASE_PHYS0x80000000//Physi

8、caladdressofIO#defineIO_SIZE0x00A00000//Howmuch?完成映射的函数是ep93xx_map_io,所有要进行映射内存都在ep93xx_io_desc结构当中描述,我们的串口映射也加在这个地方,基址分别如下:文件:linux-2.4.21/include/asm-arm/arch-ep93xx/regmap.h#defineIO_W83697_UART_BASE0x20000000#de

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。