.. include:: ../disclaimer-zh_CN.rst :Original: Documentation/core-api/kernel-api.rst :翻译: å¸å»¶è…¾ Yanteng Si <siyanteng@loongson.cn> 周彬彬 Binbin Zhou <zhoubinbin@loongson.cn> .. _cn_kernel-api.rst: ============ Linuxå†…æ ¸API ============ 列表管ç†å‡½æ•° ============ 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/list.h 基本的C库函数 ============= 在编写驱动程åºæ—¶ï¼Œä¸€èˆ¬ä¸èƒ½ä½¿ç”¨C库ä¸çš„例程。部分函数通常很有用,它们在 下é¢è¢«åˆ—出。这些函数的行为å¯èƒ½ä¼šä¸ŽANSI定义的略有ä¸åŒï¼Œè¿™äº›åå·®ä¼šåœ¨æ–‡ä¸ æ³¨æ˜Žã€‚ å—ç¬¦ä¸²è½¬æ¢ ---------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/vsprintf.c include/linux/kernel.h include/linux/kernel.h lib/kstrtox.c lib/string_helpers.c å—ç¬¦ä¸²å¤„ç† ---------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/fortify-string.h lib/string.c include/linux/string.h mm/util.c åŸºæœ¬çš„å†…æ ¸åº“å‡½æ•° ================ Linuxå†…æ ¸æ供了很多实用的基本函数。 ä½è¿ç®— ------ 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/asm-generic/bitops/instrumented-atomic.h include/asm-generic/bitops/instrumented-non-atomic.h include/asm-generic/bitops/instrumented-lock.h ä½å›¾è¿ç®— -------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/bitmap.c include/linux/bitmap.h include/linux/bitmap.h include/linux/bitmap.h lib/bitmap.c lib/bitmap.c include/linux/bitmap.h å‘½ä»¤è¡Œè§£æž ---------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/cmdline.c æŽ’åº ---- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/sort.c lib/list_sort.c 文本检索 -------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/textsearch.c lib/textsearch.c include/linux/textsearch.h Linuxä¸çš„CRC和数å¦å‡½æ•° ====================== 算术溢出检查 ------------ 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/overflow.h CRC函数 ------- *译注:CRC,Cyclic Redundancy Checkï¼Œå¾ªçŽ¯å†—ä½™æ ¡éªŒ* 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/crc4.c lib/crc7.c lib/crc8.c lib/crc16.c lib/crc32.c lib/crc-ccitt.c lib/crc-itu-t.c 基数为2的对数和幂函数 --------------------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/log2.h 整数幂函数 ---------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/math/int_pow.c lib/math/int_sqrt.c 除法函数 -------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/asm-generic/div64.h include/linux/math64.h lib/math/gcd.c UUID/GUID --------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: lib/uuid.c å†…æ ¸IPC设备 =========== IPCå®žç”¨ç¨‹åº ----------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: ipc/util.c FIFO 缓冲区 =========== kfifoæŽ¥å£ --------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/kfifo.h 转å‘接å£æ”¯æŒ ============ 转å‘接å£æ”¯æŒæ—¨åœ¨ä¸ºå·¥å…·å’Œè®¾å¤‡æ供一ç§æœ‰æ•ˆçš„机制,将大é‡æ•°æ®ä»Žå†…æ ¸ç©ºé—´ 转å‘到用户空间。 转å‘æŽ¥å£ -------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: kernel/relay.c kernel/relay.c 模å—æ”¯æŒ ======== 模å—åŠ è½½ -------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: kernel/module/kmod.c 模å—接å£æ”¯æŒ ------------ 更多信æ¯è¯·å‚阅kernel/module/目录下的文件。 ç¡¬ä»¶æŽ¥å£ ======== 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: kernel/dma.c 资æºç®¡ç† -------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: kernel/resource.c kernel/resource.c MTRRå¤„ç† -------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: arch/x86/kernel/cpu/mtrr/mtrr.c 安全框架 ======== 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: security/security.c security/inode.c å®¡è®¡æŽ¥å£ ======== 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: kernel/audit.c kernel/auditsc.c kernel/auditfilter.c æ ¸ç®—æ¡†æž¶ ======== 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: kernel/acct.c å—设备 ====== 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/bio.h block/blk-core.c block/blk-core.c block/blk-map.c block/blk-sysfs.c block/blk-settings.c block/blk-flush.c block/blk-lib.c block/blk-integrity.c kernel/trace/blktrace.c block/genhd.c block/genhd.c å—符设备 ======== 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: fs/char_dev.c 时钟框架 ======== 时钟框架定义了编程接å£ï¼Œä»¥æ”¯æŒç³»ç»Ÿæ—¶é’Ÿæ ‘的软件管ç†ã€‚该框架广泛用于系统级芯片(SOC)平 å°ï¼Œä»¥æ”¯æŒç”µæºç®¡ç†å’Œå„ç§å¯èƒ½éœ€è¦è‡ªå®šä¹‰æ—¶é’Ÿé€ŸçŽ‡çš„设备。请注æ„,这些 “时钟â€ä¸Žè®¡æ—¶æˆ–实 时时钟(RTC)æ— å…³ï¼Œå®ƒä»¬éƒ½æœ‰å•ç‹¬çš„框架。这些:c:type: `struct clk <clk>` 实例å¯ç”¨äºŽç®¡ç† å„ç§æ—¶é’Ÿä¿¡å·ï¼Œä¾‹å¦‚一个96ç†ä¾‹å¦‚96MHz的时钟信å·ï¼Œè¯¥ä¿¡å·å¯è¢«ç”¨äºŽæ€»çº¿æˆ–外设的数æ®äº¤æ¢ï¼Œæˆ–以 其他方å¼è§¦å‘系统硬件ä¸çš„åŒæ¥çŠ¶æ€æœºè½¬æ¢ã€‚ 通过明确的软件时钟门控æ¥æ”¯æŒç”µæºç®¡ç†ï¼šæœªä½¿ç”¨çš„时钟被ç¦ç”¨ï¼Œå› æ¤ç³»ç»Ÿä¸ä¼šå› 为改å˜ä¸åœ¨ä½¿ç”¨ ä¸çš„晶体管的状æ€è€Œæµªè´¹ç”µæºã€‚在æŸäº›ç³»ç»Ÿä¸ï¼Œè¿™å¯èƒ½æ˜¯ç”±ç¡¬ä»¶æ—¶é’Ÿé—¨æŽ§æ”¯æŒçš„,其ä¸æ—¶é’Ÿè¢«é—¨æŽ§ 而ä¸åœ¨è½¯ä»¶ä¸è¢«ç¦ç”¨ã€‚芯片的部分,在供电但没有时钟的情况下,å¯èƒ½ä¼šä¿ç•™å…¶æœ€åŽçš„状æ€ã€‚è¿™ç§ ä½ŽåŠŸè€—çŠ¶æ€é€šå¸¸è¢«ç§°ä¸º*ä¿ç•™æ¨¡å¼*。这ç§æ¨¡å¼ä»ç„¶ä¼šäº§ç”Ÿæ¼ç”µæµï¼Œç‰¹åˆ«æ˜¯åœ¨ç”µè·¯å‡ 何结构较细的情 况下,但对于CMOS电路æ¥è¯´ï¼Œç”µèƒ½ä¸»è¦æ˜¯éšç€æ—¶é’Ÿç¿»è½¬è€Œè¢«æ¶ˆè€—的。 电æºæ„ŸçŸ¥é©±åŠ¨ç¨‹åºåªæœ‰åœ¨å…¶ç®¡ç†çš„设备处于活动使用状æ€æ—¶æ‰ä¼šå¯ç”¨æ—¶é’Ÿã€‚æ¤å¤–,系统ç¡çœ 状æ€é€š å¸¸æ ¹æ®å“ªäº›æ—¶é’ŸåŸŸå¤„于活动状æ€è€Œæœ‰æ‰€ä¸åŒï¼šâ€œå¾…机â€çŠ¶æ€å¯èƒ½å…许从多个活动域ä¸å”¤é†’,而 "mem"(暂åœåˆ°RAM)状æ€å¯èƒ½éœ€è¦æ›´å…¨é¢åœ°å…³é—æ¥è‡ªé«˜é€ŸPLL和振è¡å™¨çš„时钟,从而é™åˆ¶äº†å¯èƒ½ 的唤醒事件æºçš„æ•°é‡ã€‚驱动器的暂åœæ–¹æ³•å¯èƒ½éœ€è¦æ³¨æ„ç›®æ ‡ç¡çœ 状æ€çš„系统特定时钟约æŸã€‚ 一些平å°æ”¯æŒå¯ç¼–程时钟å‘生器。这些å¯ä»¥è¢«å„ç§å¤–部芯片使用,如其他CPUã€å¤šåª’体编解ç 器以 åŠå¯¹æŽ¥å£æ—¶é’Ÿæœ‰ä¸¥æ ¼è¦æ±‚的设备。 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/clk.h åŒæ¥åŽŸè¯ ======== 读-å¤åˆ¶-更新(RCU) ------------------- 该APIåœ¨ä»¥ä¸‹å†…æ ¸ä»£ç ä¸: include/linux/rcupdate.h kernel/rcu/tree.c kernel/rcu/tree_exp.h kernel/rcu/update.c include/linux/srcu.h kernel/rcu/srcutree.c include/linux/rculist_bl.h include/linux/rculist.h include/linux/rculist_nulls.h include/linux/rcu_sync.h kernel/rcu/sync.c