Один из способов убедиться, что ядро не пропустит ни одного сообщения, - это отладить его в виртуальной машине.
Например, следующий сценарий использует qemu
для запуска виртуальной машины с пользовательским ядром:
qemu-system-x86_64\
-kernel arch/x86/boot/bzImage\
-drive file=/home/lgeorget/VM/image.qcow2,if=virtio\
-append "root=/dev/vda1"\
-netdev user,id=mynet0 -device e1000,netdev=mynet0\
-enable-kvm\
-S
Важным параметром здесь является -S
, который заставляет qemu запускать GDB-сервер и ждать готовности отладчика перед загрузкой.
В другой консоли перейдите в дерево разработки Linux, где вы скомпилировали ваше пользовательское ядро, и здесь запустите GDB с помощью gdb vmlinux
для загрузки символов ядра. Затем в приглашении введите:
target remote :1234
Это приведет к подключению к gdb-серверу, запущенному qemu (на localhost, порт 1234 по умолчанию). Затем вы можете использовать отладчик почти как для любой программы, устанавливать точки останова, продолжать выполнение командой continue
и т.д.
У вас должна быть возможность осмотра и дампа памяти, а также копирования журналов, если вы хотите их проанализировать. Обратите внимание, что это не увеличивает многословность ядра.
В Интернете есть много руководств, а также официальная документация.
https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu http://wiki.osdev.org/Kernel_Debugging http://elinux.org/Debugging_The_Linux_Kernel_Using_Gdb
Editar:Debe tener acpi
instalado en su máquina para que funcionen:)
Editar 2:Este código incrementa/disminuye los valores de brillo en 1, pero algunos modelos tendrán valores que varían en miles, así que modifique el cambio en consecuencia.
Esta es una vieja pregunta, pero una respuesta puede ayudar a otros. Tuve un problema con una nueva instalación de i3wm
en mi computadora portátil donde, por alguna razón, mis claves XF86MonBrightnessUp/Down
no estaban registradas (Verifiqué conxev
). Lo que terminé haciendo fue crear acpi
acciones y eventos que correspondían a las teclas que se presionaban.
Las siguientes son las acciones/eventos que definí en /etc/acpi/actions
y /etc/acpi/events
, respectivamente:
/etc/acpi/actions/bl -down.sh
#!/bin/sh
bl_device=/sys/class/backlight/acpi_video0/brightness
echo $(($(cat $bl_device)-1)) | sudo tee $bl_device
/etc/acpi/actions/bl -up.sh
#!/bin/sh
bl_device=/sys/class/backlight/acpi_video0/brightness
echo $(($(cat $bl_device)+1)) | sudo tee $bl_device
/etc/acpi/events/bl -abajo
event=video/brightnessdown BRTDN 00000087 00000000
action=/etc/acpi/actions/bl-down.sh
/etc/acpi/events/bl -hasta
event=video/brightnessup BRTUP 00000086 00000000
action=/etc/acpi/actions/bl-up.sh
Puede verificar sus códigos de evento acpi de aumento/disminución de brillo usando acpi_listen
en su terminal y luego presionando la combinación de teclas correspondiente (, por ejemplo, para mí, es Fn + Flecha hacia abajo para disminuir el brillo ).
Finalmente, no olvide reiniciar acpid
consudo /etc/init.d/acpid reload
Nota:Es posible que su dispositivo de retroiluminación esté definido en una ubicación diferente a /sys/class/backlight/acpi_video0
-, justo donde estaba el mío. Investiga un poco.
Я столкнулся с той же проблемой с arch на моем dell XPS. Установка пакета xf86-video-intel
исправила это.
Чтобы завершить отличный ответ от Try431, конфигурация действий, которая работала для моего Lenovo G580, была приведена ниже.
Примечание:
chmod +x
в файлы sh, чтобы их можно было выполнить bl_device
путь был другим /etc/acpi/actions/bl -down.sh
#!/bin/sh
bl_device=/sys/class/backlight/intel_backlight/brightness
echo $(($(cat $bl_device)-100)) | sudo tee $bl_device
/etc/acpi/events/bl -вверх
#!/bin/sh
bl_device=/sys/class/backlight/intel_backlight/brightness
echo $(($(cat $bl_device)+100)) | sudo tee $bl_device