4

Существует опция загрузки ядра Linux для включения системной консоли:console= , например, console=ttyS0,115200 или console=ttyS0,115200n8 http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re01.html

После передачи этой опции ядро Linux напечатает все (или некоторые) сообщения ядра на консоль, что полезно для отладки.

Есть ли способ изменить системную консоль в Linux во время выполнения, без перезагрузки (с некоторыми специальными файловыми системами sysctls/ioctls/ или в /proc или /sys )?

Первый случай: у меня не было опции console= в текущей загрузке (проверено в /proc /cmdline), и я хочу включить dmesg для печати на /dev /ttyS0 последовательный порт для отладки ситуации.

Второй случай: у меня были неправильные настройки в моей console=ttyS0,9600 и я хочу изменить скорость без перезагрузки (удалить старую настройку консоли, добавить новую консоль с хорошими настройками 115200 или просто изменить скорость).

(Где анализируется опция console= , где хранятся текущие настройки в /sys или /proc ?)

1 ответ1

0

Не полная реальная аппаратная консоль добавлена во время выполнения, но что-то лучше для некоторых случаев: встречайте "netconsole". Это эмуляция консоли ядра через udp в сетях Ethernet, односторонняя, только для сбора логов ядра. Больше не нужно использовать адаптеры usb-uart, нуль-модемные кабели или переоцененные устройства "консольный сервер" com-over-ethernet. И больше не нужно передавать (вы можете использовать классическую консоль ядра для отправки волшебного SysRq, но не с netconsole).

Документация: https://www.kernel.org/doc/Documentation/networking/netconsole.txt

Примеры:

Netconsole должна быть включена (или построена как модуль) в конфигурации ядра для работы. (Иногда может быть возможно собрать модуль netconsole для запуска ядра и установить его в linux без перезагрузки).

Чтобы включить с помощью командной строки Linux (с перезагрузкой), добавьте:

netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]

Необходимо указать все: исходный порт udp, исходный адрес ipv4, имя сетевого интерфейса, например, "eth0" (будет ли оно работать с переименованием udev eth0 во что-то, связанное с позицией?), Целевой порт udp и ipv4, а также целевой macaddress в формате из шести байтов 00: 13: 32: 20: r9: a5.

Получатель - это nc -u -l $tgt_port .

Пример конфигурации среды выполнения из вики Arch - https://wiki.archlinux.org/index.php/Netconsole

# set log level for kernel messages
dmesg -n 8

modprobe configfs
modprobe netconsole
mount none -t configfs /sys/kernel/config

# 'netconsole' dir is auto created if the module is loaded 
mkdir /sys/kernel/config/netconsole/target1
cd /sys/kernel/config/netconsole/target1

# set local IP address
echo 192.168.0.111 > local_ip
# set destination IP address
echo 192.168.0.17 > remote_ip
# set local network device name (find it trough ifconfig, examples: eth0, eno1, wlan0)
echo eno1 > dev_name
# find destination MAC address
arping -I $(cat dev_name) $(cat remote_ip) -f | grep -o ..:..:..:..:..:.. > remote_mac

echo 1 > enabled

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .