dmesg
menampilkan apa yang ada di buffer kernel, sedangkan logger
untuk syslogd
. Saya pikir jika Anda ingin mencetak hal-hal ke dalam buffer kernel Anda perlu membuat driver yang menggunakan printk()
fungsi kernel. Jika Anda hanya menginginkannya /var/log/messages
, maka dengan pengaturan "normal" saya pikir apa yang telah Anda lakukan logger
sudah baik-baik saja.
Contoh paling mendasar dari seorang pengemudi printk()
adalah:
hello.c:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world\n");
}
Makefile:
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Kemudian:
$ make
$ sudo insmod hello.ko
$ dmesg | tail -n1
[7089996.746366] Hello world
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121 untuk informasi lebih lanjut ...
make -C ...
di Makefile daripada Tab, jadi menyalin konten Makefile di atas tidak berfungsi - lebih lanjut di sini . Tampaknya saya tidak dapat menambahkan ini dalam edit ... Terima kasih, jawaban yang bagus.Anda dapat, sebagai root, menulis
/dev/kmsg
untuk mencetak ke buffer pesan kernel:Saya sudah menguji ini di server saya dan perangkat Linux yang disematkan, dan itu berfungsi pada keduanya, jadi saya hanya akan menganggap itu bekerja cukup banyak di mana-mana.
sumber
echo Some message | sudo tee /dev/kmesg
sebagai non-root.kmsg
tidakkmesg
tetapi saya juga bingung dengandmesg
yang memiliki e!Berdasarkan modul Kyle di atas:
Untuk melakukan printk dari ruang pengguna:
sumber
@ Jawaban Calandoa tidak lagi berfungsi untuk Kernel +3.10. Gabungan kodenya, dan contoh kode yang saya temukan di sini . Kemudian ditingkatkan pada kualitas kode ...
Kode disimpan ke printk_user.c
Buat menggunakan Makefile ini
sumber
Berdasarkan jawaban Kyle, berikut ini adalah tutorial singkat yang menunjukkan bagaimana melakukan hal itu.
sumber
Kupikir aku akan pergi ke depan dan memasukkan contoh lengkap dari sesuatu yang bisa dikompilasi dan dijalankan oleh orang-orang yang tidak begitu mahir dengan C berdasarkan dari jawaban @BuvinJ
Untuk menjalankan simpan di atas sebagai kmsg.c dan gcc kmsg.c -o kmsg; sudo ./kmsg "string yang ingin Anda tambahkan ke / dev / kmsg"
sumber
Saya hanya ingin beberapa pesan debug cepat dalam daemon yang ditulis oleh orang lain di kernel yang dipenuhi lintas. Saya mengalami kesalahan kompilasi yang mencoba digunakan
printk
, karena<linux/module.h>
tidak dapat dimasukkan. Alih-alih bertarung dengan hal itu secara berlebihan (untuk melakukan ini dengan cara yang benar), saya curang dan menggunakan solusi 5 menit yang malas, tetapi fungsional:sumber