379 lines · plain
1.. include:: ../disclaimer-zh_CN.rst2 3:Original: Documentation/core-api/kernel-api.rst4 5:翻译:6 7 司延腾 Yanteng Si <siyanteng@loongson.cn>8 周彬彬 Binbin Zhou <zhoubinbin@loongson.cn>9 10.. _cn_kernel-api.rst:11 12============13Linux内核API14============15 16 17列表管理函数18============19 20该API在以下内核代码中:21 22include/linux/list.h23 24基本的C库函数25=============26 27在编写驱动程序时,一般不能使用C库中的例程。部分函数通常很有用,它们在28下面被列出。这些函数的行为可能会与ANSI定义的略有不同,这些偏差会在文中29注明。30 31字符串转换32----------33 34该API在以下内核代码中:35 36lib/vsprintf.c37 38include/linux/kernel.h39 40include/linux/kernel.h41 42lib/kstrtox.c43 44lib/string_helpers.c45 46字符串处理47----------48 49该API在以下内核代码中:50 51include/linux/fortify-string.h52 53lib/string.c54 55include/linux/string.h56 57mm/util.c58 59基本的内核库函数60================61 62Linux内核提供了很多实用的基本函数。63 64位运算65------66 67该API在以下内核代码中:68 69include/asm-generic/bitops/instrumented-atomic.h70 71include/asm-generic/bitops/instrumented-non-atomic.h72 73include/asm-generic/bitops/instrumented-lock.h74 75位图运算76--------77 78该API在以下内核代码中:79 80lib/bitmap.c81 82include/linux/bitmap.h83 84include/linux/bitmap.h85 86include/linux/bitmap.h87 88lib/bitmap.c89 90lib/bitmap.c91 92include/linux/bitmap.h93 94命令行解析95----------96 97该API在以下内核代码中:98 99lib/cmdline.c100 101排序102----103 104该API在以下内核代码中:105 106lib/sort.c107 108lib/list_sort.c109 110文本检索111--------112 113该API在以下内核代码中:114 115lib/textsearch.c116 117lib/textsearch.c118 119include/linux/textsearch.h120 121Linux中的CRC和数学函数122======================123 124算术溢出检查125------------126 127该API在以下内核代码中:128 129include/linux/overflow.h130 131CRC函数132-------133 134*译注:CRC,Cyclic Redundancy Check,循环冗余校验*135 136该API在以下内核代码中:137 138lib/crc4.c139 140lib/crc7.c141 142lib/crc8.c143 144lib/crc16.c145 146lib/crc32.c147 148lib/crc-ccitt.c149 150lib/crc-itu-t.c151 152基数为2的对数和幂函数153---------------------154 155该API在以下内核代码中:156 157include/linux/log2.h158 159整数幂函数160----------161 162该API在以下内核代码中:163 164lib/math/int_pow.c165 166lib/math/int_sqrt.c167 168除法函数169--------170 171该API在以下内核代码中:172 173include/asm-generic/div64.h174 175include/linux/math64.h176 177lib/math/gcd.c178 179UUID/GUID180---------181 182该API在以下内核代码中:183 184lib/uuid.c185 186内核IPC设备187===========188 189IPC实用程序190-----------191 192该API在以下内核代码中:193 194ipc/util.c195 196FIFO 缓冲区197===========198 199kfifo接口200---------201 202该API在以下内核代码中:203 204include/linux/kfifo.h205 206转发接口支持207============208 209转发接口支持旨在为工具和设备提供一种有效的机制,将大量数据从内核空间210转发到用户空间。211 212转发接口213--------214 215该API在以下内核代码中:216 217kernel/relay.c218 219kernel/relay.c220 221模块支持222========223 224模块加载225--------226 227该API在以下内核代码中:228 229kernel/module/kmod.c230 231模块接口支持232------------233 234更多信息请参阅kernel/module/目录下的文件。235 236硬件接口237========238 239 240该API在以下内核代码中:241 242kernel/dma.c243 244资源管理245--------246 247该API在以下内核代码中:248 249kernel/resource.c250 251kernel/resource.c252 253MTRR处理254--------255 256该API在以下内核代码中:257 258arch/x86/kernel/cpu/mtrr/mtrr.c259 260安全框架261========262 263该API在以下内核代码中:264 265security/security.c266 267security/inode.c268 269审计接口270========271 272该API在以下内核代码中:273 274kernel/audit.c275 276kernel/auditsc.c277 278kernel/auditfilter.c279 280核算框架281========282 283该API在以下内核代码中:284 285kernel/acct.c286 287块设备288======289 290该API在以下内核代码中:291 292include/linux/bio.h293 294block/blk-core.c295 296block/blk-core.c297 298block/blk-map.c299 300block/blk-sysfs.c301 302block/blk-settings.c303 304block/blk-flush.c305 306block/blk-lib.c307 308block/blk-integrity.c309 310kernel/trace/blktrace.c311 312block/genhd.c313 314block/genhd.c315 316字符设备317========318 319该API在以下内核代码中:320 321fs/char_dev.c322 323时钟框架324========325 326时钟框架定义了编程接口,以支持系统时钟树的软件管理。该框架广泛用于系统级芯片(SOC)平327台,以支持电源管理和各种可能需要自定义时钟速率的设备。请注意,这些 “时钟”与计时或实328时时钟(RTC)无关,它们都有单独的框架。这些:c:type: `struct clk <clk>` 实例可用于管理329各种时钟信号,例如一个96理例如96MHz的时钟信号,该信号可被用于总线或外设的数据交换,或以330其他方式触发系统硬件中的同步状态机转换。331 332通过明确的软件时钟门控来支持电源管理:未使用的时钟被禁用,因此系统不会因为改变不在使用333中的晶体管的状态而浪费电源。在某些系统中,这可能是由硬件时钟门控支持的,其中时钟被门控334而不在软件中被禁用。芯片的部分,在供电但没有时钟的情况下,可能会保留其最后的状态。这种335低功耗状态通常被称为*保留模式*。这种模式仍然会产生漏电流,特别是在电路几何结构较细的情336况下,但对于CMOS电路来说,电能主要是随着时钟翻转而被消耗的。337 338电源感知驱动程序只有在其管理的设备处于活动使用状态时才会启用时钟。此外,系统睡眠状态通339常根据哪些时钟域处于活动状态而有所不同:“待机”状态可能允许从多个活动域中唤醒,而340"mem"(暂停到RAM)状态可能需要更全面地关闭来自高速PLL和振荡器的时钟,从而限制了可能341的唤醒事件源的数量。驱动器的暂停方法可能需要注意目标睡眠状态的系统特定时钟约束。342 343一些平台支持可编程时钟发生器。这些可以被各种外部芯片使用,如其他CPU、多媒体编解码器以344及对接口时钟有严格要求的设备。345 346该API在以下内核代码中:347 348include/linux/clk.h349 350同步原语351========352 353读-复制-更新(RCU)354-------------------355 356该API在以下内核代码中:357 358include/linux/rcupdate.h359 360kernel/rcu/tree.c361 362kernel/rcu/tree_exp.h363 364kernel/rcu/update.c365 366include/linux/srcu.h367 368kernel/rcu/srcutree.c369 370include/linux/rculist_bl.h371 372include/linux/rculist.h373 374include/linux/rculist_nulls.h375 376include/linux/rcu_sync.h377 378kernel/rcu/sync.c379