1
我試圖簡單地從內核模塊讀取內核環形緩衝區。也稱爲/ proc/kmsg和dmesg輸出。從內核模塊讀取dmesg
從四處看來,它的調用似乎是sys_syslog();從我讀過的內容來看,dmesg使用syslog(),它使用駐留在printk.c中的do_syslog()。
我在grep中看到do_syslog()是在linux/syslog.h中定義的,所以我包含了這個文件。
實際調用do_syslog()的測試模塊中看起來是這樣的:
read_bytes = do_syslog(2, temp_buffer, 1024, 0);
哪裏temp_buffer只是一個char temp_buffer [1024]意味着用於測試目的。
程序編譯,但是當我嘗試加載失敗的模塊:
insmod的:錯誤插入「testing.ko」:-1模塊未知符號
從dmesg的我看到:「未知符號do_syslog(err 0)「
爲什麼這是一個未知符號?我需要鏈接什麼?
生成文件如下:
obj-m += testing.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
謝謝!是否有可能做到這一點,而不必重新編譯內核?當然,必須有一些標準功能來處理所有普通內核中存在的問題。順便提一句,我也得到了sys_read()和sys_open()的未知符號。 – csstudent2233 2012-08-03 09:50:38
@ csstudent2233:如果符號未被導出(如果您不計算'/ dev/kmem'),則不可能。不過,應該已經導出sys_read和sys_open了。 – InternetSeriousBusiness 2012-10-05 16:27:16