Вопрос или проблема
Я пытаюсь понять связь между хостом и устройством SATA, и для этого я добавил много отладочных сообщений в код драйвера ядра. Теперь сообщений так много, что я не могу увидеть начальные сообщения о перечислении устройств в журнале dmesg. Для этого я изменил конфигурационную переменную CONFIG_LOG_BUF_SHIFT(=21), чтобы увеличить размер кольцевого буфера, из которого dmesg берет сообщения, но все равно сталкиваюсь с той же проблемой.
Есть ли какой-либо способ, который позволит мне записывать все dmesg из загрузки ядра в конкретный файл?
Спасибо за помощь заранее.
Вы можете использовать:
cat /var/log/dmesg > file.txt
и использовать:
head /var/log/dmesg
если хотите увидеть первые строки dmesg.
Смотрите также ‘man head’ для получения дополнительных спецификаций. Символ ‘>’ перенаправляет вывод ‘cat’ в ‘file.txt’
Существует команда dmesg
, которая выведет логи в stdout. Вы можете просто перенаправить stdout в текстовый файл.
dmesg > /path/to/dmesg.txt
Вы можете расширить это. Действительно полезный вариант — добавить строку в ваш файл ~/.profile
(в вашей домашней директории), которая будет дополнять вывод dmesg при входе в систему. Просто добавьте строку:
dmesg >> /path/to/dmesg.txt
Если вы просто хотите увидеть первые несколько строк (0.000000 сообщений), вы можете передать это в head
вот так.
С stdout:
dmesg | head
или с head
по уже сохраненному .txt файлу.
head /path/to/dmesg.txt
Вот и все, надеюсь, это поможет!
ИЗМЕНЕНИЕ: Кстати, это действительно содержит 0.000000 сообщений
Ответ или решение
Для решения вашей задачи по извлечению полных сообщений ядра (dmesg) в текстовый файл прямо с момента загрузки системы, существует несколько методов. Это поможет вам получить нужные вам отладочные сообщения, включая ранние сообщения об инициализации устройства, которые могут не быть доступны из-за ограниченного размера кольцевого буфера.
Способы сохранения dmesg в текстовый файл
1. Использование команды dmesg
Вы можете использовать команду dmesg
, которая выводит сообщения ядра в стандартный вывод (stdout). Для записи этих сообщений в текстовый файл, воспользуйтесь перенаправлением:
dmesg > /путь/к/файлу/dmesg.txt
Этот способ позволяет быстро сохранить текущие сообщения ядра в файл dmesg.txt
. Если вы хотите добавить новые сообщения в уже существующий файл, вы можете использовать оператор >>
вместо >
:
dmesg >> /путь/к/файлу/dmesg.txt
2. Запись в файл во время загрузки системы
Если вам необходимо автоматически сохранять логи ядра при каждом запуске системы, вы можете настроить это через систему инициализации, например, используя systemd
.
Создайте единичный файл сервиса для этой задачи:
sudo nano /etc/systemd/system/dmesg.service
Добавьте следующий код:
[Unit]
Description=Save dmesg logs
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'dmesg > /путь/к/файлу/dmesg.txt'
[Install]
WantedBy=multi-user.target
Сохраните файл и активируйте его:
sudo systemctl enable dmesg.service
Теперь при каждой загрузке системы будет создаваться новый лог dmesg.
3. Использование логов системного журнала (journalctl)
Если ваша система использует systemd, вы можете воспользоваться утилитой journalctl
для извлечения сообщений ядра. Для этого выполните следующую команду:
journalctl -k > /путь/к/файлу/dmesg.txt
Эта команда сохраняет все сообщения ядра, записанные в журнал системы, в указанный файл.
Дополнительные рекомендации
-
Увеличение размера кольцевого буфера: Если вы уже изменили значение
CONFIG_LOG_BUF_SHIFT
, чтобы увеличить размер буфера, убедитесь, что изменения сохранены и загружаются при следующем перезапуске системы. -
Вывод ранних сообщений: Чтобы просмотреть самые ранние сообщения, вы можете использовать
head
вместе сdmesg
:
dmesg | head
Эта команда покажет вам первые 10 сообщений, что может помочь определить, были ли загружены нужные вам данные.
Заключение
Эти методы позволят вам эффективно сохранять и анализировать логи ядра в текстовом формате. Выбор подходящего метода зависит от ваших требований к аудитам и регистрации сообщений. Правильная организация логов поможет вам легче анализировать поведение драйверов и проблемы с устройствами, особенно если вы активно разрабатываете и тестируете код драйверов.