内核UART串口驱动开发文档,console,tty,kernel.docVIP

内核UART串口驱动开发文档,console,tty,kernel.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内核UART串口驱动开发文档,console,tty,kernel

内核UART串口驱动开发文档,console,tty,kernel 收藏 UART串口驱动开发文档 -------w83697/w83977 super I/O串口驱动开发 文档作者: 侯辉华 部 门: 时 间: 2007/08/12 内容简介: 介绍了Linux下的串口驱动的设计层次及接口, 并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用), 以及Linux下的中断处理机制/中断共享机制, 还有串口缓冲机制当中涉及的软中断机制; 其中有关w83697/w83977 IC方面的知识, 具体参考相关手册, 对串口的配置寄存器有详细介绍, 本文不再进行说明. 目录索引: 一. Linux的串口接口及层次. 二. Linux的中断机制及中断共享机制. 三. Linux的软中断机制. 四. TTY与串口的具体关联. 五. 串口使用示例说明. 1 一. Linux的串口接口及层次. 串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输. 1. 串口硬件资源的处理. W83697及W83977在ep93xx板子上的映射的硬件物理空间如下: W83697: 01K空间. W83977: 01K空间. 因为串口设备的特殊性, 可以当作终端使用, 但是终端的使用在内核还未完全初始化之前(关于串口与终端的关联及层次在第四节中详细), 此时还没有通过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进行物理内存的映射了。那么究竟要在什么时机用什么方法进行串口物理内存的映射呢? ?? 串口物理内存的映射方式: 参考ep93xx的板载I/O的映射处理,它的处理方式是一次性将所有的物理I/O所在的内存空间映射到虚存空间,映射的基址是IO_BASE_VIRT,大小是IO_SIZE. /* Where in virtual memory the IO devices (timers, system controllers * and so on). This gets used in arch/arm/mach-ep93xx/mm.c.*/ #define IO_BASE_VIRT 0xFF000000 // Virtual address of IO #define IO_BASE_PHYS 0// Physical address of IO 2 #define IO_SIZE 0x00A00000 // How much? 完成映射的函数是ep93xx_map_io, 所有要进行映射内存都在ep93xx_io_desc结构当中描述,我们的串口映射也加在这个地方,基址分别如下: 文件: linux-2.4.21/include/asm-arm/arch-ep93xx/r

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档