sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/core-api/printk-formatsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/core-api/printk-formatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/core-api/printk-formatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/core-api/printk-formatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/core-api/printk-formatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/pt_BR/core-api/printk-formatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/core-api/printk-formatsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhX/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/core-api/printk-formats.rsthKubh field_body)}(h*Documentation/core-api/printk-formats.rst h]h)}(h)Documentation/core-api/printk-formats.rsth]h)Documentation/core-api/printk-formats.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h\司延腾 Yanteng Si 周彬彬 Binbin Zhou h]h)}(h[司延腾 Yanteng Si 周彬彬 Binbin Zhou h](h司延腾 Yanteng Si <}(hj"hhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j*hj"ubh> 周彬彬 Binbin Zhou <}(hj"hhhNhNubj+)}(hzhoubinbin@loongson.cnh]hzhoubinbin@loongson.cn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:zhoubinbin@loongson.cnuh1j*hj"ubh>}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_printk-formats.rst:h]h}(h]h ]h"]h$]h&]refidcn-printk-formats-rstuh1jlhKhhhhhhubhsection)}(hhh](htitle)}(h*如何获得正确的printk格式占位符h]h*如何获得正确的printk格式占位符}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|hhhhhKubh)}(hhh](h)}(hhh](h)}(h作者h]h作者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubh)}(h$Randy Dunlap h]h)}(hjh](hRandy Dunlap <}(hjhhhNhNubj+)}(hrdunlap@infradead.orgh]hrdunlap@infradead.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:rdunlap@infradead.orguh1j*hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hhh](h)}(h作者h]h作者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubh)}(h(Andrew Murray h]h)}(h&Andrew Murray h](hAndrew Murray <}(hjhhhNhNubj+)}(hamurray@mpc-data.co.ukh]hamurray@mpc-data.co.uk}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:amurray@mpc-data.co.ukuh1j*hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]h ]h"]h$]h&]uh1hhj|hhhhhKubj{)}(hhh](j)}(h 整数类型h]h 整数类型}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh literal_block)}(hX&若变量类型是Type,则使用printk格式占位符。 ------------------------------------------- char %d 或 %x unsigned char %u 或 %x short int %d 或 %x unsigned short int %u 或 %x int %d 或 %x unsigned int %u 或 %x long %ld 或 %lx unsigned long %lu 或 %lx long long %lld 或 %llx unsigned long long %llu 或 %llx size_t %zu 或 %zx ssize_t %zd 或 %zx s8 %d 或 %x u8 %u 或 %x s16 %d 或 %x u16 %u 或 %x s32 %d 或 %x u32 %u 或 %x s64 %lld 或 %llx u64 %llu 或 %llxh]hX&若变量类型是Type,则使用printk格式占位符。 ------------------------------------------- char %d 或 %x unsigned char %u 或 %x short int %d 或 %x unsigned short int %u 或 %x int %d 或 %x unsigned int %u 或 %x long %ld 或 %lx unsigned long %lu 或 %lx long long %lld 或 %llx unsigned long long %llu 或 %llx size_t %zu 或 %zx ssize_t %zd 或 %zx s8 %d 或 %x u8 %u 或 %x s16 %d 或 %x u16 %u 或 %x s32 %d 或 %x u32 %u 或 %x s64 %lld 或 %llx u64 %llu 或 %llx}hj0sbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1j.hhhKhjhhubh)}(h如果 的大小依赖于配置选项 (例如 sector_t, blkcnt_t) 或其大小依赖于架构 (例如 tcflag_t),则使用其可能的最大类型的格式占位符并显式强制转换为它。h]h如果 的大小依赖于配置选项 (例如 sector_t, blkcnt_t) 或其大小依赖于架构 (例如 tcflag_t),则使用其可能的最大类型的格式占位符并显式强制转换为它。}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(h例如h]h例如}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjhhubj/)}(h|printk("test: sector number/total blocks: %llu/%llu\n", (unsigned long long)sector, (unsigned long long)blockcount);h]h|printk("test: sector number/total blocks: %llu/%llu\n", (unsigned long long)sector, (unsigned long long)blockcount);}hj\sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhK:hjhhubh)}(h)提醒:sizeof()返回类型为size_t。h]h)提醒:sizeof()返回类型为size_t。}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjhhubh)}(h内核的printf不支持%n。显而易见,浮点格式(%e, %f, %g, %a)也不被识别。使用任何不 支持的占位符或长度限定符都会导致一个WARN并且终止vsnprintf()执行。h]h内核的printf不支持%n。显而易见,浮点格式(%e, %f, %g, %a)也不被识别。使用任何不 支持的占位符或长度限定符都会导致一个WARN并且终止vsnprintf()执行。}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjhhubeh}(h]id1ah ]h"] 整数类型ah$]h&]uh1jzhj|hhhhhKubj{)}(hhh](j)}(h 指针类型h]h 指针类型}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKCubh)}(h一个原始指针值可以用%p打印,它将在打印前对地址进行哈希处理。内核也支持扩展占位符来打印 不同类型的指针。h]h一个原始指针值可以用%p打印,它将在打印前对地址进行哈希处理。内核也支持扩展占位符来打印 不同类型的指针。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjhhubh)}(h一些扩展占位符会打印给定地址上的数据,而不是打印地址本身。在这种情况下,以下错误消息可能 会被打印出来,而不是无法访问的消息::h]h一些扩展占位符会打印给定地址上的数据,而不是打印地址本身。在这种情况下,以下错误消息可能 会被打印出来,而不是无法访问的消息:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjhhubj/)}(hm(null) data on plain NULL address (efault) data on invalid address (einval) invalid data on a valid addressh]hm(null) data on plain NULL address (efault) data on invalid address (einval) invalid data on a valid address}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKKhjhhubj{)}(hhh](j)}(h 普通指针h]h 普通指针}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKPubj/)}(h$%p abcdef12 or 00000000abcdef12h]h$%p abcdef12 or 00000000abcdef12}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKThjhhubh)}(hX=没有指定扩展名的指针(即没有修饰符的%p)被哈希(hash),以防止内核内存布局消息的泄露。这 样还有一个额外的好处,就是提供一个唯一的标识符。在64位机器上,前32位被清零。当没有足够的 熵进行散列处理时,内核将打印(ptrval)代替h]hX=没有指定扩展名的指针(即没有修饰符的%p)被哈希(hash),以防止内核内存布局消息的泄露。这 样还有一个额外的好处,就是提供一个唯一的标识符。在64位机器上,前32位被清零。当没有足够的 熵进行散列处理时,内核将打印(ptrval)代替}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjhhubh)}(hX如果可能的话,使用专门的修饰符,如%pS或%pB(如下所述),以避免打印一个必须事后解释的非哈 希地址。如果不可能,而且打印地址的目的是为调试提供更多的消息,使用%p,并在调试过程中 用 ``no_hash_pointers`` 参数启动内核,这将打印所有未修改的%p地址。如果你 *真的* 想知 道未修改的地址,请看下面的%px。h](hX如果可能的话,使用专门的修饰符,如%pS或%pB(如下所述),以避免打印一个必须事后解释的非哈 希地址。如果不可能,而且打印地址的目的是为调试提供更多的消息,使用%p,并在调试过程中 用 }(hjhhhNhNubhliteral)}(h``no_hash_pointers``h]hno_hash_pointers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhI 参数启动内核,这将打印所有未修改的%p地址。如果你 }(hjhhhNhNubhemphasis)}(h*真的*h]h真的}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 想知 道未修改的地址,请看下面的%px。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKZhjhhubh)}(h如果(也只有在)你将地址作为虚拟文件的内容打印出来,例如在procfs或sysfs中(使用 seq_printf(),而不是printk())由用户空间进程读取,使用下面描述的%pK修饰符,不 要用%p或%px。h]h如果(也只有在)你将地址作为虚拟文件的内容打印出来,例如在procfs或sysfs中(使用 seq_printf(),而不是printk())由用户空间进程读取,使用下面描述的%pK修饰符,不 要用%p或%px。}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjhhubeh}(h]id3ah ]h"] 普通指针ah$]h&]uh1jzhjhhhhhKPubj{)}(hhh](j)}(h 错误指针h]h 错误指针}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBhhhhhKeubj/)}(h%pe -ENOSPCh]h%pe -ENOSPC}hjSsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKihjBhhubh)}(h用于打印错误指针(即IS_ERR()为真的指针)的符号错误名。不知道符号名的错误值会以十进制打印, 而作为%pe参数传递的非ERR_PTR会被视为普通的%p。h]h用于打印错误指针(即IS_ERR()为真的指针)的符号错误名。不知道符号名的错误值会以十进制打印, 而作为%pe参数传递的非ERR_PTR会被视为普通的%p。}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjBhhubeh}(h]id4ah ]h"] 错误指针ah$]h&]uh1jzhjhhhhhKeubj{)}(hhh](j)}(h符号/函数指针h]h符号/函数指针}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwhhhhhKoubj/)}(h%pS versatile_init+0x0/0x110 %ps versatile_init %pSR versatile_init+0x9/0x110 (with __builtin_extract_return_addr() translation) %pB prev_fn_of_versatile_init+0x88/0x88h]h%pS versatile_init+0x0/0x110 %ps versatile_init %pSR versatile_init+0x9/0x110 (with __builtin_extract_return_addr() translation) %pB prev_fn_of_versatile_init+0x88/0x88}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKshjwhhubh)}(h``S`` 和 ``s`` 占位符用于打印符号格式的指针。它们的结果是符号名称带有(S)或不带有(s)偏移 量。如果禁用KALLSYMS,则打印符号地址。h](j)}(h``S``h]hS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h``s``h]hs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 占位符用于打印符号格式的指针。它们的结果是符号名称带有(S)或不带有(s)偏移 量。如果禁用KALLSYMS,则打印符号地址。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKzhjwhhubh)}(h``B`` 占位符的结果是带有偏移量的符号名,在打印堆栈回溯时应该使用。占位符将考虑编译器优化 的影响,当使用尾部调用并使用noreturn GCC属性标记时,可能会发生这种优化。h](j)}(h``B``h]hB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 占位符的结果是带有偏移量的符号名,在打印堆栈回溯时应该使用。占位符将考虑编译器优化 的影响,当使用尾部调用并使用noreturn GCC属性标记时,可能会发生这种优化。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK}hjwhhubh)}(h如果指针在一个模块内,模块名称和可选的构建ID将被打印在符号名称之后,并在说明符的末尾添加 一个额外的 ``b`` 。h](h如果指针在一个模块内,模块名称和可选的构建ID将被打印在符号名称之后,并在说明符的末尾添加 一个额外的 }(hjhhhNhNubj)}(h``b``h]hb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubj/)}(hX|%pS versatile_init+0x0/0x110 [module_name] %pSb versatile_init+0x0/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] %pSRb versatile_init+0x9/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] (with __builtin_extract_return_addr() translation) %pBb prev_fn_of_versatile_init+0x88/0x88 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e]h]hX|%pS versatile_init+0x0/0x110 [module_name] %pSb versatile_init+0x0/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] %pSRb versatile_init+0x9/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] (with __builtin_extract_return_addr() translation) %pBb prev_fn_of_versatile_init+0x88/0x88 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e]}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjwhhubeh}(h]id5ah ]h"]符号/函数指针ah$]h&]uh1jzhjhhhhhKoubj{)}(hhh](j)}(h(来自BPF / tracing追踪的探查指针h]h(来自BPF / tracing追踪的探查指针}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj/)}(h)%pks kernel string %pus user stringh]h)%pks kernel string %pus user string}hj'sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjhhubh)}(hXe``k`` 和 ``u`` 指定符用于打印来自内核内存(k)或用户内存(u)的先前探测的内存。后面的 ``s`` 指 定符的结果是打印一个字符串。对于直接在常规的vsnprintf()中使用时,(k)和(u)注释被忽略,但是,当 在BPF的bpf_trace_printk()之外使用时,它会读取它所指向的内存,不会出现错误。h](j)}(h``k``h]hk}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh 和 }(hj5hhhNhNubj)}(h``u``h]hu}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubhb 指定符用于打印来自内核内存(k)或用户内存(u)的先前探测的内存。后面的 }(hj5hhhNhNubj)}(h``s``h]hs}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh 指 定符的结果是打印一个字符串。对于直接在常规的vsnprintf()中使用时,(k)和(u)注释被忽略,但是,当 在BPF的bpf_trace_printk()之外使用时,它会读取它所指向的内存,不会出现错误。}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] bpf-tracingah ]h"](来自bpf / tracing追踪的探查指针ah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(h 内核指针h]h 内核指针}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}hhhhhKubj/)}(h$%pK 01234567 or 0123456789abcdefh]h$%pK 01234567 or 0123456789abcdef}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhj}hhubh)}(h用于打印应该对非特权用户隐藏的内核指针。%pK的行为取决于kptr_restrict sysctl——详见 Documentation/admin-guide/sysctl/kernel.rst。h]h用于打印应该对非特权用户隐藏的内核指针。%pK的行为取决于kptr_restrict sysctl——详见 Documentation/admin-guide/sysctl/kernel.rst。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj}hhubeh}(h]id6ah ]h"] 内核指针ah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(h未经修改的地址h]h未经修改的地址}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj/)}(h$%px 01234567 or 0123456789abcdefh]h$%px 01234567 or 0123456789abcdef}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjhhubh)}(hX`对于打印指针,当你 *真的* 想打印地址时。在用%px打印指针之前,请考虑你是否泄露了内核内 存布局的敏感消息。%px在功能上等同于%lx(或%lu)。%px是首选,因为它在grep查找时更唯一。 如果将来我们需要修改内核处理打印指针的方式,我们将能更好地找到调用点。h](h对于打印指针,当你 }(hjhhhNhNubj)}(h*真的*h]h真的}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX< 想打印地址时。在用%px打印指针之前,请考虑你是否泄露了内核内 存布局的敏感消息。%px在功能上等同于%lx(或%lu)。%px是首选,因为它在grep查找时更唯一。 如果将来我们需要修改内核处理打印指针的方式,我们将能更好地找到调用点。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXO在使用%px之前,请考虑使用%p并在调试过程中启用' ' no_hash_pointer ' '内核参数是否足 够(参见上面的%p描述)。%px的一个有效场景可能是在panic发生之前立即打印消息,这样无论如何 都可以防止任何敏感消息被利用,使用%px就不需要用no_hash_pointer来重现panic。h]hXW在使用%px之前,请考虑使用%p并在调试过程中启用’ ‘ no_hash_pointer ‘ ‘内核参数是否足 够(参见上面的%p描述)。%px的一个有效场景可能是在panic发生之前立即打印消息,这样无论如何 都可以防止任何敏感消息被利用,使用%px就不需要用no_hash_pointer来重现panic。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id7ah ]h"]未经修改的地址ah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(h 指针差异h]h 指针差异}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj/)}(h%td 2560 %tx a00h]h%td 2560 %tx a00}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjhhubh)}(h>为了打印指针的差异,使用ptrdiff_t的%t修饰符。h]h>为了打印指针的差异,使用ptrdiff_t的%t修饰符。}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h例如::h]h例如:}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj/)}(h@printk("test: difference between pointers: %td\n", ptr2 - ptr1);h]h@printk("test: difference between pointers: %td\n", ptr2 - ptr1);}hjBsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjhhubeh}(h]id8ah ]h"] 指针差异ah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(h结构体资源(Resources)h]h结构体资源(Resources)}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXhhhhhKubj/)}(h%pr [mem 0x60000000-0x6fffffff flags 0x2200] or [mem 0x0000000060000000-0x000000006fffffff flags 0x2200] %pR [mem 0x60000000-0x6fffffff pref] or [mem 0x0000000060000000-0x000000006fffffff pref]h]h%pr [mem 0x60000000-0x6fffffff flags 0x2200] or [mem 0x0000000060000000-0x000000006fffffff flags 0x2200] %pR [mem 0x60000000-0x6fffffff pref] or [mem 0x0000000060000000-0x000000006fffffff pref]}hjisbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjXhhubh)}(h用于打印结构体资源。 ``R`` 和 ``r`` 占位符的结果是打印出的资源带有(R)或不带有(r)解码标志 成员。h](h用于打印结构体资源。 }(hjwhhhNhNubj)}(h``R``h]hR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh 和 }(hjwhhhNhNubj)}(h``r``h]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh^ 占位符的结果是打印出的资源带有(R)或不带有(r)解码标志 成员。}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubeh}(h] resourcesah ]h"]结构体资源(resources)ah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(h物理地址类型 phys_addr_th]h物理地址类型 phys_addr_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj/)}(h(%pa[p] 0x01234567 or 0x0123456789abcdefh]h(%pa[p] 0x01234567 or 0x0123456789abcdef}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjhhubh)}(h用于打印phys_addr_t类型(以及它的衍生物,如resource_size_t),该类型可以根据构建选项而 变化,无论CPU数据真实物理地址宽度如何。h]h用于打印phys_addr_t类型(以及它的衍生物,如resource_size_t),该类型可以根据构建选项而 变化,无论CPU数据真实物理地址宽度如何。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] phys-addr-tah ]h"]物理地址类型 phys_addr_tah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(hDMA地址类型dma_addr_th]hDMA地址类型dma_addr_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj/)}(h(%pad 0x01234567 or 0x0123456789abcdefh]h(%pad 0x01234567 or 0x0123456789abcdef}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjhhubh)}(hs用于打印dma_addr_t类型,该类型可以根据构建选项而变化,而不考虑CPU数据路径的宽度。h]hs用于打印dma_addr_t类型,该类型可以根据构建选项而变化,而不考虑CPU数据路径的宽度。}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h通过引用传递。h]h通过引用传递。}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] dmadma-addr-tah ]h"]dma地址类型dma_addr_tah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(h!原始缓冲区为转义字符串h]h!原始缓冲区为转义字符串}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEhhhhhKubj/)}(h %*pE[achnops]h]h %*pE[achnops]}hjVsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjEhhubh)}(hJ用于将原始缓冲区打印成转义字符串。对于以下缓冲区::h]hI用于将原始缓冲区打印成转义字符串。对于以下缓冲区:}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjEhhubj/)}(h1b 62 20 5c 43 07 22 90 0d 5dh]h1b 62 20 5c 43 07 22 90 0d 5d}hjrsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjEhhubh)}(hJ几个例子展示了如何进行转换(不包括两端的引号)。::h]hI几个例子展示了如何进行转换(不包括两端的引号)。:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjEhhubj/)}(h~%*pE "\eb \C\a"\220\r]" %*pEhp "\x1bb \C\x07"\x90\x0d]" %*pEa "\e\142\040\\\103\a\042\220\r\135"h]h~%*pE "\eb \C\a"\220\r]" %*pEhp "\x1bb \C\x07"\x90\x0d]" %*pEa "\e\142\040\\\103\a\042\220\r\135"}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhKhjEhhubh)}(hg转换规则是根据可选的标志组合来应用的(详见:c:func:`string_escape_mem` 内核文档):h](hE转换规则是根据可选的标志组合来应用的(详见:c:func:}(hjhhhNhNubhtitle_reference)}(h`string_escape_mem`h]hstring_escape_mem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 内核文档):}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjEhhubh block_quote)}(h- a - ESCAPE_ANY - c - ESCAPE_SPECIAL - h - ESCAPE_HEX - n - ESCAPE_NULL - o - ESCAPE_OCTAL - p - ESCAPE_NP - s - ESCAPE_SPACE h]h bullet_list)}(hhh](h list_item)}(ha - ESCAPE_ANYh]h)}(hjh]ha - ESCAPE_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hc - ESCAPE_SPECIALh]h)}(hjh]hc - ESCAPE_SPECIAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hh - ESCAPE_HEXh]h)}(hjh]hh - ESCAPE_HEX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hn - ESCAPE_NULLh]h)}(hjh]hn - ESCAPE_NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(ho - ESCAPE_OCTALh]h)}(hj)h]ho - ESCAPE_OCTAL}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj'ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h p - ESCAPE_NPh]h)}(hj@h]h p - ESCAPE_NP}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj>ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hs - ESCAPE_SPACE h]h)}(hs - ESCAPE_SPACEh]hs - ESCAPE_SPACE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjUubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjEhhubh)}(h)默认情况下,使用 ESCAPE_ANY_NP。h]h)默认情况下,使用 ESCAPE_ANY_NP。}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjEhhubh)}(hMESCAPE_ANY_NP是许多情况下的明智选择,特别是对于打印SSID。h]hMESCAPE_ANY_NP是许多情况下的明智选择,特别是对于打印SSID。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjEhhubh)}(h=如果字段宽度被省略,那么将只转义1个字节。h]h=如果字段宽度被省略,那么将只转义1个字节。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjEhhubeh}(h]id9ah ]h"]!原始缓冲区为转义字符串ah$]h&]uh1jzhjhhhhhKubj{)}(hhh](j)}(h'原始缓冲区为十六进制字符串h]h'原始缓冲区为十六进制字符串}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMubj/)}(hc%*ph 00 01 02 ... 3f %*phC 00:01:02: ... :3f %*phD 00-01-02- ... -3f %*phN 000102 ... 3fh]hc%*ph 00 01 02 ... 3f %*phC 00:01:02: ... :3f %*phD 00-01-02- ... -3f %*phN 000102 ... 3f}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhM hjhhubh)}(h对于打印小的缓冲区(最长64个字节),可以用一定的分隔符作为一个 十六进制字符串。对于较大的缓冲区,可以考虑使用 :c:func:`print_hex_dump` 。h](h对于打印小的缓冲区(最长64个字节),可以用一定的分隔符作为一个 十六进制字符串。对于较大的缓冲区,可以考虑使用 }(hjhhhNhNubh)}(h:c:func:`print_hex_dump`h]j)}(hjh]hprint_hex_dump()}(hjhhhNhNubah}(h]h ](xrefcc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdoc*translations/zh_CN/core-api/printk-formats refdomainjreftypefunc refexplicitrefwarn reftargetprint_hex_dumpuh1hhhhMhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]id10ah ]h"]'原始缓冲区为十六进制字符串ah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(hMAC/FDDI地址h]hMAC/FDDI地址}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj/)}(hw%pM 00:01:02:03:04:05 %pMR 05:04:03:02:01:00 %pMF 00-01-02-03-04-05 %pm 000102030405 %pmR 050403020100h]hw%pM 00:01:02:03:04:05 %pMR 05:04:03:02:01:00 %pMF 00-01-02-03-04-05 %pm 000102030405 %pmR 050403020100}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj hhubh)}(h用于打印以十六进制表示的6字节MAC/FDDI地址。 ``M`` 和 ``m`` 占位符导致打印的 地址有(M)或没有(m)字节分隔符。默认的字节分隔符是冒号(:)。h](h=用于打印以十六进制表示的6字节MAC/FDDI地址。 }(hj(hhhNhNubj)}(h``M``h]hM}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh 和 }(hj(hhhNhNubj)}(h``m``h]hm}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubhq 占位符导致打印的 地址有(M)或没有(m)字节分隔符。默认的字节分隔符是冒号(:)。}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(h对于FDDI地址,可以在 ``M`` 占位符之后使用 ``F`` 说明,以使用破折号(——)分隔符 代替默认的分隔符。h](h对于FDDI地址,可以在 }(hjZhhhNhNubj)}(h``M``h]hM}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh 占位符之后使用 }(hjZhhhNhNubj)}(h``F``h]hF}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubhI 说明,以使用破折号(——)分隔符 代替默认的分隔符。}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM!hj hhubh)}(h对于蓝牙地址, ``R`` 占位符应使用在 ``M`` 占位符之后,以使用反转的字节顺序,适 合于以小尾端顺序的蓝牙地址的肉眼可见的解析。h](h对于蓝牙地址, }(hjhhhNhNubj)}(h``R``h]hR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 占位符应使用在 }(hjhhhNhNubj)}(h``M``h]hM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhz 占位符之后,以使用反转的字节顺序,适 合于以小尾端顺序的蓝牙地址的肉眼可见的解析。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM$hj hhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM'hj hhubeh}(h]mac-fddiah ]h"]mac/fddi地址ah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(h IPv4地址h]h IPv4地址}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhM*ubj/)}(h5%pI4 1.2.3.4 %pi4 001.002.003.004 %p[Ii]4[hnbl]h]h5%pI4 1.2.3.4 %pi4 001.002.003.004 %p[Ii]4[hnbl]}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhM.hjhhubh)}(h用于打印IPv4点分隔的十进制地址。 ``I4`` 和 ``i4`` 占位符的结果是打印的地址 有(i4)或没有(I4)前导零。h](h/用于打印IPv4点分隔的十进制地址。 }(hjhhhNhNubj)}(h``I4``h]hI4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h``i4``h]hi4}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF 占位符的结果是打印的地址 有(i4)或没有(I4)前导零。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM2hjhhubh)}(h附加的 ``h`` 、 ``n`` 、 ``b`` 和 ``l`` 占位符分别用于指定主机、网络、大 尾端或小尾端地址。如果没有提供占位符,则使用默认的网络/大尾端顺序。h](h 附加的 }(hj% hhhNhNubj)}(h``h``h]hh}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh 、 }(hj% hhhNhNubj)}(h``n``h]hn}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh 、 }hj% sbj)}(h``b``h]hb}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh 和 }(hj% hhhNhNubj)}(h``l``h]hl}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh 占位符分别用于指定主机、网络、大 尾端或小尾端地址。如果没有提供占位符,则使用默认的网络/大尾端顺序。}(hj% hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM5hjhhubh)}(h通过引用传递。h]h通过引用传递。}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hjhhubeh}(h]ipv4ah ]h"] ipv4地址ah$]h&]uh1jzhjhhhhhM*ubj{)}(hhh](j)}(h IPv6 地址h]h IPv6 地址}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhM;ubj/)}(hp%pI6 0001:0002:0003:0004:0005:0006:0007:0008 %pi6 00010002000300040005000600070008 %pI6c 1:2:3:4:5:6:7:8h]hp%pI6 0001:0002:0003:0004:0005:0006:0007:0008 %pi6 00010002000300040005000600070008 %pI6c 1:2:3:4:5:6:7:8}hj sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhM?hj hhubh)}(h用于打印IPv6网络顺序的16位十六进制地址。 ``I6`` 和 ``i6`` 占位符的结果是 打印的地址有(I6)或没有(i6)分号。始终使用前导零。h](h:用于打印IPv6网络顺序的16位十六进制地址。 }(hj hhhNhNubj)}(h``I6``h]hI6}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 和 }(hj hhhNhNubj)}(h``i6``h]hi6}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh[ 占位符的结果是 打印的地址有(I6)或没有(i6)分号。始终使用前导零。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMChj hhubh)}(h额外的 ``c`` 占位符可与 ``I`` 占位符一起使用,以打印压缩的IPv6地址,如 https://tools.ietf.org/html/rfc5952 所述h](h 额外的 }(hj hhhNhNubj)}(h``c``h]hc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 占位符可与 }(hj hhhNhNubj)}(h``I``h]hI}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh< 占位符一起使用,以打印压缩的IPv6地址,如 }(hj hhhNhNubj+)}(h#https://tools.ietf.org/html/rfc5952h]h#https://tools.ietf.org/html/rfc5952}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j*hj ubh 所述}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMFhj hhubh)}(h通过引用传递。h]h通过引用传递。}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMIhj hhubeh}(h]ipv6ah ]h"] ipv6 地址ah$]h&]uh1jzhjhhhhhM;ubj{)}(hhh](j)}(h4IPv4/IPv6地址(generic, with port, flowinfo, scope)h]h4IPv4/IPv6地址(generic, with port, flowinfo, scope)}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= hhhhhMLubj/)}(h%pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008 %piS 001.002.003.004 or 00010002000300040005000600070008 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345 %p[Ii]S[pfschnbl]h]h%pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008 %piS 001.002.003.004 or 00010002000300040005000600070008 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345 %p[Ii]S[pfschnbl]}hjN sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMPhj= hhubh)}(h用于打印一个IP地址,不需要区分它的类型是AF_INET还是AF_INET6。一个指向有效结构 体sockaddr的指针,通过 ``IS`` 或 ``IS`` 指定,可以传递给这个格式占位符。h](h用于打印一个IP地址,不需要区分它的类型是AF_INET还是AF_INET6。一个指向有效结构 体sockaddr的指针,通过 }(hj\ hhhNhNubj)}(h``IS``h]hIS}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh 或 }(hj\ hhhNhNubj)}(h``IS``h]hIS}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh1 指定,可以传递给这个格式占位符。}(hj\ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMVhj= hhubh)}(h附加的 ``p`` 、 ``f`` 和 ``s`` 占位符用于指定port(IPv4, IPv6)、 flowinfo (IPv6)和sope(IPv6)。port有一个 ``:`` 前缀,flowinfo是 ``/`` 和 范围是 ``%`` ,每个后面都跟着实际的值。h](h 附加的 }(hj hhhNhNubj)}(h``p``h]hp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 、 }(hj hhhNhNubj)}(h``f``h]hf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 和 }(hj hhhNhNubj)}(h``s``h]hs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhW 占位符用于指定port(IPv4, IPv6)、 flowinfo (IPv6)和sope(IPv6)。port有一个 }(hj hhhNhNubj)}(h``:``h]h:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 前缀,flowinfo是 }(hj hhhNhNubj)}(h``/``h]h/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 和 范围是 }(hj hhhNhNubj)}(h``%``h]h%}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh( ,每个后面都跟着实际的值。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMYhj= hhubh)}(hXA对于IPv6地址,如果指定了额外的指定符 ``c`` ,则使用 https://tools.ietf.org/html/rfc5952 描述的压缩IPv6地址。 如https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07 所建议的,IPv6地址由'[',']'包围,以防止出现额外的占位符 ``p`` , ``f`` 或 ``s`` 。h](h5对于IPv6地址,如果指定了额外的指定符 }(hj hhhNhNubj)}(h``c``h]hc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh ,则使用 }(hj hhhNhNubj+)}(h#https://tools.ietf.org/html/rfc5952h]h#https://tools.ietf.org/html/rfc5952}(hj" hhhNhNubah}(h]h ]h"]h$]h&]refurij$ uh1j*hj ubh 描述的压缩IPv6地址。 如https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07 所建议的,IPv6地址由’[’,’]’包围,以防止出现额外的占位符 }(hj hhhNhNubj)}(h``p``h]hp}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh , }(hj hhhNhNubj)}(h``f``h]hf}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 或 }(hj hhhNhNubj)}(h``s``h]hs}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM]hj= hhubh)}(h|对于IPv4地址,也可以使用额外的 ``h`` , ``n`` , ``b`` 和 ``l`` 说 明符,但对于IPv6地址则忽略。h](h,对于IPv4地址,也可以使用额外的 }(hjq hhhNhNubj)}(h``h``h]hh}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubh , }(hjq hhhNhNubj)}(h``n``h]hn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubh , }hjq sbj)}(h``b``h]hb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubh 和 }(hjq hhhNhNubj)}(h``l``h]hl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubh- 说 明符,但对于IPv6地址则忽略。}(hjq hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMbhj= hhubh)}(h通过引用传递。h]h通过引用传递。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMehj= hhubh)}(h更多例子::h]h 更多例子:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMghj= hhubj/)}(h%pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789h]h%pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789}hj sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMihj= hhubeh}(h]*ipv4-ipv6-generic-with-port-flowinfo-scopeah ]h"]4ipv4/ipv6地址(generic, with port, flowinfo, scope)ah$]h&]uh1jzhjhhhhhMLubj{)}(hhh](j)}(hUUID/GUID地址h]hUUID/GUID地址}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMnubj/)}(h%pUb 00010203-0405-0607-0809-0a0b0c0d0e0f %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f %pUL 03020100-0504-0706-0809-0A0B0C0E0E0Fh]h%pUb 00010203-0405-0607-0809-0a0b0c0d0e0f %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F}hj sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMrhj hhubh)}(h用于打印16字节的UUID/GUIDs地址。附加的 ``l`` , ``L`` , ``b`` 和 ``B`` 占位符用 于指定小写(l)或大写(L)十六进制表示法中的小尾端顺序,以及小写(b)或大写(B)十六进制表 示法中的大尾端顺序。h](h4用于打印16字节的UUID/GUIDs地址。附加的 }(hj hhhNhNubj)}(h``l``h]hl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh , }(hj hhhNhNubj)}(h``L``h]hL}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh , }hj sbj)}(h``b``h]hb}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 和 }(hj hhhNhNubj)}(h``B``h]hB}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 占位符用 于指定小写(l)或大写(L)十六进制表示法中的小尾端顺序,以及小写(b)或大写(B)十六进制表 示法中的大尾端顺序。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMwhj hhubh)}(hl如果没有使用额外的占位符,则将打印带有小写十六进制表示法的默认大端顺序。h]hl如果没有使用额外的占位符,则将打印带有小写十六进制表示法的默认大端顺序。}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM{hj hhubh)}(h通过引用传递。h]h通过引用传递。}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM}hj hhubeh}(h] uuid-guidah ]h"]uuid/guid地址ah$]h&]uh1jzhjhhhhhMnubj{)}(hhh](j)}(h目录项(dentry)的名称h]h目录项(dentry)的名称}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj/)}(h%pd{,2,3,4} %pD{,2,3,4}h]h%pd{,2,3,4} %pD{,2,3,4}}hj sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj hhubh)}(hX用于打印dentry名称;如果我们用 :c:func:`d_move` 和它比较,名称可能是新旧混合的,但 不会oops。 %pd dentry比较安全,其相当于我们以前用的%s dentry->d_name.name,%pd打 印 ``n`` 最后的组件。 %pD对结构文件做同样的事情。h](h+用于打印dentry名称;如果我们用 }(hj hhhNhNubh)}(h:c:func:`d_move`h]j)}(hj h]hd_move()}(hj hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjd_moveuh1hhhhMhj ubh 和它比较,名称可能是新旧混合的,但 不会oops。 %pd dentry比较安全,其相当于我们以前用的%s dentry->d_name.name,%pd打 印 }(hj hhhNhNubj)}(h``n``h]hn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh; 最后的组件。 %pD对结构文件做同样的事情。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(h通过引用传递。h]h通过引用传递。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]dentryah ]h"]目录项(dentry)的名称ah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(h!块设备(block_device)名称h]h!块设备(block_device)名称}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj/)}(h%pg sda, sda1 or loop0p1h]h%pg sda, sda1 or loop0p1}hj sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj hhubh)}(h*用于打印block_device指针的名称。h]h*用于打印block_device指针的名称。}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h] block-deviceah ]h"]!块设备(block_device)名称ah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(hva_format结构体h]hva_format结构体}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? hhhhhMubj/)}(h%pVh]h%pV}hjP sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj? hhubh)}(hY用于打印结构体va_format。这些结构包含一个格式字符串 和va_list如下h]hY用于打印结构体va_format。这些结构包含一个格式字符串 和va_list如下}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj? hhubj/)}(hCstruct va_format { const char *fmt; va_list *va; };h]hCstruct va_format { const char *fmt; va_list *va; };}hjl sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj? hhubh)}(h实现 "递归vsnprintf"。h]h实现 “递归vsnprintf”。}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj? hhubh)}(hm如果没有一些机制来验证格式字符串和va_list参数的正确性,请不要使用这个功能。h]hm如果没有一些机制来验证格式字符串和va_list参数的正确性,请不要使用这个功能。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj? hhubh)}(h通过引用传递。h]h通过引用传递。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj? hhubeh}(h] va-formatah ]h"]va_format结构体ah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(h设备树节点h]h设备树节点}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj/)}(h %pOF[fnpPcCF]h]h %pOF[fnpPcCF]}hj sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj hhubh)}(hA用于打印设备树节点结构。默认行为相当于%pOFf。h]hA用于打印设备树节点结构。默认行为相当于%pOFf。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(h- f - 设备节点全称 - n - 设备节点名 - p - 设备节点句柄 - P - 设备节点路径规范(名称+@单位) - F - 设备节点标志 - c - 主要兼容字符串 - C - 全兼容字符串 h]j)}(hhh](j)}(hf - 设备节点全称h]h)}(hj h]hf - 设备节点全称}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hn - 设备节点名h]h)}(hj h]hn - 设备节点名}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hp - 设备节点句柄h]h)}(hjh]hp - 设备节点句柄}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h,P - 设备节点路径规范(名称+@单位)h]h)}(hj'h]h,P - 设备节点路径规范(名称+@单位)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hF - 设备节点标志h]h)}(hj>h]hF - 设备节点标志}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hc - 主要兼容字符串h]h)}(hjUh]hc - 主要兼容字符串}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjSubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hC - 全兼容字符串 h]h)}(hC - 全兼容字符串h]hC - 全兼容字符串}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]jsjtuh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubh)}(h-当使用多个参数时,分隔符是':'。h]h1当使用多个参数时,分隔符是’:’。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(h例如h]h例如}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj/)}(hX`%pOF /foo/bar@0 - Node full name %pOFf /foo/bar@0 - Same as above %pOFfp /foo/bar@0:10 - Node full name + phandle %pOFfcF /foo/bar@0:foo,device:--P- - Node full name + major compatible string + node flags D - dynamic d - detached P - Populated B - Populated bush]hX`%pOF /foo/bar@0 - Node full name %pOFf /foo/bar@0 - Same as above %pOFfp /foo/bar@0:10 - Node full name + phandle %pOFfcF /foo/bar@0:foo,device:--P- - Node full name + major compatible string + node flags D - dynamic d - detached P - Populated B - Populated bus}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj hhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]id11ah ]h"]设备树节点ah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(hFwnode handlesh]hFwnode handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMubj/)}(h%pfw[fP]h]h%pfw[fP]}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhjhhubh)}(h用于打印fwnode_handles的消息。默认情况下是打印完整的节点名称,包括路径。 这些修饰符在功能上等同于上面的%pOF。h]h用于打印fwnode_handles的消息。默认情况下是打印完整的节点名称,包括路径。 这些修饰符在功能上等同于上面的%pOF。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hb- f - 节点的全名,包括路径。 - P - 节点名称,包括地址(如果有的话)。 h]j)}(hhh](j)}(h%f - 节点的全名,包括路径。h]h)}(hjh]h%f - 节点的全名,包括路径。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h8P - 节点名称,包括地址(如果有的话)。 h]h)}(h7P - 节点名称,包括地址(如果有的话)。h]h7P - 节点名称,包括地址(如果有的话)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jsjtuh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubh)}(h 例如 (ACPI)h]h 例如 (ACPI)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj/)}(h|%pfwf \_SB.PCI0.CIO2.port@1.endpoint@0 - Full node name %pfwP endpoint@0 - Node nameh]h|%pfwf \_SB.PCI0.CIO2.port@1.endpoint@0 - Full node name %pfwP endpoint@0 - Node name}hjKsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhjhhubh)}(h 例如 (OF)h]h 例如 (OF)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj/)}(h%pfwf /ocp@68000000/i2c@48072000/camera@10/port/endpoint - Full name %pfwP endpoint - Node nameh]h%pfwf /ocp@68000000/i2c@48072000/camera@10/port/endpoint - Full name %pfwP endpoint - Node name}hjgsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhjhhubeh}(h]fwnode-handlesah ]h"]fwnode handlesah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(h时间和日期h]h时间和日期}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}hhhhhMubj/)}(h%pt[RT] YYYY-mm-ddTHH:MM:SS %pt[RT]s YYYY-mm-dd HH:MM:SS %pt[RT]d YYYY-mm-dd %pt[RT]t HH:MM:SS %pt[RT][dt][r][s]h]h%pt[RT] YYYY-mm-ddTHH:MM:SS %pt[RT]s YYYY-mm-dd HH:MM:SS %pt[RT]d YYYY-mm-dd %pt[RT]t HH:MM:SS %pt[RT][dt][r][s]}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj}hhubh)}(h用于打印日期和时间::h]h用于打印日期和时间:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubj/)}(h-R struct rtc_time structure T time64_t typeh]h-R struct rtc_time structure T time64_t type}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj}hhubh)}(h'以我们(人类)可读的格式。h]h'以我们(人类)可读的格式。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubh)}(h{默认情况下,年将以1900为单位递增,月将以1为单位递增。 使用%pt[RT]r (raw) 来抑制这种行为。h]h{默认情况下,年将以1900为单位递增,月将以1为单位递增。 使用%pt[RT]r (raw) 来抑制这种行为。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubh)}(h%pt[RT]s(空格)将覆盖ISO 8601的分隔符,在日期和时间之间使用''(空格)而 不是'T'(大写T)。当日期或时间被省略时,它不会有任何影响。h]h%pt[RT]s(空格)将覆盖ISO 8601的分隔符,在日期和时间之间使用’’(空格)而 不是’T’(大写T)。当日期或时间被省略时,它不会有任何影响。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubeh}(h]id12ah ]h"]时间和日期ah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(h clk结构体h]h clk结构体}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhM ubj/)}(h %pC pll1h]h %pC pll1}hj sbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhM hjhhubh)}(hx用于打印clk结构。%pC 打印时钟的名称(通用时钟框架)或唯一的32位 ID(传统时钟框架)。h]hx用于打印clk结构。%pC 打印时钟的名称(通用时钟框架)或唯一的32位 ID(传统时钟框架)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h通过引用传递。h]h通过引用传递。}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]clkah ]h"] clk结构体ah$]h&]uh1jzhjhhhhhM ubj{)}(hhh](j)}(h-位图及其衍生物,如cpumask和nodemaskh]h-位图及其衍生物,如cpumask和nodemask}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;hhhhhMubj/)}(h%*pb 0779 %*pbl 0,3-6,8-10h]h%*pb 0779 %*pbl 0,3-6,8-10}hjLsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMhj;hhubh)}(h对于打印位图(bitmap)及其派生的cpumask和nodemask,%*pb输出以字段宽度为位数的位图, %*pbl输出以字段宽度为位数的范围列表。h]h对于打印位图(bitmap)及其派生的cpumask和nodemask,%*pb输出以字段宽度为位数的位图, %*pbl输出以字段宽度为位数的范围列表。}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj;hhubh)}(h字段宽度用值传递,位图用引用传递。可以使用辅助宏cpumask_pr_args()和 nodemask_pr_args()来方便打印cpumask和nodemask。h]h字段宽度用值传递,位图用引用传递。可以使用辅助宏cpumask_pr_args()和 nodemask_pr_args()来方便打印cpumask和nodemask。}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj;hhubeh}(h]cpumasknodemaskah ]h"]-位图及其衍生物,如cpumask和nodemaskah$]h&]uh1jzhjhhhhhMubj{)}(hhh](j)}(h*标志位字段,如页标志、gfp_flagsh]h*标志位字段,如页标志、gfp_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~hhhhhM#ubj/)}(h%pGp 0x17ffffc0002036(referenced|uptodate|lru|active|private|node=0|zone=2|lastcpupid=0x1fffff) %pGg GFP_USER|GFP_DMA32|GFP_NOWARN %pGv read|exec|mayread|maywrite|mayexec|denywriteh]h%pGp 0x17ffffc0002036(referenced|uptodate|lru|active|private|node=0|zone=2|lastcpupid=0x1fffff) %pGg GFP_USER|GFP_DMA32|GFP_NOWARN %pGv read|exec|mayread|maywrite|mayexec|denywrite}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhM'hj~hhubh)}(hX将flags位字段打印为构造值的符号常量集合。标志的类型由第三个字符给出。目前支持的 是[p]age flags, [v]ma_flags(都期望 ``unsigned long *`` )和 [g]fp_flags(期望 ``gfp_t *`` )。标志名称和打印顺序取决于特定的类型。h](h将flags位字段打印为构造值的符号常量集合。标志的类型由第三个字符给出。目前支持的 是[p]age flags, [v]ma_flags(都期望 }(hjhhhNhNubj)}(h``unsigned long *``h]hunsigned long *}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh )和 [g]fp_flags(期望 }(hjhhhNhNubj)}(h ``gfp_t *``h]hgfp_t *}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh; )。标志名称和打印顺序取决于特定的类型。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM+hj~hhubh)}(h注意,这种格式不应该直接用于跟踪点的:c:func:`TP_printk()` 部分。相反,应使 用 中的show_*_flags()函数。h](h>注意,这种格式不应该直接用于跟踪点的:c:func:}(hjhhhNhNubj)}(h `TP_printk()`h]h TP_printk()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhS 部分。相反,应使 用 中的show_*_flags()函数。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM/hj~hhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM2hj~hhubeh}(h] gfp-flagsah ]h"]*标志位字段,如页标志、gfp_flagsah$]h&]uh1jzhjhhhhhM#ubj{)}(hhh](j)}(h网络设备特性h]h网络设备特性}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhM5ubj/)}(h%pNF 0x000000000000c000h]h%pNF 0x000000000000c000}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhM9hjhhubh)}(h 用于打印netdev_features_t。h]h 用于打印netdev_features_t。}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hjhhubh)}(h通过引用传递。h]h通过引用传递。}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM=hjhhubeh}(h]id13ah ]h"]网络设备特性ah$]h&]uh1jzhjhhhhhM5ubj{)}(hhh](j)}(h%V4L2和DRM FourCC代码(像素格式)h]h%V4L2和DRM FourCC代码(像素格式)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHhhhhhM@ubj/)}(h%p4cch]h%p4cc}hjYsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMDhjHhhubh)}(hX打印V4L2或DRM使用的FourCC代码,包括格式端序及其十六进制的数值。h]hX打印V4L2或DRM使用的FourCC代码,包括格式端序及其十六进制的数值。}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMFhjHhhubh)}(h通过引用传递。h]h通过引用传递。}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMHhjHhhubh)}(h例如::h]h例如:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMJhjHhhubj/)}(ht%p4cc BG12 little-endian (0x32314742) %p4cc Y10 little-endian (0x20303159) %p4cc NV12 big-endian (0xb231564e)h]ht%p4cc BG12 little-endian (0x32314742) %p4cc Y10 little-endian (0x20303159) %p4cc NV12 big-endian (0xb231564e)}hjsbah}(h]h ]h"]h$]h&]j>j?uh1j.hhhMLhjHhhubeh}(h]v4l2drm-fourccah ]h"]%v4l2和drm fourcc代码(像素格式)ah$]h&]uh1jzhjhhhhhM@ubeh}(h]id2ah ]h"] 指针类型ah$]h&]uh1jzhj|hhhhhKCubj{)}(hhh](j)}(h谢谢h]h谢谢}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMQubh)}(hx如果您添加了其他%p扩展,请在可行的情况下,用一个或多个测试用例扩展。h]hx如果您添加了其他%p扩展,请在可行的情况下,用一个或多个测试用例扩展。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMShjhhubh)}(h谢谢你的合作和关注。h]h谢谢你的合作和关注。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMUhjhhubeh}(h]id14ah ]h"]谢谢ah$]h&]uh1jzhj|hhhhhMQubeh}(h](printkjyeh ]h"](*如何获得正确的printk格式占位符cn_printk-formats.rsteh$]h&]uh1jzhhhhhhhKexpect_referenced_by_name}jjnsexpect_referenced_by_id}jyjnsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}jy]jnasnameids}(jjyjjjjjjj?j<jtjqjjjzjwjjjjjUjRjjjjjBj?jjjjjjj j j: j7 j j j j j j j< j9 j j jjjzjwjjj8j5j{jxjjjEjBjjjju nametypes}(jjjjj?jtjjzjjjUjjjBjjjj j: j j j j< j jjzjj8j{jjEjjuh}(jyj|jj|jjjjj<jjqjBjjwjwjjj}jjjRjjjXjjj?jjjEjjjj j jj7 j j j= j j j j j9 j j j? jj jwjjj}j5jjxj;jj~jBjjjHjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j"KsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h;Hyperlink target "cn-printk-formats-rst" is not referenced.}hj~sbah}(h]h ]h"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jyuba transformerN include_log]