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]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翻译}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h\司延腾 Yanteng Si 周彬彬 Binbin Zhou h]h)}(h[司延腾 Yanteng Si 周彬彬 Binbin Zhou h](h司延腾 Yanteng Si <}(hjhhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1jhjubh> 周彬彬 Binbin Zhou <}(hjhhhNhNubj)}(hzhoubinbin@loongson.cnh]hzhoubinbin@loongson.cn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:zhoubinbin@loongson.cnuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(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-rstuh1jXhKhhhhhhubhsection)}(hhh](htitle)}(h*如何获得正确的printk格式占位符h]h*如何获得正确的printk格式占位符}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhhKubh)}(hhh](h)}(hhh](h)}(h作者h]h作者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hhhKubh)}(h$Randy Dunlap h]h)}(hjh](hRandy Dunlap <}(hjhhhNhNubj)}(hrdunlap@infradead.orgh]hrdunlap@infradead.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:rdunlap@infradead.orguh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubh)}(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.ukuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubeh}(h]h ]h"]h$]h&]uh1hhjhhhhhhKubjg)}(hhh](jl)}(h 整数类型h]h 整数类型}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj hhhhhKubh 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}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKhj hhubh)}(h如果 的大小依赖于配置选项 (例如 sector_t, blkcnt_t) 或其大小依赖于架构 (例如 tcflag_t),则使用其可能的最大类型的格式占位符并显式强制转换为它。h]h如果 的大小依赖于配置选项 (例如 sector_t, blkcnt_t) 或其大小依赖于架构 (例如 tcflag_t),则使用其可能的最大类型的格式占位符并显式强制转换为它。}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hj hhubh)}(h例如h]h例如}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hj hhubj)}(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);}hjHsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhK:hj hhubh)}(h)提醒:sizeof()返回类型为size_t。h]h)提醒:sizeof()返回类型为size_t。}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hj hhubh)}(h内核的printf不支持%n。显而易见,浮点格式(%e, %f, %g, %a)也不被识别。使用任何不 支持的占位符或长度限定符都会导致一个WARN并且终止vsnprintf()执行。h]h内核的printf不支持%n。显而易见,浮点格式(%e, %f, %g, %a)也不被识别。使用任何不 支持的占位符或长度限定符都会导致一个WARN并且终止vsnprintf()执行。}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hj hhubeh}(h]id1ah ]h"] 整数类型ah$]h&]uh1jfhjhhhhhhKubjg)}(hhh](jl)}(h 指针类型h]h 指针类型}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjzhhhhhKCubh)}(h一个原始指针值可以用%p打印,它将在打印前对地址进行哈希处理。内核也支持扩展占位符来打印 不同类型的指针。h]h一个原始指针值可以用%p打印,它将在打印前对地址进行哈希处理。内核也支持扩展占位符来打印 不同类型的指针。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjzhhubh)}(h一些扩展占位符会打印给定地址上的数据,而不是打印地址本身。在这种情况下,以下错误消息可能 会被打印出来,而不是无法访问的消息::h]h一些扩展占位符会打印给定地址上的数据,而不是打印地址本身。在这种情况下,以下错误消息可能 会被打印出来,而不是无法访问的消息:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjzhhubj)}(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+uh1jhhhKKhjzhhubjg)}(hhh](jl)}(h 普通指针h]h 普通指针}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhKPubj)}(h$%p abcdef12 or 00000000abcdef12h]h$%p abcdef12 or 00000000abcdef12}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKThjhhubh)}(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。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjhhubeh}(h]id3ah ]h"] 普通指针ah$]h&]uh1jfhjzhhhhhKPubjg)}(hhh](jl)}(h 错误指针h]h 错误指针}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj.hhhhhKeubj)}(h%pe -ENOSPCh]h%pe -ENOSPC}hj?sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKihj.hhubh)}(h用于打印错误指针(即IS_ERR()为真的指针)的符号错误名。不知道符号名的错误值会以十进制打印, 而作为%pe参数传递的非ERR_PTR会被视为普通的%p。h]h用于打印错误指针(即IS_ERR()为真的指针)的符号错误名。不知道符号名的错误值会以十进制打印, 而作为%pe参数传递的非ERR_PTR会被视为普通的%p。}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhj.hhubeh}(h]id4ah ]h"] 错误指针ah$]h&]uh1jfhjzhhhhhKeubjg)}(hhh](jl)}(h符号/函数指针h]h符号/函数指针}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjchhhhhKoubj)}(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}hjtsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKshjchhubh)}(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&]uh1hhhhKzhjchhubh)}(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}hjchhubh)}(h如果指针在一个模块内,模块名称和可选的构建ID将被打印在符号名称之后,并在说明符的末尾添加 一个额外的 ``b`` 。h](h如果指针在一个模块内,模块名称和可选的构建ID将被打印在符号名称之后,并在说明符的末尾添加 一个额外的 }(hjhhhNhNubj)}(h``b``h]hb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjchhubj)}(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+uh1jhhhKhjchhubeh}(h]id5ah ]h"]符号/函数指针ah$]h&]uh1jfhjzhhhhhKoubjg)}(hhh](jl)}(h(来自BPF / tracing追踪的探查指针h]h(来自BPF / tracing追踪的探查指针}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhKubj)}(h)%pks kernel string %pus user stringh]h)%pks kernel string %pus user string}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjhhubh)}(hXe``k`` 和 ``u`` 指定符用于打印来自内核内存(k)或用户内存(u)的先前探测的内存。后面的 ``s`` 指 定符的结果是打印一个字符串。对于直接在常规的vsnprintf()中使用时,(k)和(u)注释被忽略,但是,当 在BPF的bpf_trace_printk()之外使用时,它会读取它所指向的内存,不会出现错误。h](j)}(h``k``h]hk}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh 和 }(hj!hhhNhNubj)}(h``u``h]hu}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubhb 指定符用于打印来自内核内存(k)或用户内存(u)的先前探测的内存。后面的 }(hj!hhhNhNubj)}(h``s``h]hs}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh 指 定符的结果是打印一个字符串。对于直接在常规的vsnprintf()中使用时,(k)和(u)注释被忽略,但是,当 在BPF的bpf_trace_printk()之外使用时,它会读取它所指向的内存,不会出现错误。}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] bpf-tracingah ]h"](来自bpf / tracing追踪的探查指针ah$]h&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(h 内核指针h]h 内核指针}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjihhhhhKubj)}(h$%pK 01234567 or 0123456789abcdefh]h$%pK 01234567 or 0123456789abcdef}hjzsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjihhubh)}(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&]uh1hhhhKhjihhubeh}(h]id6ah ]h"] 内核指针ah$]h&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(h未经修改的地址h]h未经修改的地址}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhKubj)}(h$%px 01234567 or 0123456789abcdefh]h$%px 01234567 or 0123456789abcdef}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjhhubh)}(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&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(h 指针差异h]h 指针差异}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhKubj)}(h%td 2560 %tx a00h]h%td 2560 %tx a00}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjhhubh)}(h>为了打印指针的差异,使用ptrdiff_t的%t修饰符。h]h>为了打印指针的差异,使用ptrdiff_t的%t修饰符。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h例如::h]h例如:}(hj hhhNhNubah}(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);}hj.sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjhhubeh}(h]id8ah ]h"] 指针差异ah$]h&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(h结构体资源(Resources)h]h结构体资源(Resources)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjDhhhhhKubj)}(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]}hjUsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjDhhubh)}(h用于打印结构体资源。 ``R`` 和 ``r`` 占位符的结果是打印出的资源带有(R)或不带有(r)解码标志 成员。h](h用于打印结构体资源。 }(hjchhhNhNubj)}(h``R``h]hR}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh 和 }(hjchhhNhNubj)}(h``r``h]hr}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh^ 占位符的结果是打印出的资源带有(R)或不带有(r)解码标志 成员。}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjDhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjDhhubeh}(h] resourcesah ]h"]结构体资源(resources)ah$]h&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(h物理地址类型 phys_addr_th]h物理地址类型 phys_addr_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhKubj)}(h(%pa[p] 0x01234567 or 0x0123456789abcdefh]h(%pa[p] 0x01234567 or 0x0123456789abcdef}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjhhubh)}(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&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(hDMA地址类型dma_addr_th]hDMA地址类型dma_addr_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhKubj)}(h(%pad 0x01234567 or 0x0123456789abcdefh]h(%pad 0x01234567 or 0x0123456789abcdef}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhjhhubh)}(hs用于打印dma_addr_t类型,该类型可以根据构建选项而变化,而不考虑CPU数据路径的宽度。h]hs用于打印dma_addr_t类型,该类型可以根据构建选项而变化,而不考虑CPU数据路径的宽度。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] dmadma-addr-tah ]h"]dma地址类型dma_addr_tah$]h&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(h!原始缓冲区为转义字符串h]h!原始缓冲区为转义字符串}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj1hhhhhKubj)}(h %*pE[achnops]h]h %*pE[achnops]}hjBsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhj1hhubh)}(hJ用于将原始缓冲区打印成转义字符串。对于以下缓冲区::h]hI用于将原始缓冲区打印成转义字符串。对于以下缓冲区:}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj1hhubj)}(h1b 62 20 5c 43 07 22 90 0d 5dh]h1b 62 20 5c 43 07 22 90 0d 5d}hj^sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhj1hhubh)}(hJ几个例子展示了如何进行转换(不包括两端的引号)。::h]hI几个例子展示了如何进行转换(不包括两端的引号)。:}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj1hhubj)}(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"}hjzsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhKhj1hhubh)}(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&]uh1hhhhKhj1hhubh 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)}(hjh]ho - ESCAPE_OCTAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h p - ESCAPE_NPh]h)}(hj,h]h p - ESCAPE_NP}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hs - ESCAPE_SPACE h]h)}(hs - ESCAPE_SPACEh]hs - ESCAPE_SPACE}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjAubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj1hhubh)}(h)默认情况下,使用 ESCAPE_ANY_NP。h]h)默认情况下,使用 ESCAPE_ANY_NP。}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj1hhubh)}(hMESCAPE_ANY_NP是许多情况下的明智选择,特别是对于打印SSID。h]hMESCAPE_ANY_NP是许多情况下的明智选择,特别是对于打印SSID。}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj1hhubh)}(h=如果字段宽度被省略,那么将只转义1个字节。h]h=如果字段宽度被省略,那么将只转义1个字节。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj1hhubeh}(h]id9ah ]h"]!原始缓冲区为转义字符串ah$]h&]uh1jfhjzhhhhhKubjg)}(hhh](jl)}(h'原始缓冲区为十六进制字符串h]h'原始缓冲区为十六进制字符串}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhMubj)}(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+uh1jhhhM 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&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(hMAC/FDDI地址h]hMAC/FDDI地址}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhMubj)}(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+uh1jhhhMhjhhubh)}(h用于打印以十六进制表示的6字节MAC/FDDI地址。 ``M`` 和 ``m`` 占位符导致打印的 地址有(M)或没有(m)字节分隔符。默认的字节分隔符是冒号(:)。h](h=用于打印以十六进制表示的6字节MAC/FDDI地址。 }(hjhhhNhNubj)}(h``M``h]hM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h``m``h]hm}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhq 占位符导致打印的 地址有(M)或没有(m)字节分隔符。默认的字节分隔符是冒号(:)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h对于FDDI地址,可以在 ``M`` 占位符之后使用 ``F`` 说明,以使用破折号(——)分隔符 代替默认的分隔符。h](h对于FDDI地址,可以在 }(hjFhhhNhNubj)}(h``M``h]hM}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh 占位符之后使用 }(hjFhhhNhNubj)}(h``F``h]hF}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubhI 说明,以使用破折号(——)分隔符 代替默认的分隔符。}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM!hjhhubh)}(h对于蓝牙地址, ``R`` 占位符应使用在 ``M`` 占位符之后,以使用反转的字节顺序,适 合于以小尾端顺序的蓝牙地址的肉眼可见的解析。h](h对于蓝牙地址, }(hjxhhhNhNubj)}(h``R``h]hR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh 占位符应使用在 }(hjxhhhNhNubj)}(h``M``h]hM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubhz 占位符之后,以使用反转的字节顺序,适 合于以小尾端顺序的蓝牙地址的肉眼可见的解析。}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM$hjhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM'hjhhubeh}(h]mac-fddiah ]h"]mac/fddi地址ah$]h&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(h IPv4地址h]h IPv4地址}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhM*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+uh1jhhhM.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}(hjhhhNhNubah}(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}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 和 }(hj hhhNhNubj)}(h``l``h]hl}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 占位符分别用于指定主机、网络、大 尾端或小尾端地址。如果没有提供占位符,则使用默认的网络/大尾端顺序。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM5hjhhubh)}(h通过引用传递。h]h通过引用传递。}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hjhhubeh}(h]ipv4ah ]h"] ipv4地址ah$]h&]uh1jfhjzhhhhhM*ubjg)}(hhh](jl)}(h IPv6 地址h]h IPv6 地址}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj} 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+uh1jhhhM?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 uh1jhj 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&]uh1jfhjzhhhhhM;ubjg)}(hhh](jl)}(h4IPv4/IPv6地址(generic, with port, flowinfo, scope)h]h4IPv4/IPv6地址(generic, with port, flowinfo, scope)}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj) 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]}hj: sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMPhj) hhubh)}(h用于打印一个IP地址,不需要区分它的类型是AF_INET还是AF_INET6。一个指向有效结构 体sockaddr的指针,通过 ``IS`` 或 ``IS`` 指定,可以传递给这个格式占位符。h](h用于打印一个IP地址,不需要区分它的类型是AF_INET还是AF_INET6。一个指向有效结构 体sockaddr的指针,通过 }(hjH hhhNhNubj)}(h``IS``h]hIS}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh 或 }(hjH hhhNhNubj)}(h``IS``h]hIS}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh1 指定,可以传递给这个格式占位符。}(hjH hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMVhj) hhubh)}(h附加的 ``p`` 、 ``f`` 和 ``s`` 占位符用于指定port(IPv4, IPv6)、 flowinfo (IPv6)和sope(IPv6)。port有一个 ``:`` 前缀,flowinfo是 ``/`` 和 范围是 ``%`` ,每个后面都跟着实际的值。h](h 附加的 }(hjz hhhNhNubj)}(h``p``h]hp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubh 、 }(hjz hhhNhNubj)}(h``f``h]hf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubh 和 }(hjz hhhNhNubj)}(h``s``h]hs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubhW 占位符用于指定port(IPv4, IPv6)、 flowinfo (IPv6)和sope(IPv6)。port有一个 }(hjz hhhNhNubj)}(h``:``h]h:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubh 前缀,flowinfo是 }(hjz hhhNhNubj)}(h``/``h]h/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubh 和 范围是 }(hjz hhhNhNubj)}(h``%``h]h%}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubh( ,每个后面都跟着实际的值。}(hjz 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 uh1jhj ubh 描述的压缩IPv6地址。 如https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07 所建议的,IPv6地址由’[’,’]’包围,以防止出现额外的占位符 }(hj hhhNhNubj)}(h``p``h]hp}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh , }(hj hhhNhNubj)}(h``f``h]hf}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 或 }(hj hhhNhNubj)}(h``s``h]hs}(hjE 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地址,也可以使用额外的 }(hj] hhhNhNubj)}(h``h``h]hh}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh , }(hj] hhhNhNubj)}(h``n``h]hn}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh , }hj] sbj)}(h``b``h]hb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh 和 }(hj] hhhNhNubj)}(h``l``h]hl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh- 说 明符,但对于IPv6地址则忽略。}(hj] 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+uh1jhhhMihj) hhubeh}(h]*ipv4-ipv6-generic-with-port-flowinfo-scopeah ]h"]4ipv4/ipv6地址(generic, with port, flowinfo, scope)ah$]h&]uh1jfhjzhhhhhMLubjg)}(hhh](jl)}(hUUID/GUID地址h]hUUID/GUID地址}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj 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+uh1jhhhMrhj 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh , }hj sbj)}(h``b``h]hb}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 和 }(hj hhhNhNubj)}(h``B``h]hB}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 占位符用 于指定小写(l)或大写(L)十六进制表示法中的小尾端顺序,以及小写(b)或大写(B)十六进制表 示法中的大尾端顺序。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMwhj hhubh)}(hl如果没有使用额外的占位符,则将打印带有小写十六进制表示法的默认大端顺序。h]hl如果没有使用额外的占位符,则将打印带有小写十六进制表示法的默认大端顺序。}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM{hj hhubh)}(h通过引用传递。h]h通过引用传递。}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM}hj hhubeh}(h] uuid-guidah ]h"]uuid/guid地址ah$]h&]uh1jfhjzhhhhhMnubjg)}(hhh](jl)}(h目录项(dentry)的名称h]h目录项(dentry)的名称}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj~ 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+uh1jhhhMhj~ 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&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(h!块设备(block_device)名称h]h!块设备(block_device)名称}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj hhhhhMubj)}(h%pg sda, sda1 or loop0p1h]h%pg sda, sda1 or loop0p1}hj sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhj 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&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(hva_format结构体h]hva_format结构体}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj+ hhhhhMubj)}(h%pVh]h%pV}hj< sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhj+ hhubh)}(hY用于打印结构体va_format。这些结构包含一个格式字符串 和va_list如下h]hY用于打印结构体va_format。这些结构包含一个格式字符串 和va_list如下}(hjJ 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; };}hjX sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhj+ hhubh)}(h实现 "递归vsnprintf"。h]h实现 “递归vsnprintf”。}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj+ hhubh)}(hm如果没有一些机制来验证格式字符串和va_list参数的正确性,请不要使用这个功能。h]hm如果没有一些机制来验证格式字符串和va_list参数的正确性,请不要使用这个功能。}(hjt 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&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(h设备树节点h]h设备树节点}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj hhhhhMubj)}(h %pOF[fnpPcCF]h]h %pOF[fnpPcCF]}hj sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhj 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)}(hj h]hp - 设备节点句柄}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h,P - 设备节点路径规范(名称+@单位)h]h)}(hjh]h,P - 设备节点路径规范(名称+@单位)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(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)}(hjAh]hc - 主要兼容字符串}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj?ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hC - 全兼容字符串 h]h)}(hC - 全兼容字符串h]hC - 全兼容字符串}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjVubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubh)}(h-当使用多个参数时,分隔符是':'。h]h1当使用多个参数时,分隔符是’:’。}(hjzhhhNhNubah}(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+uh1jhhhMhj hhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]id11ah ]h"]设备树节点ah$]h&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(hFwnode handlesh]hFwnode handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhMubj)}(h%pfw[fP]h]h%pfw[fP]}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhjhhubh)}(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 - 节点名称,包括地址(如果有的话)。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhjubah}(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}hj7sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhjhhubh)}(h 例如 (OF)h]h 例如 (OF)}(hjEhhhNhNubah}(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}hjSsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhjhhubeh}(h]fwnode-handlesah ]h"]fwnode handlesah$]h&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(h时间和日期h]h时间和日期}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjihhhhhMubj)}(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]}hjzsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhjihhubh)}(h用于打印日期和时间::h]h用于打印日期和时间:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjihhubj)}(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+uh1jhhhMhjihhubh)}(h'以我们(人类)可读的格式。h]h'以我们(人类)可读的格式。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjihhubh)}(h{默认情况下,年将以1900为单位递增,月将以1为单位递增。 使用%pt[RT]r (raw) 来抑制这种行为。h]h{默认情况下,年将以1900为单位递增,月将以1为单位递增。 使用%pt[RT]r (raw) 来抑制这种行为。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjihhubh)}(h%pt[RT]s(空格)将覆盖ISO 8601的分隔符,在日期和时间之间使用''(空格)而 不是'T'(大写T)。当日期或时间被省略时,它不会有任何影响。h]h%pt[RT]s(空格)将覆盖ISO 8601的分隔符,在日期和时间之间使用’’(空格)而 不是’T’(大写T)。当日期或时间被省略时,它不会有任何影响。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjihhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjihhubeh}(h]id12ah ]h"]时间和日期ah$]h&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(h clk结构体h]h clk结构体}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhM ubj)}(h%pC pll1 %pCn pll1h]h%pC pll1 %pCn pll1}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhM hjhhubh)}(h用于打印clk结构。%pC 和 %pCn 打印时钟的名称(通用时钟框架)或唯一的32位 ID(传统时钟框架)。h]h用于打印clk结构。%pC 和 %pCn 打印时钟的名称(通用时钟框架)或唯一的32位 ID(传统时钟框架)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]clkah ]h"] clk结构体ah$]h&]uh1jfhjzhhhhhM ubjg)}(hhh](jl)}(h-位图及其衍生物,如cpumask和nodemaskh]h-位图及其衍生物,如cpumask和nodemask}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj'hhhhhMubj)}(h%*pb 0779 %*pbl 0,3-6,8-10h]h%*pb 0779 %*pbl 0,3-6,8-10}hj8sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMhj'hhubh)}(h对于打印位图(bitmap)及其派生的cpumask和nodemask,%*pb输出以字段宽度为位数的位图, %*pbl输出以字段宽度为位数的范围列表。h]h对于打印位图(bitmap)及其派生的cpumask和nodemask,%*pb输出以字段宽度为位数的位图, %*pbl输出以字段宽度为位数的范围列表。}(hjFhhhNhNubah}(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。}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj'hhubeh}(h]cpumasknodemaskah ]h"]-位图及其衍生物,如cpumask和nodemaskah$]h&]uh1jfhjzhhhhhMubjg)}(hhh](jl)}(h*标志位字段,如页标志、gfp_flagsh]h*标志位字段,如页标志、gfp_flags}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjjhhhhhM$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}hj{sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhM(hjjhhubh)}(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,hjjahhubh)}(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&]uh1hhhhM0hjjhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM3hjjhhubeh}(h] gfp-flagsah ]h"]*标志位字段,如页标志、gfp_flagsah$]h&]uh1jfhjzhhhhhM$ubjg)}(hhh](jl)}(h网络设备特性h]h网络设备特性}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhM6ubj)}(h%pNF 0x000000000000c000h]h%pNF 0x000000000000c000}hjsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhM:hjhhubh)}(h 用于打印netdev_features_t。h]h 用于打印netdev_features_t。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM<hjhhubh)}(h通过引用传递。h]h通过引用传递。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM>hjhhubeh}(h]id13ah ]h"]网络设备特性ah$]h&]uh1jfhjzhhhhhM6ubjg)}(hhh](jl)}(h%V4L2和DRM FourCC代码(像素格式)h]h%V4L2和DRM FourCC代码(像素格式)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhj4hhhhhMAubj)}(h%p4cch]h%p4cc}hjEsbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMEhj4hhubh)}(hX打印V4L2或DRM使用的FourCC代码,包括格式端序及其十六进制的数值。h]hX打印V4L2或DRM使用的FourCC代码,包括格式端序及其十六进制的数值。}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMGhj4hhubh)}(h通过引用传递。h]h通过引用传递。}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMIhj4hhubh)}(h例如::h]h例如:}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMKhj4hhubj)}(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)}hj}sbah}(h]h ]h"]h$]h&]j*j+uh1jhhhMMhj4hhubeh}(h]v4l2drm-fourccah ]h"]%v4l2和drm fourcc代码(像素格式)ah$]h&]uh1jfhjzhhhhhMAubeh}(h]id2ah ]h"] 指针类型ah$]h&]uh1jfhjhhhhhhKCubjg)}(hhh](jl)}(h谢谢h]h谢谢}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhMRubh)}(hx如果您添加了其他%p扩展,请在可行的情况下,用一个或多个测试用例扩展。h]hx如果您添加了其他%p扩展,请在可行的情况下,用一个或多个测试用例扩展。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThjhhubh)}(h谢谢你的合作和关注。h]h谢谢你的合作和关注。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMVhjhhubeh}(h]id14ah ]h"]谢谢ah$]h&]uh1jfhjhhhhhhMRubeh}(h](printkjeeh ]h"](*如何获得正确的printk格式占位符cn_printk-formats.rsteh$]h&]uh1jfhhhhhhhKexpect_referenced_by_name}jjZsexpect_referenced_by_id}jejZsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jkN 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}je]jZasnameids}(jjejjjwjtjjj+j(j`j]jjjfjcjjjjjAj>jjjjj.j+jjjjjjjz jw j& j# j j j{ jx j j j( j% j j jjjfjcjjj$j!jgjdjjj1j.jjjju nametypes}(jjjwjj+j`jjfjjjAjjj.jjjjz j& j j{ j j( j jjfjj$jgjj1jjuh}(jejhjjhjtj jjzj(jj]j.jjcjcjjjijjj>jjjDjjj+jjj1jjjjjw jj# j} j j) jx j j j~ j% j j j+ jj jcjjjij!jjdj'jjjj.jjj4jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h;Hyperlink target "cn-printk-formats-rst" is not referenced.}hjjsbah}(h]h ]h"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&]levelKtypeINFOsourceh،lineKuh1jeuba transformerN include_log]