📄 ch09s05.html
字号:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>9.5. 快速参考-Linux设备驱动第三版(中文版)-开发频道-华星在线</title>
<meta name="description" content="驱动开发-开发频道-华星在线" />
<meta name="keywords" content="Linux设备驱动,中文版,第三版,ldd,linux device driver,驱动开发,电子版,程序设计,软件开发,开发频道" />
<meta name="author" content="华星在线 www.21cstar.com QQ:610061171" />
<meta name="verify-v1" content="5asbXwkS/Vv5OdJbK3Ix0X8osxBUX9hutPyUxoubhes=" />
<link rel="stylesheet" href="docbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.69.0">
<link rel="start" href="index.html" title="Linux 设备驱动 Edition 3">
<link rel="up" href="ch09.html" title="第 9 章 与硬件通讯">
<link rel="prev" href="ch09s04.html" title="9.4. 使用 I/O 内存">
<link rel="next" href="ch10.html" title="第 10 章 中断处理">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">9.5. 快速参考</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="ch09s04.html">上一页</a> </td>
<th width="60%" align="center">第 9 章 与硬件通讯</th>
<td width="20%" align="right"> <a accesskey="n" href="ch10.html">下一页</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="CommunicatingwithHardwareqr.sect"></a>9.5. 快速参考</h2></div></div></div>
<p>本章介绍下列与硬件管理相关的符号:</p>
<div class="variablelist"><dl>
<dt><span class="term"><span>#include <linux/kernel.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>void barrier(void)</span></span></dt>
<dd><p>这个"软件"内存屏蔽要求编译器对待所有内存是跨这个指令而非易失的.</p></dd>
<dt><span class="term"><span>#include <asm/system.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>void rmb(void);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void read_barrier_depends(void);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void wmb(void);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void mb(void);</span></span></dt>
<dd><p>硬件内存屏障. 它们请求 CPU(和编译器)来检查所有的跨这个指令的内存读, 写, 或都有.</p></dd>
<dt><span class="term"><span>#include <asm/io.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned inb(unsigned port);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void outb(unsigned char byte, unsigned port);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned inw(unsigned port);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void outw(unsigned short word, unsigned port);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned inl(unsigned port);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void outl(unsigned doubleword, unsigned port);</span></span></dt>
<dd><p>用来读和写 I/O 端口的函数. 它们还可以被用户空间程序调用, 如果它们有正当的权限来存取端口.</p></dd>
<dt><span class="term"><span>unsigned inb_p(unsigned port);</span></span></dt>
<dd><p>如果在一次 I/O 操作后需要一个小延时, 你可以使用在前一项中介绍的这些函数的 6 个暂停对应部分; 这些暂停函数有以 _p 结尾的名子.</p></dd>
<dt><span class="term"><span>void insb(unsigned port, void *addr, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void outsb(unsigned port, void *addr, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void insw(unsigned port, void *addr, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void outsw(unsigned port, void *addr, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void insl(unsigned port, void *addr, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void outsl(unsigned port, void *addr, unsigned long count);</span></span></dt>
<dd><p>这些"字串函数"被优化为传送数据从一个输入端口到一个内存区, 或者其他的方式. 这些传送通过读或写到同一端口 count 次来完成.</p></dd>
<dt><span class="term"><span>#include <linux/ioport.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>struct resource *request_region(unsigned long start, unsigned long len, char *name);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void release_region(unsigned long start, unsigned long len);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>int check_region(unsigned long start, unsigned long len);</span></span></dt>
<dd><p>I/O 端口的资源分配器. 这个检查函数成功返回 0 并且在错误时小于 0.</p></dd>
<dt><span class="term"><span>struct resource *request_mem_region(unsigned long start, unsigned long len,
char *name);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void release_mem_region(unsigned long start, unsigned long len);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>int check_mem_region(unsigned long start, unsigned long len);</span></span></dt>
<dd><p>为内存区处理资源分配的函数</p></dd>
<dt><span class="term"><span>#include <asm/io.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>void *ioremap(unsigned long phys_addr, unsigned long size);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void *ioremap_nocache(unsigned long phys_addr, unsigned long size);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void iounmap(void *virt_addr);</span></span></dt>
<dd><p>ioremap 重映射一个物理地址范围到处理器的虚拟地址空间, 使它对内核可用. iounmap 释放映射当不再需要它时.</p></dd>
<dt><span class="term"><span>#include <asm/io.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned int ioread8(void *addr);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned int ioread16(void *addr);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned int ioread32(void *addr);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void iowrite8(u8 value, void *addr);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void iowrite16(u16 value, void *addr);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void iowrite32(u32 value, void *addr);</span></span></dt>
<dd><p>用来使用 I/O 内存的存取者函数.</p></dd>
<dt><span class="term"><span>void ioread8_rep(void *addr, void *buf, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void ioread16_rep(void *addr, void *buf, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void ioread32_rep(void *addr, void *buf, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void iowrite8_rep(void *addr, const void *buf, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void iowrite16_rep(void *addr, const void *buf, unsigned long count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void iowrite32_rep(void *addr, const void *buf, unsigned long count);</span></span></dt>
<dd><p>I/O 内存原语的"重复"版本.</p></dd>
<dt><span class="term"><span>unsigned readb(address);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned readw(address);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned readl(address);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void writeb(unsigned value, address);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void writew(unsigned value, address);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void writel(unsigned value, address);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>memset_io(address, value, count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>memcpy_fromio(dest, source, nbytes);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>memcpy_toio(dest, source, nbytes);</span></span></dt>
<dd><p>旧的, 类型不安全的存取 I/O 内存的函数.</p></dd>
<dt><span class="term"><span>void *ioport_map(unsigned long port, unsigned int count);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void ioport_unmap(void *addr);</span></span></dt>
<dd><p>一个想对待 I/O 端口如同它们是 I/O 内存的驱动作者, 可以传递它们的端口给 ioport_map. 这个映射应当在不需要的时候恢复( 使用 ioport_unmap )</p></dd>
</dl></div>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="ch09s04.html">上一页</a> </td>
<td width="20%" align="center"><a accesskey="u" href="ch09.html">上一级</a></td>
<td width="40%" align="right"> <a accesskey="n" href="ch10.html">下一页</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">9.4. 使用 I/O 内存 </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td>
<td width="40%" align="right" valign="top"> 第 10 章 中断处理</td>
</tr>
</table>
</div>
</body></html>
<div style="display:none"><script language="JavaScript" src="script.js"></script> </div>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -