Ⅰ 如何設置內核列印不列印到串口中 kern
以串口或者顯示器為控制台,SHELL起來後,正常情況下printk的打信息只有最列印高等級的會打到控制台;
OOPS處理函數中的printk會直接打到控制台上,記得處理函數中調用了console啥的函數,估計做了處理;
printk的信息都在日誌中,要是有遺漏,可以直接從printk的列印BUF中抓出來,前提是系統還沒重啟。
ksymoops這東東,在2.6下也不是那麼好用,我處理OOPS主要還是靠反匯編去跟蹤。
Ⅱ 如何修改內核列印級別
手動調整內核printk列印級別
有時調試內核模塊,列印信息太多了,可以通過修改/proc/sys/kernel/printk文件內容來控制。默認設置是6 4 1 7
# cat /proc/sys/kernel/printk
7 4 1 7
#
該文件有四個數字值,它們根據日誌記錄消息的重要性,定義將其發送到何處。關於不同日誌級別的更多信息,請查閱syslog(2)聯機幫助。上面顯示的4個數據分別對應:
控制台日誌級別:優先順序[s1] 高於該值的消息將被列印至控制台
默認的消息日誌級別:將用該優先順序來列印沒有優先順序的消息
最低的控制台日誌級別:控制台日誌級別可被設置的最小值(最高優先順序)
默認的控制台日誌級別:控制台日誌級別的預設值
[s1]數值越小,優先順序越高
其實這四個值是在kernel/printk.c 中被定義的,如下:
int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL, /* console_loglevel */
DEFAULT_MESSAGE_LOGLEVEL, /* default_message_loglevel */
MINIMUM_CONSOLE_LOGLEVEL, /* minimum_console_loglevel */
DEFAULT_CONSOLE_LOGLEVEL, /* default_console_loglevel */
};
內核通過printk() 輸出的信息具有日誌級別,日誌級別是通過在printk() 輸出的字元串前加一個帶尖括弧的整數來控制的,如printk("<6>Hello, world!\n");。內核中共提供了八種不同的日誌級別,在 linux/kernel.h 中有相應的宏對應。
#define KERN_EMERG "<0>" /* systemis unusable */
#define KERN_ALERT "<1>" /* actionmust be taken immediately */
#define KERN_CRIT "<2>" /*critical conditions */
#define KERN_ERR "<3>" /* errorconditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normalbut significant */
#define KERN_INFO "<6>" /*informational */
#define KERN_DEBUG "<7>" /*debug-level messages */
所以printk() 可以這樣用:printk(KERN_INFO"Hello, world!\n");。
未指定日誌級別的printk() 採用的默認級別是DEFAULT_MESSAGE_LOGLEVEL,這個宏在kernel/printk.c 中被定義為整數4,即對應KERN_WARNING。
/* printk's without a loglevel use this.. */
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
了解了上面的這些知識後,我們就應該知道如何手動控制printk列印了。例如,我想屏蔽掉所有的內核printk列印,那麼我只需要把第一個數值調到最小值1或者0。
# echo 1 4 1 7 > /proc/sys/kernel/printk
或者
# echo 0 4 0 7 > /proc/sys/kernel/printk
另外,/proc/sys/kernel/printk_ratelimit和/proc/sys/kernel/printk_ratelimit_burst也可以用來控制列印,具體有待研究。
Ⅲ 如何查看linux內核列印信息
##查看Linux系統全部信息
[root@moban ~]# uname -a
Linux moban 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
建議樓主系統性學習Linux的基礎知識,推薦《Linux就該這么學》這本書,裡面有很系統、很全面、很詳細的圖文介紹,對樓主全面了解Linux有很大的幫助的、
希望可以幫到您!
Ⅳ win10系統無法安裝列印機驅動怎麼辦
無法安裝EPSON LQ-1600K IVH ESC/P2,類型3-用戶模式,x64 驅動程序。試圖將驅動程序添加到存儲區時遇到問題。
下載最新的內核源代碼linux-2.6.33.1.tar.bz2,放在/liqiong/Linux內核 目錄下,liqiong是Linux OS的第一個用戶名。
2、進入Linux內核源碼所在的目錄(cd Linux內核),解壓該內核代碼到/usr/src下:
sudo tar -xjvf linux-2.6.33.1.tar.bz2 -C /usr/src
3、進入Linux內核源碼解壓後的目錄/usr/src/linux-2.6.33.1(cd /usr/src/linux-2.6.33.1)
4、sudo make mrproper 凈化解壓後的源代碼
5、sudo make menuconfig 對內核選項進行配置
在配置過程中會發生如下錯誤:
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] 錯誤 1
make: *** [menuconfig] 錯誤2
解決辦法:
(1)cd / 進入根目錄後,在終端輸入:sudo apt-get install ncurses
信息:
正在讀取軟體包列表... 完成
正在分析軟體包的依賴關系樹
正在讀取狀態信息... 完成
現在沒有可用的軟體包 ncurses,但是它被其它的軟體包引用了。
這可能意味著這個缺失的軟體包可能已被廢棄,
或者只能在其他發布源中找到
E: 軟體包 ncurses 還沒有可供安裝的候選者
(2)然後接著在終端輸入:sudo apt-get install libncurses*
(3)再cd /usr/src/linux-2.6.33.1進入內核所在目錄,再次輸入sudo make menuconfig就好了!
6、對於配置可選擇General Setup或者選擇其他的自定義選項保存後退出。
7、sudo make dep 建立模塊間的依賴信息
8、sudo make clean 刪除配置時留下的一些不用的文件
(7、8兩步可能對於一些PC沒有作用)
9、sudo make bzImage 編譯內核,內核較小時可以用make zImage
10、sudo make moles 編譯內核模塊
當然,在編譯內核時,可通過make-j<n>來加速內核的編譯,n一般等於CPU數量的兩倍。單核,n=2;雙核,n=4.即執行sudo make -j4就可以編譯了!
11、sudo make moles_install 安裝內核模塊
12、sudo make install 安裝內核
13、cd / 後在終端輸入:sudo mkinitramfs 2.6.33.1 -o /boot/initrd.img-2.6.33.1-generic
14、到此為止,構建內核完畢,第十二步把內核映象和System.map拷貝到/boot/下
#sudo cp /usr/src/linux-2.6.33.1/arch/i386/boot/bzImage /boot/vmlinuz-2.6.33.1-generic
#sudo cp System.map /boot/System.map-KERNEL_VERSION
#sudo ln -s /boot/System.map-KERNEL_VERSION /boot/System.map
15、
(1)修改grub配置文件
在終端輸入:sudo update-grub2,就會把剛才編譯的內核加入了Grub;(此時就可以重啟了,重啟後在Grub啟動項里多了Ubuntu, Linux 2.6.33.1-generic)
若還需修改(在Ubuntu10.04中沒有採用menu.lst,而是用的grub.cfg(/boot/grub/)),則修改grub.cfg就可以了,
在終端中輸入:sudo gedit /boot/grub/grub.cfg 用root賬戶進入grub.cfg並編輯
(或用sudo chmod +w /boot/grub/grub.cfg改變grub.cfg的許可權後在進行編輯)
如將Grub中的menuentry "Ubuntu, Linux 2.6.33.1-generic"{...}修改為menuentry "Ubuntu, Linux 2.6.33.1-liqiong"{...}(Linux 2.6.33.1-generic是我們剛才編譯的內核)
(2)修改default變數
在/boot/grub/grub.cfg中,設置set default="【某個數字】"(設置Grub啟動項里的默認啟動項)
在Grub啟動項里,從0數起,我的XP在第10項,所以set default="10",即XP就是默認的啟動項了。
最後重啟即可。
Ⅵ linux內核解壓
linux內核,顧名思意就是linux下的內核文件,你那個「/」是linux的根目錄,在windows下當然找不到了,而且是非法的。
tar和cat都是linux的命令,是linux Shell命令,其中tar是壓縮程序,在/bin裡面(忘了,大概吧),用於解包用得。
你的文件kernel-x.y.z.tar.bz2就是用TAR解包的。
linux光有內核是什麼都幹不了的,他是硬體和應用程序的介面,沒有任何應用軟體功能(就是不包含任何命令,linux裡面沒有像cmd或者command.com那樣的所謂的「內部命令」。比如拷貝命令,就是cp這個程序實現的。
如果你研究linux內核,可以去網上找linux的內核源碼,或者乾脆安裝一個linux系統
Ⅶ linux內核是解壓過程
假的過程的話按照正常的起呀
Ⅷ linux內核解壓
linux內核就是用c語言編的,精通c語言差不多看內核沒多大問題,再輔助點python或者perl,差不多就可以了。
Ⅸ linux 內核怎麼列印系統時間戳
在編譯Linux內核,配置時:make menuconfig ---> Kernel hacking --> show timing information on printks
當選中這個選項後,啟動內核,會在日誌信息前面加上時間戳。
從下面的輸出可以看出,時間精確到微秒(us)。
如下:
-------------------------------------------------------------------------------------------
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Linux version 2.6.35.7+ (bshen@bamboo) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #109 PREEMPT Mon Nov 14 15:11:15 CST 2011
[ 0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
--------------------------------------------------------------------------------------------
Ⅹ 怎麼讓linux內核列印完整的oops信息
我想問一下有什麼辦法可以得到完整的oops信息??不要跟我說在/var/目錄/proc/kmsg,這個命令不會馬上結束,直到你手動ctrl C為止,kmsg裡面就是