strerror
内核中当前是否有类似的功能?我一直找不到,所以我的想法是没有,但更重要的是,他们有没有讨论过这个?我认为它可以减少故障排除时间,因为您不必查找错误代码(不是每个人都记住的)并且可能使系统管理员和普通日常用户的事情变得更容易(通过dmesg
)。
在邮寄 LKML 之前,我想在这里问一下。我的想法是双重机制,一种用于错误名称(例如,EINVAL
),另一种用于描述。此外,%m
glibc 扩展可以添加到 printk,除了它必须读取错误代码,因为 glibc 扩展读取errno
. 也许%m
可以打印错误名称,同时%M
可以打印错误描述?
无论如何,如果添加它,它应该是一个 .config 选项,因为它会使文本大小膨胀。可以通过将错误名称(当前为 1 到 133)存储在单个字符串中来缩小大小,每个字符串之间有一个空终止符,并且只有一个慢速strerror
(强制遍历字符串并计算空终止符),因为这应该没关系。内部错误 512-529 必须位于单独的字符串中。然后,可以返回指向以 null 结尾的字符串的直接指针,而无需复制任何内容。根据我的计算,错误名称大约需要 1322 个字节,描述大约需要 3540 个字节(基于每个错误 #define 之后的评论中现在的内容,并为当前缺少的错误添加“无描述”)。
然后,当配置禁用时, printk%m
可以被解释为%d
并且%M
可以只打印任何内容(或一些类似的内容)。