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.c。 226*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