1*94c1fbd4SYanteng Si.. include:: ../disclaimer-zh_CN.rst
2*94c1fbd4SYanteng Si
3*94c1fbd4SYanteng Si:Original: Documentation/core-api/kernel-api.rst
4*94c1fbd4SYanteng Si:Translator: Yanteng Si <siyanteng@loongson.cn>
5*94c1fbd4SYanteng Si
6*94c1fbd4SYanteng Si.. _cn_kernel-api.rst:
7*94c1fbd4SYanteng Si
8*94c1fbd4SYanteng Si
9*94c1fbd4SYanteng Si============
10*94c1fbd4SYanteng SiLinux内核API
11*94c1fbd4SYanteng Si============
12*94c1fbd4SYanteng Si
13*94c1fbd4SYanteng Si
14*94c1fbd4SYanteng Si列表管理函数
15*94c1fbd4SYanteng Si============
16*94c1fbd4SYanteng Si
17*94c1fbd4SYanteng Si该API在以下内核代码中:
18*94c1fbd4SYanteng Si
19*94c1fbd4SYanteng Siinclude/linux/list.h
20*94c1fbd4SYanteng Si
21*94c1fbd4SYanteng Si基本的C库函数
22*94c1fbd4SYanteng Si=============
23*94c1fbd4SYanteng Si
24*94c1fbd4SYanteng Si在编写驱动程序时,一般不能使用C库中的例程。部分函数通常很有用,它们在
25*94c1fbd4SYanteng Si下面被列出。这些函数的行为可能会与ANSI定义的略有不同,这些偏差会在文中
26*94c1fbd4SYanteng Si注明。
27*94c1fbd4SYanteng Si
28*94c1fbd4SYanteng Si字符串转换
29*94c1fbd4SYanteng Si----------
30*94c1fbd4SYanteng Si
31*94c1fbd4SYanteng Si该API在以下内核代码中:
32*94c1fbd4SYanteng Si
33*94c1fbd4SYanteng Silib/vsprintf.c
34*94c1fbd4SYanteng Si
35*94c1fbd4SYanteng Siinclude/linux/kernel.h
36*94c1fbd4SYanteng Si
37*94c1fbd4SYanteng Siinclude/linux/kernel.h
38*94c1fbd4SYanteng Si
39*94c1fbd4SYanteng Silib/kstrtox.c
40*94c1fbd4SYanteng Si
41*94c1fbd4SYanteng Silib/string_helpers.c
42*94c1fbd4SYanteng Si
43*94c1fbd4SYanteng Si字符串处理
44*94c1fbd4SYanteng Si----------
45*94c1fbd4SYanteng Si
46*94c1fbd4SYanteng Si该API在以下内核代码中:
47*94c1fbd4SYanteng Si
48*94c1fbd4SYanteng Silib/string.c
49*94c1fbd4SYanteng Si
50*94c1fbd4SYanteng Siinclude/linux/string.h
51*94c1fbd4SYanteng Si
52*94c1fbd4SYanteng Simm/util.c
53*94c1fbd4SYanteng Si
54*94c1fbd4SYanteng Si基本的内核库函数
55*94c1fbd4SYanteng Si================
56*94c1fbd4SYanteng Si
57*94c1fbd4SYanteng SiLinux内核提供了很多实用的基本函数。
58*94c1fbd4SYanteng Si
59*94c1fbd4SYanteng Si位运算
60*94c1fbd4SYanteng Si------
61*94c1fbd4SYanteng Si
62*94c1fbd4SYanteng Si该API在以下内核代码中:
63*94c1fbd4SYanteng Si
64*94c1fbd4SYanteng Siinclude/asm-generic/bitops/instrumented-atomic.h
65*94c1fbd4SYanteng Si
66*94c1fbd4SYanteng Siinclude/asm-generic/bitops/instrumented-non-atomic.h
67*94c1fbd4SYanteng Si
68*94c1fbd4SYanteng Siinclude/asm-generic/bitops/instrumented-lock.h
69*94c1fbd4SYanteng Si
70*94c1fbd4SYanteng Si位图运算
71*94c1fbd4SYanteng Si--------
72*94c1fbd4SYanteng Si
73*94c1fbd4SYanteng Si该API在以下内核代码中:
74*94c1fbd4SYanteng Si
75*94c1fbd4SYanteng Silib/bitmap.c
76*94c1fbd4SYanteng Si
77*94c1fbd4SYanteng Siinclude/linux/bitmap.h
78*94c1fbd4SYanteng Si
79*94c1fbd4SYanteng Siinclude/linux/bitmap.h
80*94c1fbd4SYanteng Si
81*94c1fbd4SYanteng Siinclude/linux/bitmap.h
82*94c1fbd4SYanteng Si
83*94c1fbd4SYanteng Silib/bitmap.c
84*94c1fbd4SYanteng Si
85*94c1fbd4SYanteng Silib/bitmap.c
86*94c1fbd4SYanteng Si
87*94c1fbd4SYanteng Siinclude/linux/bitmap.h
88*94c1fbd4SYanteng Si
89*94c1fbd4SYanteng Si命令行解析
90*94c1fbd4SYanteng Si----------
91*94c1fbd4SYanteng Si
92*94c1fbd4SYanteng Si该API在以下内核代码中:
93*94c1fbd4SYanteng Si
94*94c1fbd4SYanteng Silib/cmdline.c
95*94c1fbd4SYanteng Si
96*94c1fbd4SYanteng Si排序
97*94c1fbd4SYanteng Si----
98*94c1fbd4SYanteng Si
99*94c1fbd4SYanteng Si该API在以下内核代码中:
100*94c1fbd4SYanteng Si
101*94c1fbd4SYanteng Silib/sort.c
102*94c1fbd4SYanteng Si
103*94c1fbd4SYanteng Silib/list_sort.c
104*94c1fbd4SYanteng Si
105*94c1fbd4SYanteng Si文本检索
106*94c1fbd4SYanteng Si--------
107*94c1fbd4SYanteng Si
108*94c1fbd4SYanteng Si该API在以下内核代码中:
109*94c1fbd4SYanteng Si
110*94c1fbd4SYanteng Silib/textsearch.c
111*94c1fbd4SYanteng Si
112*94c1fbd4SYanteng Silib/textsearch.c
113*94c1fbd4SYanteng Si
114*94c1fbd4SYanteng Siinclude/linux/textsearch.h
115*94c1fbd4SYanteng Si
116*94c1fbd4SYanteng SiLinux中的CRC和数学函数
117*94c1fbd4SYanteng Si======================
118*94c1fbd4SYanteng Si
119*94c1fbd4SYanteng Si
120*94c1fbd4SYanteng SiCRC函数
121*94c1fbd4SYanteng Si-------
122*94c1fbd4SYanteng Si
123*94c1fbd4SYanteng Si*译注:CRC,Cyclic Redundancy Check,循环冗余校验*
124*94c1fbd4SYanteng Si
125*94c1fbd4SYanteng Si该API在以下内核代码中:
126*94c1fbd4SYanteng Si
127*94c1fbd4SYanteng Silib/crc4.c
128*94c1fbd4SYanteng Si
129*94c1fbd4SYanteng Silib/crc7.c
130*94c1fbd4SYanteng Si
131*94c1fbd4SYanteng Silib/crc8.c
132*94c1fbd4SYanteng Si
133*94c1fbd4SYanteng Silib/crc16.c
134*94c1fbd4SYanteng Si
135*94c1fbd4SYanteng Silib/crc32.c
136*94c1fbd4SYanteng Si
137*94c1fbd4SYanteng Silib/crc-ccitt.c
138*94c1fbd4SYanteng Si
139*94c1fbd4SYanteng Silib/crc-itu-t.c
140*94c1fbd4SYanteng Si
141*94c1fbd4SYanteng Si基数为2的对数和幂函数
142*94c1fbd4SYanteng Si---------------------
143*94c1fbd4SYanteng Si
144*94c1fbd4SYanteng Si该API在以下内核代码中:
145*94c1fbd4SYanteng Si
146*94c1fbd4SYanteng Siinclude/linux/log2.h
147*94c1fbd4SYanteng Si
148*94c1fbd4SYanteng Si整数幂函数
149*94c1fbd4SYanteng Si----------
150*94c1fbd4SYanteng Si
151*94c1fbd4SYanteng Si该API在以下内核代码中:
152*94c1fbd4SYanteng Si
153*94c1fbd4SYanteng Silib/math/int_pow.c
154*94c1fbd4SYanteng Si
155*94c1fbd4SYanteng Silib/math/int_sqrt.c
156*94c1fbd4SYanteng Si
157*94c1fbd4SYanteng Si除法函数
158*94c1fbd4SYanteng Si--------
159*94c1fbd4SYanteng Si
160*94c1fbd4SYanteng Si该API在以下内核代码中:
161*94c1fbd4SYanteng Si
162*94c1fbd4SYanteng Siinclude/asm-generic/div64.h
163*94c1fbd4SYanteng Si
164*94c1fbd4SYanteng Siinclude/linux/math64.h
165*94c1fbd4SYanteng Si
166*94c1fbd4SYanteng Silib/math/div64.c
167*94c1fbd4SYanteng Si
168*94c1fbd4SYanteng Silib/math/gcd.c
169*94c1fbd4SYanteng Si
170*94c1fbd4SYanteng SiUUID/GUID
171*94c1fbd4SYanteng Si---------
172*94c1fbd4SYanteng Si
173*94c1fbd4SYanteng Si该API在以下内核代码中:
174*94c1fbd4SYanteng Si
175*94c1fbd4SYanteng Silib/uuid.c
176*94c1fbd4SYanteng Si
177*94c1fbd4SYanteng Si内核IPC设备
178*94c1fbd4SYanteng Si===========
179*94c1fbd4SYanteng Si
180*94c1fbd4SYanteng SiIPC实用程序
181*94c1fbd4SYanteng Si-----------
182*94c1fbd4SYanteng Si
183*94c1fbd4SYanteng Si该API在以下内核代码中:
184*94c1fbd4SYanteng Si
185*94c1fbd4SYanteng Siipc/util.c
186*94c1fbd4SYanteng Si
187*94c1fbd4SYanteng SiFIFO 缓冲区
188*94c1fbd4SYanteng Si===========
189*94c1fbd4SYanteng Si
190*94c1fbd4SYanteng Sikfifo接口
191*94c1fbd4SYanteng Si---------
192*94c1fbd4SYanteng Si
193*94c1fbd4SYanteng Si该API在以下内核代码中:
194*94c1fbd4SYanteng Si
195*94c1fbd4SYanteng Siinclude/linux/kfifo.h
196*94c1fbd4SYanteng Si
197*94c1fbd4SYanteng Si转发接口支持
198*94c1fbd4SYanteng Si============
199*94c1fbd4SYanteng Si
200*94c1fbd4SYanteng Si转发接口支持旨在为工具和设备提供一种有效的机制,将大量数据从内核空间
201*94c1fbd4SYanteng Si转发到用户空间。
202*94c1fbd4SYanteng Si
203*94c1fbd4SYanteng Si转发接口
204*94c1fbd4SYanteng Si--------
205*94c1fbd4SYanteng Si
206*94c1fbd4SYanteng Si该API在以下内核代码中:
207*94c1fbd4SYanteng Si
208*94c1fbd4SYanteng Sikernel/relay.c
209*94c1fbd4SYanteng Si
210*94c1fbd4SYanteng Sikernel/relay.c
211*94c1fbd4SYanteng Si
212*94c1fbd4SYanteng Si模块支持
213*94c1fbd4SYanteng Si========
214*94c1fbd4SYanteng Si
215*94c1fbd4SYanteng Si模块加载
216*94c1fbd4SYanteng Si--------
217*94c1fbd4SYanteng Si
218*94c1fbd4SYanteng Si该API在以下内核代码中:
219*94c1fbd4SYanteng Si
220*94c1fbd4SYanteng Sikernel/kmod.c
221*94c1fbd4SYanteng Si
222*94c1fbd4SYanteng Si模块接口支持
223*94c1fbd4SYanteng Si------------
224*94c1fbd4SYanteng Si
225*94c1fbd4SYanteng Si更多信息请参考文件kernel/module.c226*94c1fbd4SYanteng Si
227*94c1fbd4SYanteng Si硬件接口
228*94c1fbd4SYanteng Si========
229*94c1fbd4SYanteng Si
230*94c1fbd4SYanteng Si
231*94c1fbd4SYanteng Si该API在以下内核代码中:
232*94c1fbd4SYanteng Si
233*94c1fbd4SYanteng Sikernel/dma.c
234*94c1fbd4SYanteng Si
235*94c1fbd4SYanteng Si资源管理
236*94c1fbd4SYanteng Si--------
237*94c1fbd4SYanteng Si
238*94c1fbd4SYanteng Si该API在以下内核代码中:
239*94c1fbd4SYanteng Si
240*94c1fbd4SYanteng Sikernel/resource.c
241*94c1fbd4SYanteng Si
242*94c1fbd4SYanteng Sikernel/resource.c
243*94c1fbd4SYanteng Si
244*94c1fbd4SYanteng SiMTRR处理
245*94c1fbd4SYanteng Si--------
246*94c1fbd4SYanteng Si
247*94c1fbd4SYanteng Si该API在以下内核代码中:
248*94c1fbd4SYanteng Si
249*94c1fbd4SYanteng Siarch/x86/kernel/cpu/mtrr/mtrr.c
250*94c1fbd4SYanteng Si
251*94c1fbd4SYanteng Si安全框架
252*94c1fbd4SYanteng Si========
253*94c1fbd4SYanteng Si
254*94c1fbd4SYanteng Si该API在以下内核代码中:
255*94c1fbd4SYanteng Si
256*94c1fbd4SYanteng Sisecurity/security.c
257*94c1fbd4SYanteng Si
258*94c1fbd4SYanteng Sisecurity/inode.c
259*94c1fbd4SYanteng Si
260*94c1fbd4SYanteng Si审计接口
261*94c1fbd4SYanteng Si========
262*94c1fbd4SYanteng Si
263*94c1fbd4SYanteng Si该API在以下内核代码中:
264*94c1fbd4SYanteng Si
265*94c1fbd4SYanteng Sikernel/audit.c
266*94c1fbd4SYanteng Si
267*94c1fbd4SYanteng Sikernel/auditsc.c
268*94c1fbd4SYanteng Si
269*94c1fbd4SYanteng Sikernel/auditfilter.c
270*94c1fbd4SYanteng Si
271*94c1fbd4SYanteng Si核算框架
272*94c1fbd4SYanteng Si========
273*94c1fbd4SYanteng Si
274*94c1fbd4SYanteng Si该API在以下内核代码中:
275*94c1fbd4SYanteng Si
276*94c1fbd4SYanteng Sikernel/acct.c
277*94c1fbd4SYanteng Si
278*94c1fbd4SYanteng Si块设备
279*94c1fbd4SYanteng Si======
280*94c1fbd4SYanteng Si
281*94c1fbd4SYanteng Si该API在以下内核代码中:
282*94c1fbd4SYanteng Si
283*94c1fbd4SYanteng Siblock/blk-core.c
284*94c1fbd4SYanteng Si
285*94c1fbd4SYanteng Siblock/blk-core.c
286*94c1fbd4SYanteng Si
287*94c1fbd4SYanteng Siblock/blk-map.c
288*94c1fbd4SYanteng Si
289*94c1fbd4SYanteng Siblock/blk-sysfs.c
290*94c1fbd4SYanteng Si
291*94c1fbd4SYanteng Siblock/blk-settings.c
292*94c1fbd4SYanteng Si
293*94c1fbd4SYanteng Siblock/blk-exec.c
294*94c1fbd4SYanteng Si
295*94c1fbd4SYanteng Siblock/blk-flush.c
296*94c1fbd4SYanteng Si
297*94c1fbd4SYanteng Siblock/blk-lib.c
298*94c1fbd4SYanteng Si
299*94c1fbd4SYanteng Siblock/blk-integrity.c
300*94c1fbd4SYanteng Si
301*94c1fbd4SYanteng Sikernel/trace/blktrace.c
302*94c1fbd4SYanteng Si
303*94c1fbd4SYanteng Siblock/genhd.c
304*94c1fbd4SYanteng Si
305*94c1fbd4SYanteng Siblock/genhd.c
306*94c1fbd4SYanteng Si
307*94c1fbd4SYanteng Si字符设备
308*94c1fbd4SYanteng Si========
309*94c1fbd4SYanteng Si
310*94c1fbd4SYanteng Si该API在以下内核代码中:
311*94c1fbd4SYanteng Si
312*94c1fbd4SYanteng Sifs/char_dev.c
313*94c1fbd4SYanteng Si
314*94c1fbd4SYanteng Si时钟框架
315*94c1fbd4SYanteng Si========
316*94c1fbd4SYanteng Si
317*94c1fbd4SYanteng Si时钟框架定义了编程接口,以支持系统时钟树的软件管理。该框架广泛用于系统级芯片(SOC)平
318*94c1fbd4SYanteng Si台,以支持电源管理和各种可能需要自定义时钟速率的设备。请注意,这些 “时钟”与计时或实
319*94c1fbd4SYanteng Si时时钟(RTC)无关,它们都有单独的框架。这些:c:type: `struct clk <clk>` 实例可用于管理
320*94c1fbd4SYanteng Si各种时钟信号,例如一个96理例如96MHz的时钟信号,该信号可被用于总线或外设的数据交换,或以
321*94c1fbd4SYanteng Si其他方式触发系统硬件中的同步状态机转换。
322*94c1fbd4SYanteng Si
323*94c1fbd4SYanteng Si通过明确的软件时钟门控来支持电源管理:未使用的时钟被禁用,因此系统不会因为改变不在使用
324*94c1fbd4SYanteng Si中的晶体管的状态而浪费电源。在某些系统中,这可能是由硬件时钟门控支持的,其中时钟被门控
325*94c1fbd4SYanteng Si而不在软件中被禁用。芯片的部分,在供电但没有时钟的情况下,可能会保留其最后的状态。这种
326*94c1fbd4SYanteng Si低功耗状态通常被称为*保留模式*。这种模式仍然会产生漏电流,特别是在电路几何结构较细的情
327*94c1fbd4SYanteng Si况下,但对于CMOS电路来说,电能主要是随着时钟翻转而被消耗的。
328*94c1fbd4SYanteng Si
329*94c1fbd4SYanteng Si电源感知驱动程序只有在其管理的设备处于活动使用状态时才会启用时钟。此外,系统睡眠状态通
330*94c1fbd4SYanteng Si常根据哪些时钟域处于活动状态而有所不同:“待机”状态可能允许从多个活动域中唤醒,而
331*94c1fbd4SYanteng Si"mem"(暂停到RAM)状态可能需要更全面地关闭来自高速PLL和振荡器的时钟,从而限制了可能
332*94c1fbd4SYanteng Si的唤醒事件源的数量。驱动器的暂停方法可能需要注意目标睡眠状态的系统特定时钟约束。
333*94c1fbd4SYanteng Si
334*94c1fbd4SYanteng Si一些平台支持可编程时钟发生器。这些可以被各种外部芯片使用,如其他CPU、多媒体编解码器以
335*94c1fbd4SYanteng Si及对接口时钟有严格要求的设备。
336*94c1fbd4SYanteng Si
337*94c1fbd4SYanteng Si该API在以下内核代码中:
338*94c1fbd4SYanteng Si
339*94c1fbd4SYanteng Siinclude/linux/clk.h
340*94c1fbd4SYanteng Si
341*94c1fbd4SYanteng Si同步原语
342*94c1fbd4SYanteng Si========
343*94c1fbd4SYanteng Si
344*94c1fbd4SYanteng Si读-复制-更新(RCU)
345*94c1fbd4SYanteng Si-------------------
346*94c1fbd4SYanteng Si
347*94c1fbd4SYanteng Si该API在以下内核代码中:
348*94c1fbd4SYanteng Si
349*94c1fbd4SYanteng Siinclude/linux/rcupdate.h
350*94c1fbd4SYanteng Si
351*94c1fbd4SYanteng Sikernel/rcu/tree.c
352*94c1fbd4SYanteng Si
353*94c1fbd4SYanteng Sikernel/rcu/tree_exp.h
354*94c1fbd4SYanteng Si
355*94c1fbd4SYanteng Sikernel/rcu/update.c
356*94c1fbd4SYanteng Si
357*94c1fbd4SYanteng Siinclude/linux/srcu.h
358*94c1fbd4SYanteng Si
359*94c1fbd4SYanteng Sikernel/rcu/srcutree.c
360*94c1fbd4SYanteng Si
361*94c1fbd4SYanteng Siinclude/linux/rculist_bl.h
362*94c1fbd4SYanteng Si
363*94c1fbd4SYanteng Siinclude/linux/rculist.h
364*94c1fbd4SYanteng Si
365*94c1fbd4SYanteng Siinclude/linux/rculist_nulls.h
366*94c1fbd4SYanteng Si
367*94c1fbd4SYanteng Siinclude/linux/rcu_sync.h
368*94c1fbd4SYanteng Si
369*94c1fbd4SYanteng Sikernel/rcu/sync.c
370