2013-05-07 18 views
7

Есть ли в ядре strerror-подобная функциональность? Я не смог найти его, поэтому моя мысль - нет, но что еще важнее, есть ли какие-либо дискуссии об этом? Я бы подумал, что это может сократить время устранения неполадок, так как вам не придется искать коды ошибок (которые не все запомнили) и, возможно, упростить работу системных администраторов и обычных пользователей в течение дня (через dmesg).Уязвимость в ядре в ядре?

Я хотел спросить здесь, прежде чем отправлять LKML. Мои мысли касались двойного механизма, один для имени ошибки (например, EINVAL), а другой для описания. Кроме того, расширение glibc %m может быть добавлено в printk, за исключением того, что ему нужно будет прочитать код ошибки, так как расширение glibc читает errno. Возможно, %m может печатать имя ошибки, а %M может печатать описание ошибки?

В любом случае, если он добавлен, это должен быть параметр .config, так как он раздувает размер текста. Размер может быть сокращен путем простого хранения имен ошибок (от 1 до 133 в настоящее время) в одной строке с нулевым терминатором между каждой строкой и только медленным strerror (принудительно для итерации по строке и подсчета нуль-терминаторов), поскольку скорость это не имеет значения. Внутренние ошибки 512-529 должны быть в отдельной строке. Затем может быть возвращен прямой указатель на строку с завершающим нулем, без необходимости копировать что-либо. По моим расчетам, это займет примерно 1322 байта для имен ошибок и 3540 байт для описаний (на основе того, что теперь содержится в комментариях после #define каждой ошибки и добавления «без описания» для тех, которые в настоящее время отсутствуют).

Тогда, когда config-disabled, printk %m можно просто интерпретировать как %d и %M может просто ничего не печатать (или некоторые такие).

+2

Попробуйте 'man strace'. Если вас интересует фактический код ошибки, у вас есть альтернативные способы отображения его из пользовательского пространства. Иногда ожидаются ошибки, такие как «stat» и т. Д. Ядро может предоставлять более подробную информацию об ошибке вне контекста «errno». Это то, из чего изготовлен 'dmesg'. –

+0

@ бесшумный шум спасибо за ваш комментарий и извините за поздний ответ. Я не играл с «strace» в течение долгого времени, и я забыл, насколько он полезен, спасибо! Тем не менее, я в основном думаю о том, когда вы выводите код ошибки в printk. Я думаю, что я что-то собираю и предлагаю его lkml, но после того, как я закончил свой текущий проект. –

+0

Хмм, я забыл об этом, и с тех пор я написал этот патч. Я должен был использовать '% de', так как использование% m нарушило gcc's printf предупреждения. :(Думаю, я должен пойти дальше и представить это. Единственное, чего сейчас не хватает, это то, что он не разбирает несколько вещей в одной арке (я думаю, pa-risc, я забыл сейчас). –

ответ

3

Нет, нет. Но вы можете увидеть список кодов ошибок в include/asm-generic/errno.h и в include/asm-generic/errno-base.h. Их не так много (менее 200), поэтому их освоение не так сложно.