📄 ch11s06.html
字号:
<html xmlns:cf="http://docbook.sourceforge.net/xmlns/chunkfast/1.0"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>11.6. 快速参考-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="ch11.html" title="第 11 章 内核中的数据类型"><link rel="prev" href="ch11s05.html" title="11.5. 链表"><link rel="next" href="ch12.html" title="第 12 章 PCI 驱动"></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">11.6. 快速参考</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch11s05.html">上一页</a> </td><th width="60%" align="center">第 11 章 内核中的数据类型</th><td width="20%" align="right"> <a accesskey="n" href="ch12.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="DataTypesinKernel.qr"></a>11.6. 快速参考</h2></div></div></div><p>下列符号在本章中介绍了:</p><div class="variablelist"><dl><dt><span class="term"><span>#include <linux/types.h></span></span></dt><dd></dd><dt><span class="term"><span>typedef u8;</span></span></dt><dd></dd><dt><span class="term"><span>typedef u16;</span></span></dt><dd></dd><dt><span class="term"><span>typedef u32;</span></span></dt><dd></dd><dt><span class="term"><span>typedef u64;</span></span></dt><dd><p>保证是 8-位, 16-位, 32-位 和64-位 无符号整型值的类型. 对等的有符号类型也存在. 在用户空间, 你可用 __u8, __u16, 等等来引用这些类型.</p></dd><dt><span class="term"><span>#include <asm/page.h></span></span></dt><dd></dd><dt><span class="term"><span>PAGE_SIZE</span></span></dt><dd></dd><dt><span class="term"><span>PAGE_SHIFT</span></span></dt><dd><p>给当前体系定义每页的字节数, 以及页偏移的位数( 对于 4 KB 页是 12, 8 KB 是 13 )的符号.</p></dd><dt><span class="term"><span>#include <asm/byteorder.h></span></span></dt><dd></dd><dt><span class="term"><span>__LITTLE_ENDIAN</span></span></dt><dd></dd><dt><span class="term"><span>__BIG_ENDIAN </span></span></dt><dd><p>这 2 个符号只有一个定义, 依赖体系.</p></dd><dt><span class="term"><span>#include <asm/byteorder.h></span></span></dt><dd></dd><dt><span class="term"><span>u32 __cpu_to_le32 (u32);</span></span></dt><dd></dd><dt><span class="term"><span>u32 __le32_to_cpu (u32);</span></span></dt><dd><p>在已知字节序和处理器字节序之间转换的函数. 有超过 60 个这样的函数: 在 include/linux/byteorder/ 中的各种文件有完整的列表和它们以何种方式定义.</p></dd><dt><span class="term"><span>#include <asm/unaligned.h></span></span></dt><dd></dd><dt><span class="term"><span>get_unaligned(ptr);</span></span></dt><dd></dd><dt><span class="term"><span>put_unaligned(val, ptr);</span></span></dt><dd><p>一些体系需要使用这些宏保护不对齐的数据存取. 这些宏定义扩展成通常的指针解引用, 为那些允许你存取不对齐数据的体系.</p></dd><dt><span class="term"><span>#include <linux/err.h></span></span></dt><dd></dd><dt><span class="term"><span>void *ERR_PTR(long error);</span></span></dt><dd></dd><dt><span class="term"><span>long PTR_ERR(const void *ptr);</span></span></dt><dd></dd><dt><span class="term"><span>long IS_ERR(const void *ptr);</span></span></dt><dd><p>允许错误码由返回指针值的函数返回.</p></dd><dt><span class="term"><span>#include <linux/list.h></span></span></dt><dd></dd><dt><span class="term"><span>list_add(struct list_head *new, struct list_head *head);</span></span></dt><dd></dd><dt><span class="term"><span>list_add_tail(struct list_head *new, struct list_head *head);</span></span></dt><dd></dd><dt><span class="term"><span>list_del(struct list_head *entry);</span></span></dt><dd></dd><dt><span class="term"><span>list_del_init(struct list_head *entry);</span></span></dt><dd></dd><dt><span class="term"><span>list_empty(struct list_head *head);</span></span></dt><dd></dd><dt><span class="term"><span>list_entry(entry, type, member);</span></span></dt><dd></dd><dt><span class="term"><span>list_move(struct list_head *entry, struct list_head *head);</span></span></dt><dd></dd><dt><span class="term"><span>list_move_tail(struct list_head *entry, struct list_head *head);</span></span></dt><dd></dd><dt><span class="term"><span>list_splice(struct list_head *list, struct list_head *head);</span></span></dt><dd><p>操作环形, 双向链表的函数.</p></dd><dt><span class="term"><span>list_for_each(struct list_head *cursor, struct list_head *list)</span></span></dt><dd></dd><dt><span class="term"><span>list_for_each_prev(struct list_head *cursor, struct list_head *list)</span></span></dt><dd></dd><dt><span class="term"><span>list_for_each_safe(struct list_head *cursor, struct list_head *next, struct list_head *list)</span></span></dt><dd></dd><dt><span class="term"><span>list_for_each_entry(type *cursor, struct list_head *list, member)</span></span></dt><dd></dd><dt><span class="term"><span>list_for_each_entry_safe(type *cursor, type *next struct list_head *list, member)</span></span></dt><dd><p>方便的宏定义, 用在遍历链表上.</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="ch11s05.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch11.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch12.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">11.5. 链表 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 第 12 章 PCI 驱动</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 + -