📄 x1354.html
字号:
<HTML
><HEAD
><TITLE
>Changes between 2.0 and 2.2</TITLE
><META
NAME="GENERATOR"
CONTENT="Microsoft FrontPage 4.0"><LINK
REL="HOME"
TITLE="The Linux Kernel Module Programming Guide"
HREF="index.html"><LINK
REL="UP"
TITLE="Changes: 2.0 To 2.2"
HREF="a1352.html"><LINK
REL="PREVIOUS"
TITLE="Changes: 2.0 To 2.2"
HREF="a1352.html"><LINK
REL="NEXT"
TITLE="Where To Go From Here"
HREF="a1481.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Linux内核驱动模块编程指南 (内核版本2.2, 2.4)</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="a1352.html"
ACCESSKEY="P"
>返回</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>附录 A. 从2.0到2.2的变化</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="a1481.html"
ACCESSKEY="N"
>继续</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="AEN1354"
></A
>A.1. 从2.0到2.2的变化</H1
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN1361"
></A
>A.1.1. 从2.0到2.2的变化</H2
><P
>我对内核的了解并不很完全所以我也无法写出所有的变化。在修改代码(更确切的说,是采用Emmanuel
Papirakis的修改)时,我遇到了以下的这些修改。我将它们都列出来以方便模块编写者们,特别是学习该档案先前版本并熟悉我提到的这些技巧(但已经更换到新版本的)的那些人。</P
><P
>更多的这方面的参考资料在 <A
HREF="http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html"
TARGET="_top"
> Richard Gooch's</A
>的站点上。</P
><DIV
CLASS="VARIABLELIST"
><DL
><DT
><TT
CLASS="FILENAME"
>asm/uaccess.h</TT
></DT
><DD
><P
>如果你要使用 <TT
CLASS="FUNCTION"
>put_user</TT
> 或 <TT
CLASS="FUNCTION"
>get_user </TT
>你就需要 <B
><TT
CLASS="USERINPUT"
>#include</TT
></B
> 它。</P
></DD
><DT
><TT
CLASS="FUNCTION"
>get_user</TT
></DT
><DD
><P
>在2.2版本中, <TT
CLASS="FUNCTION"
>get_user</TT
>
同时接收用户内存的指针和用来设置信息的内核内存中变量的内存指针。变化的原因是因为当我们读取的变量是二或四个字节长的时候, <TT
CLASS="FUNCTION"
>get_user</TT
> 也可以读取二或四个字节长的变量。</P
></DD
><DT
><SPAN
CLASS="STRUCTNAME"
>file_operations</SPAN
></DT
><DD
><P
>改结构体现在有了一个可以在 <TT
CLASS="FUNCTION"
>open</TT
> 和 <TT
CLASS="FUNCTION"
>close </TT
>之间进行的刷新操作函数 <TT
CLASS="FUNCTION"
>flush </TT
>。 </P
></DD
><DT
>在 <SPAN
CLASS="STRUCTNAME"
>file_operations 中的 </SPAN
><TT
CLASS="FUNCTION"
>close</TT
></DT
><DD
><P
>在2.2版本中,<TT
CLASS="FUNCTION"
>close</TT
> 返回整形值,所以可以检测是否失败。</P
></DD
>
<dt>在 <SPAN
CLASS="STRUCTNAME"
>file_operations 中的 read,write</SPAN
></dt>
<DD
><P
>这些函数的头文件改变了。它们现在返回 <TT
CLASS="USERINPUT"
><B
>ssize_t</B
></TT
> 而不是整形值,并且它们的参数表也变了。inode
不再是一个参数,文件中的偏移量也一样。</P
></DD
><DT
><TT
CLASS="FUNCTION"
>proc_register_dynamic</TT
></DT
><DD
><P
>该函数已经不复存在。你应该使用用0作为inode参数的 <TT
CLASS="FUNCTION"
>proc_register</TT
>
函数来替代它。</P
></DD
><DT
>Signals</DT
><DD
><P
>在 task 结构体中的 signals 不再是一个32位整形变量,而是一个为
<I
><TT
CLASS="PARAMETER"
>_NSIG_WORDS </TT
>
</I
>整形的数组。</P
></DD
><DT
><TT
CLASS="FUNCTION"
>queue_task_irq</TT
></DT
><DD
><P
>即使你想在中断处理内部调度一个任务,你也应该使用 <TT
CLASS="FUNCTION"
>queue_task</TT
> 而不是 <TT
CLASS="FUNCTION"
>queue_task_irq</TT
> 。</P
></DD
><DT
>模块参数</DT
><DD
><P
>你不必在将模块参数声明为全局变量。在2.2中,使用
<TT
CLASS="PARAMETER"
><I
>MODULE_PARM</I
></TT
>
去声明模块参数。这是一个进步,这样就允许模块接受以数字开头的参数名而不会被弄糊涂。</P
></DD
><DT
>对称多线程</DT
><DD
><P
>内核本省已不再是一个 spinlock,意味着你的模块也应该考虑SMP的问题。</P
></DD
></DL
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0" height="29"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top" height="18"
><A
HREF="a1352.html"
ACCESSKEY="P"
>返回</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top" height="18"
><A
HREF="index.html"
ACCESSKEY="H"
>返回首页</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top" height="18"
><A
HREF="a1481.html"
ACCESSKEY="N"
>继续</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top" height="11"
>从2.0到2.2的变化</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top" height="11"
><A
HREF="a1352.html"
ACCESSKEY="U"
>返回本章开始</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top" height="11"
>为什么这样写?</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -