About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / zh_CN / sparse.txt




Custom Search

Based on kernel version 3.13. Page generated on 2014-01-20 22:05 EST.

1	Chinese translated version of Documentation/sparse.txt
2	
3	If you have any comment or update to the content, please contact the
4	original document maintainer directly.  However, if you have a problem
5	communicating in English you can also ask the Chinese maintainer for
6	help.  Contact the Chinese maintainer if this translation is outdated
7	or if there is a problem with the translation.
8	
9	Chinese maintainer: Li Yang <leo@zh-kernel.org>
10	---------------------------------------------------------------------
11	Documentation/sparse.txt 的中文翻译
12	
13	如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
14	交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
15	译存在问题,请联系中文版维护者。
16	
17	中文版维护者: 李阳  Li Yang <leo@zh-kernel.org>
18	中文版翻译者: 李阳  Li Yang <leo@zh-kernel.org>
19	
20	
21	以下为正文
22	---------------------------------------------------------------------
23	
24	Copyright 2004 Linus Torvalds
25	Copyright 2004 Pavel Machek <pavel@ucw.cz>
26	Copyright 2006 Bob Copeland <me@bobcopeland.com>
27	
28	使用 sparse 工具做类型检查
29	~~~~~~~~~~~~~~~~~~~~~~~~~~
30	
31	"__bitwise" 是一种类型属性,所以你应该这样使用它:
32	
33	        typedef int __bitwise pm_request_t;
34	
35	        enum pm_request {
36	                PM_SUSPEND = (__force pm_request_t) 1,
37	                PM_RESUME = (__force pm_request_t) 2
38	        };
39	
40	这样会使 PM_SUSPEND 和 PM_RESUME 成为位方式(bitwise)整数(使用"__force"
41	是因为 sparse 会抱怨改变位方式的类型转换,但是这里我们确实需要强制进行转
42	换)。而且因为所有枚举值都使用了相同的类型,这里的"enum pm_request"也将
43	会使用那个类型做为底层实现。
44	
45	而且使用 gcc 编译的时候,所有的 __bitwise/__force 都会消失,最后在 gcc
46	看来它们只不过是普通的整数。
47	
48	坦白来说,你并不需要使用枚举类型。上面那些实际都可以浓缩成一个特殊的"int
49	__bitwise"类型。
50	
51	所以更简单的办法只要这样做:
52	
53		typedef int __bitwise pm_request_t;
54	
55		#define PM_SUSPEND ((__force pm_request_t) 1)
56		#define PM_RESUME ((__force pm_request_t) 2)
57	
58	现在你就有了严格的类型检查所需要的所有基础架构。
59	
60	一个小提醒:常数整数"0"是特殊的。你可以直接把常数零当作位方式整数使用而
61	不用担心 sparse 会抱怨。这是因为"bitwise"(恰如其名)是用来确保不同位方
62	式类型不会被弄混(小尾模式,大尾模式,cpu尾模式,或者其他),对他们来说
63	常数"0"确实是特殊的。
64	
65	获取 sparse 工具
66	~~~~~~~~~~~~~~~~
67	
68	你可以从 Sparse 的主页获取最新的发布版本:
69	
70		http://www.kernel.org/pub/linux/kernel/people/josh/sparse/
71	
72	或者,你也可以使用 git 克隆最新的 sparse 开发版本:
73	
74		git://git.kernel.org/pub/scm/linux/kernel/git/josh/sparse.git
75	
76	DaveJ 把每小时自动生成的 git 源码树 tar 包放在以下地址:
77	
78		http://www.codemonkey.org.uk/projects/git-snapshots/sparse/
79	
80	一旦你下载了源码,只要以普通用户身份运行:
81	
82		make
83		make install
84	
85	它将会被自动安装到你的 ~/bin 目录下。
86	
87	使用 sparse 工具
88	~~~~~~~~~~~~~~~~
89	
90	用"make C=1"命令来编译内核,会对所有重新编译的 C 文件使用 sparse 工具。
91	或者使用"make C=2"命令,无论文件是否被重新编译都会对其使用 sparse 工具。
92	如果你已经编译了内核,用后一种方式可以很快地检查整个源码树。
93	
94	make 的可选变量 CHECKFLAGS 可以用来向 sparse 工具传递参数。编译系统会自
95	动向 sparse 工具传递 -Wbitwise 参数。你可以定义 __CHECK_ENDIAN__ 来进行
96	大小尾检查。
97	
98		make C=2 CHECKFLAGS="-D__CHECK_ENDIAN__"
99	
100	这些检查默认都是被关闭的,因为他们通常会产生大量的警告。
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.