194c1fbd4SYanteng Si.. include:: ../disclaimer-zh_CN.rst
294c1fbd4SYanteng Si
394c1fbd4SYanteng Si:Original: Documentation/core-api/kernel-api.rst
48137a49eSYanteng Si
58137a49eSYanteng Si:翻译:
68137a49eSYanteng Si
78137a49eSYanteng Si 司延腾 Yanteng Si <siyanteng@loongson.cn>
8b2fdf7f0SBinbin Zhou 周彬彬 Binbin Zhou <zhoubinbin@loongson.cn>
994c1fbd4SYanteng Si
1094c1fbd4SYanteng Si.. _cn_kernel-api.rst:
1194c1fbd4SYanteng Si
1294c1fbd4SYanteng Si============
1394c1fbd4SYanteng SiLinux内核API
1494c1fbd4SYanteng Si============
1594c1fbd4SYanteng Si
1694c1fbd4SYanteng Si
1794c1fbd4SYanteng Si列表管理函数
1894c1fbd4SYanteng Si============
1994c1fbd4SYanteng Si
2094c1fbd4SYanteng Si该API在以下内核代码中:
2194c1fbd4SYanteng Si
2294c1fbd4SYanteng Siinclude/linux/list.h
2394c1fbd4SYanteng Si
2494c1fbd4SYanteng Si基本的C库函数
2594c1fbd4SYanteng Si=============
2694c1fbd4SYanteng Si
2794c1fbd4SYanteng Si在编写驱动程序时,一般不能使用C库中的例程。部分函数通常很有用,它们在
2894c1fbd4SYanteng Si下面被列出。这些函数的行为可能会与ANSI定义的略有不同,这些偏差会在文中
2994c1fbd4SYanteng Si注明。
3094c1fbd4SYanteng Si
3194c1fbd4SYanteng Si字符串转换
3294c1fbd4SYanteng Si----------
3394c1fbd4SYanteng Si
3494c1fbd4SYanteng Si该API在以下内核代码中:
3594c1fbd4SYanteng Si
3694c1fbd4SYanteng Silib/vsprintf.c
3794c1fbd4SYanteng Si
3894c1fbd4SYanteng Siinclude/linux/kernel.h
3994c1fbd4SYanteng Si
4094c1fbd4SYanteng Siinclude/linux/kernel.h
4194c1fbd4SYanteng Si
4294c1fbd4SYanteng Silib/kstrtox.c
4394c1fbd4SYanteng Si
4494c1fbd4SYanteng Silib/string_helpers.c
4594c1fbd4SYanteng Si
4694c1fbd4SYanteng Si字符串处理
4794c1fbd4SYanteng Si----------
4894c1fbd4SYanteng Si
4994c1fbd4SYanteng Si该API在以下内核代码中:
5094c1fbd4SYanteng Si
51cf306a26SYanteng Siinclude/linux/fortify-string.h
52cf306a26SYanteng Si
5394c1fbd4SYanteng Silib/string.c
5494c1fbd4SYanteng Si
5594c1fbd4SYanteng Siinclude/linux/string.h
5694c1fbd4SYanteng Si
5794c1fbd4SYanteng Simm/util.c
5894c1fbd4SYanteng Si
5994c1fbd4SYanteng Si基本的内核库函数
6094c1fbd4SYanteng Si================
6194c1fbd4SYanteng Si
6294c1fbd4SYanteng SiLinux内核提供了很多实用的基本函数。
6394c1fbd4SYanteng Si
6494c1fbd4SYanteng Si位运算
6594c1fbd4SYanteng Si------
6694c1fbd4SYanteng Si
6794c1fbd4SYanteng Si该API在以下内核代码中:
6894c1fbd4SYanteng Si
6994c1fbd4SYanteng Siinclude/asm-generic/bitops/instrumented-atomic.h
7094c1fbd4SYanteng Si
7194c1fbd4SYanteng Siinclude/asm-generic/bitops/instrumented-non-atomic.h
7294c1fbd4SYanteng Si
7394c1fbd4SYanteng Siinclude/asm-generic/bitops/instrumented-lock.h
7494c1fbd4SYanteng Si
7594c1fbd4SYanteng Si位图运算
7694c1fbd4SYanteng Si--------
7794c1fbd4SYanteng Si
7894c1fbd4SYanteng Si该API在以下内核代码中:
7994c1fbd4SYanteng Si
8094c1fbd4SYanteng Silib/bitmap.c
8194c1fbd4SYanteng Si
8294c1fbd4SYanteng Siinclude/linux/bitmap.h
8394c1fbd4SYanteng Si
8494c1fbd4SYanteng Siinclude/linux/bitmap.h
8594c1fbd4SYanteng Si
8694c1fbd4SYanteng Siinclude/linux/bitmap.h
8794c1fbd4SYanteng Si
8894c1fbd4SYanteng Silib/bitmap.c
8994c1fbd4SYanteng Si
9094c1fbd4SYanteng Silib/bitmap.c
9194c1fbd4SYanteng Si
9294c1fbd4SYanteng Siinclude/linux/bitmap.h
9394c1fbd4SYanteng Si
9494c1fbd4SYanteng Si命令行解析
9594c1fbd4SYanteng Si----------
9694c1fbd4SYanteng Si
9794c1fbd4SYanteng Si该API在以下内核代码中:
9894c1fbd4SYanteng Si
9994c1fbd4SYanteng Silib/cmdline.c
10094c1fbd4SYanteng Si
10194c1fbd4SYanteng Si排序
10294c1fbd4SYanteng Si----
10394c1fbd4SYanteng Si
10494c1fbd4SYanteng Si该API在以下内核代码中:
10594c1fbd4SYanteng Si
10694c1fbd4SYanteng Silib/sort.c
10794c1fbd4SYanteng Si
10894c1fbd4SYanteng Silib/list_sort.c
10994c1fbd4SYanteng Si
11094c1fbd4SYanteng Si文本检索
11194c1fbd4SYanteng Si--------
11294c1fbd4SYanteng Si
11394c1fbd4SYanteng Si该API在以下内核代码中:
11494c1fbd4SYanteng Si
11594c1fbd4SYanteng Silib/textsearch.c
11694c1fbd4SYanteng Si
11794c1fbd4SYanteng Silib/textsearch.c
11894c1fbd4SYanteng Si
11994c1fbd4SYanteng Siinclude/linux/textsearch.h
12094c1fbd4SYanteng Si
12194c1fbd4SYanteng SiLinux中的CRC和数学函数
12294c1fbd4SYanteng Si======================
12394c1fbd4SYanteng Si
124cf306a26SYanteng Si算术溢出检查
125cf306a26SYanteng Si------------
126cf306a26SYanteng Si
127cf306a26SYanteng Si该API在以下内核代码中:
128cf306a26SYanteng Si
129cf306a26SYanteng Siinclude/linux/overflow.h
13094c1fbd4SYanteng Si
13194c1fbd4SYanteng SiCRC函数
13294c1fbd4SYanteng Si-------
13394c1fbd4SYanteng Si
13494c1fbd4SYanteng Si*译注:CRC,Cyclic Redundancy Check,循环冗余校验*
13594c1fbd4SYanteng Si
13694c1fbd4SYanteng Si该API在以下内核代码中:
13794c1fbd4SYanteng Si
13894c1fbd4SYanteng Silib/crc4.c
13994c1fbd4SYanteng Si
14094c1fbd4SYanteng Silib/crc7.c
14194c1fbd4SYanteng Si
14294c1fbd4SYanteng Silib/crc8.c
14394c1fbd4SYanteng Si
14494c1fbd4SYanteng Silib/crc16.c
14594c1fbd4SYanteng Si
14694c1fbd4SYanteng Silib/crc32.c
14794c1fbd4SYanteng Si
14894c1fbd4SYanteng Silib/crc-ccitt.c
14994c1fbd4SYanteng Si
15094c1fbd4SYanteng Silib/crc-itu-t.c
15194c1fbd4SYanteng Si
15294c1fbd4SYanteng Si基数为2的对数和幂函数
15394c1fbd4SYanteng Si---------------------
15494c1fbd4SYanteng Si
15594c1fbd4SYanteng Si该API在以下内核代码中:
15694c1fbd4SYanteng Si
15794c1fbd4SYanteng Siinclude/linux/log2.h
15894c1fbd4SYanteng Si
15994c1fbd4SYanteng Si整数幂函数
16094c1fbd4SYanteng Si----------
16194c1fbd4SYanteng Si
16294c1fbd4SYanteng Si该API在以下内核代码中:
16394c1fbd4SYanteng Si
16494c1fbd4SYanteng Silib/math/int_pow.c
16594c1fbd4SYanteng Si
16694c1fbd4SYanteng Silib/math/int_sqrt.c
16794c1fbd4SYanteng Si
16894c1fbd4SYanteng Si除法函数
16994c1fbd4SYanteng Si--------
17094c1fbd4SYanteng Si
17194c1fbd4SYanteng Si该API在以下内核代码中:
17294c1fbd4SYanteng Si
17394c1fbd4SYanteng Siinclude/asm-generic/div64.h
17494c1fbd4SYanteng Si
17594c1fbd4SYanteng Siinclude/linux/math64.h
17694c1fbd4SYanteng Si
17794c1fbd4SYanteng Silib/math/gcd.c
17894c1fbd4SYanteng Si
17994c1fbd4SYanteng SiUUID/GUID
18094c1fbd4SYanteng Si---------
18194c1fbd4SYanteng Si
18294c1fbd4SYanteng Si该API在以下内核代码中:
18394c1fbd4SYanteng Si
18494c1fbd4SYanteng Silib/uuid.c
18594c1fbd4SYanteng Si
18694c1fbd4SYanteng Si内核IPC设备
18794c1fbd4SYanteng Si===========
18894c1fbd4SYanteng Si
18994c1fbd4SYanteng SiIPC实用程序
19094c1fbd4SYanteng Si-----------
19194c1fbd4SYanteng Si
19294c1fbd4SYanteng Si该API在以下内核代码中:
19394c1fbd4SYanteng Si
19494c1fbd4SYanteng Siipc/util.c
19594c1fbd4SYanteng Si
19694c1fbd4SYanteng SiFIFO 缓冲区
19794c1fbd4SYanteng Si===========
19894c1fbd4SYanteng Si
19994c1fbd4SYanteng Sikfifo接口
20094c1fbd4SYanteng Si---------
20194c1fbd4SYanteng Si
20294c1fbd4SYanteng Si该API在以下内核代码中:
20394c1fbd4SYanteng Si
20494c1fbd4SYanteng Siinclude/linux/kfifo.h
20594c1fbd4SYanteng Si
20694c1fbd4SYanteng Si转发接口支持
20794c1fbd4SYanteng Si============
20894c1fbd4SYanteng Si
20994c1fbd4SYanteng Si转发接口支持旨在为工具和设备提供一种有效的机制,将大量数据从内核空间
21094c1fbd4SYanteng Si转发到用户空间。
21194c1fbd4SYanteng Si
21294c1fbd4SYanteng Si转发接口
21394c1fbd4SYanteng Si--------
21494c1fbd4SYanteng Si
21594c1fbd4SYanteng Si该API在以下内核代码中:
21694c1fbd4SYanteng Si
21794c1fbd4SYanteng Sikernel/relay.c
21894c1fbd4SYanteng Si
21994c1fbd4SYanteng Sikernel/relay.c
22094c1fbd4SYanteng Si
22194c1fbd4SYanteng Si模块支持
22294c1fbd4SYanteng Si========
22394c1fbd4SYanteng Si
22494c1fbd4SYanteng Si模块加载
22594c1fbd4SYanteng Si--------
22694c1fbd4SYanteng Si
22794c1fbd4SYanteng Si该API在以下内核代码中:
22894c1fbd4SYanteng Si
229*3edf091dSBagas Sanjayakernel/module/kmod.c
23094c1fbd4SYanteng Si
23194c1fbd4SYanteng Si模块接口支持
23294c1fbd4SYanteng Si------------
23394c1fbd4SYanteng Si
2342cc39179SMasahiro Yamada更多信息请参阅kernel/module/目录下的文件。
23594c1fbd4SYanteng Si
23694c1fbd4SYanteng Si硬件接口
23794c1fbd4SYanteng Si========
23894c1fbd4SYanteng Si
23994c1fbd4SYanteng Si
24094c1fbd4SYanteng Si该API在以下内核代码中:
24194c1fbd4SYanteng Si
24294c1fbd4SYanteng Sikernel/dma.c
24394c1fbd4SYanteng Si
24494c1fbd4SYanteng Si资源管理
24594c1fbd4SYanteng Si--------
24694c1fbd4SYanteng Si
24794c1fbd4SYanteng Si该API在以下内核代码中:
24894c1fbd4SYanteng Si
24994c1fbd4SYanteng Sikernel/resource.c
25094c1fbd4SYanteng Si
25194c1fbd4SYanteng Sikernel/resource.c
25294c1fbd4SYanteng Si
25394c1fbd4SYanteng SiMTRR处理
25494c1fbd4SYanteng Si--------
25594c1fbd4SYanteng Si
25694c1fbd4SYanteng Si该API在以下内核代码中:
25794c1fbd4SYanteng Si
25894c1fbd4SYanteng Siarch/x86/kernel/cpu/mtrr/mtrr.c
25994c1fbd4SYanteng Si
26094c1fbd4SYanteng Si安全框架
26194c1fbd4SYanteng Si========
26294c1fbd4SYanteng Si
26394c1fbd4SYanteng Si该API在以下内核代码中:
26494c1fbd4SYanteng Si
26594c1fbd4SYanteng Sisecurity/security.c
26694c1fbd4SYanteng Si
26794c1fbd4SYanteng Sisecurity/inode.c
26894c1fbd4SYanteng Si
26994c1fbd4SYanteng Si审计接口
27094c1fbd4SYanteng Si========
27194c1fbd4SYanteng Si
27294c1fbd4SYanteng Si该API在以下内核代码中:
27394c1fbd4SYanteng Si
27494c1fbd4SYanteng Sikernel/audit.c
27594c1fbd4SYanteng Si
27694c1fbd4SYanteng Sikernel/auditsc.c
27794c1fbd4SYanteng Si
27894c1fbd4SYanteng Sikernel/auditfilter.c
27994c1fbd4SYanteng Si
28094c1fbd4SYanteng Si核算框架
28194c1fbd4SYanteng Si========
28294c1fbd4SYanteng Si
28394c1fbd4SYanteng Si该API在以下内核代码中:
28494c1fbd4SYanteng Si
28594c1fbd4SYanteng Sikernel/acct.c
28694c1fbd4SYanteng Si
28794c1fbd4SYanteng Si块设备
28894c1fbd4SYanteng Si======
28994c1fbd4SYanteng Si
29094c1fbd4SYanteng Si该API在以下内核代码中:
29194c1fbd4SYanteng Si
292b2fdf7f0SBinbin Zhouinclude/linux/bio.h
293b2fdf7f0SBinbin Zhou
29494c1fbd4SYanteng Siblock/blk-core.c
29594c1fbd4SYanteng Si
29694c1fbd4SYanteng Siblock/blk-core.c
29794c1fbd4SYanteng Si
29894c1fbd4SYanteng Siblock/blk-map.c
29994c1fbd4SYanteng Si
30094c1fbd4SYanteng Siblock/blk-sysfs.c
30194c1fbd4SYanteng Si
30294c1fbd4SYanteng Siblock/blk-settings.c
30394c1fbd4SYanteng Si
30494c1fbd4SYanteng Siblock/blk-flush.c
30594c1fbd4SYanteng Si
30694c1fbd4SYanteng Siblock/blk-lib.c
30794c1fbd4SYanteng Si
30894c1fbd4SYanteng Siblock/blk-integrity.c
30994c1fbd4SYanteng Si
31094c1fbd4SYanteng Sikernel/trace/blktrace.c
31194c1fbd4SYanteng Si
31294c1fbd4SYanteng Siblock/genhd.c
31394c1fbd4SYanteng Si
31494c1fbd4SYanteng Siblock/genhd.c
31594c1fbd4SYanteng Si
31694c1fbd4SYanteng Si字符设备
31794c1fbd4SYanteng Si========
31894c1fbd4SYanteng Si
31994c1fbd4SYanteng Si该API在以下内核代码中:
32094c1fbd4SYanteng Si
32194c1fbd4SYanteng Sifs/char_dev.c
32294c1fbd4SYanteng Si
32394c1fbd4SYanteng Si时钟框架
32494c1fbd4SYanteng Si========
32594c1fbd4SYanteng Si
32694c1fbd4SYanteng Si时钟框架定义了编程接口,以支持系统时钟树的软件管理。该框架广泛用于系统级芯片(SOC)平
32794c1fbd4SYanteng Si台,以支持电源管理和各种可能需要自定义时钟速率的设备。请注意,这些 “时钟”与计时或实
32894c1fbd4SYanteng Si时时钟(RTC)无关,它们都有单独的框架。这些:c:type: `struct clk <clk>` 实例可用于管理
32994c1fbd4SYanteng Si各种时钟信号,例如一个96理例如96MHz的时钟信号,该信号可被用于总线或外设的数据交换,或以
33094c1fbd4SYanteng Si其他方式触发系统硬件中的同步状态机转换。
33194c1fbd4SYanteng Si
33294c1fbd4SYanteng Si通过明确的软件时钟门控来支持电源管理:未使用的时钟被禁用,因此系统不会因为改变不在使用
33394c1fbd4SYanteng Si中的晶体管的状态而浪费电源。在某些系统中,这可能是由硬件时钟门控支持的,其中时钟被门控
33494c1fbd4SYanteng Si而不在软件中被禁用。芯片的部分,在供电但没有时钟的情况下,可能会保留其最后的状态。这种
33594c1fbd4SYanteng Si低功耗状态通常被称为*保留模式*。这种模式仍然会产生漏电流,特别是在电路几何结构较细的情
33694c1fbd4SYanteng Si况下,但对于CMOS电路来说,电能主要是随着时钟翻转而被消耗的。
33794c1fbd4SYanteng Si
33894c1fbd4SYanteng Si电源感知驱动程序只有在其管理的设备处于活动使用状态时才会启用时钟。此外,系统睡眠状态通
33994c1fbd4SYanteng Si常根据哪些时钟域处于活动状态而有所不同:“待机”状态可能允许从多个活动域中唤醒,而
34094c1fbd4SYanteng Si"mem"(暂停到RAM)状态可能需要更全面地关闭来自高速PLL和振荡器的时钟,从而限制了可能
34194c1fbd4SYanteng Si的唤醒事件源的数量。驱动器的暂停方法可能需要注意目标睡眠状态的系统特定时钟约束。
34294c1fbd4SYanteng Si
34394c1fbd4SYanteng Si一些平台支持可编程时钟发生器。这些可以被各种外部芯片使用,如其他CPU、多媒体编解码器以
34494c1fbd4SYanteng Si及对接口时钟有严格要求的设备。
34594c1fbd4SYanteng Si
34694c1fbd4SYanteng Si该API在以下内核代码中:
34794c1fbd4SYanteng Si
34894c1fbd4SYanteng Siinclude/linux/clk.h
34994c1fbd4SYanteng Si
35094c1fbd4SYanteng Si同步原语
35194c1fbd4SYanteng Si========
35294c1fbd4SYanteng Si
35394c1fbd4SYanteng Si读-复制-更新(RCU)
35494c1fbd4SYanteng Si-------------------
35594c1fbd4SYanteng Si
35694c1fbd4SYanteng Si该API在以下内核代码中:
35794c1fbd4SYanteng Si
35894c1fbd4SYanteng Siinclude/linux/rcupdate.h
35994c1fbd4SYanteng Si
36094c1fbd4SYanteng Sikernel/rcu/tree.c
36194c1fbd4SYanteng Si
36294c1fbd4SYanteng Sikernel/rcu/tree_exp.h
36394c1fbd4SYanteng Si
36494c1fbd4SYanteng Sikernel/rcu/update.c
36594c1fbd4SYanteng Si
36694c1fbd4SYanteng Siinclude/linux/srcu.h
36794c1fbd4SYanteng Si
36894c1fbd4SYanteng Sikernel/rcu/srcutree.c
36994c1fbd4SYanteng Si
37094c1fbd4SYanteng Siinclude/linux/rculist_bl.h
37194c1fbd4SYanteng Si
37294c1fbd4SYanteng Siinclude/linux/rculist.h
37394c1fbd4SYanteng Si
37494c1fbd4SYanteng Siinclude/linux/rculist_nulls.h
37594c1fbd4SYanteng Si
37694c1fbd4SYanteng Siinclude/linux/rcu_sync.h
37794c1fbd4SYanteng Si
37894c1fbd4SYanteng Sikernel/rcu/sync.c
379