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