1. 程式人生 > >linux初學核心之列印訊息

linux初學核心之列印訊息

  核心版本:Linux version 3.0.15(cat /proc/version)

  剛開始接觸程式設計,從第一句打印出hello world一直用的是printf,直到接觸linux核心,這一使用方法開始改變!

  printk()和printf()之間的一個顯著區別在於printk()允許通過指定一個標誌來設定優先順序。syslog會根據這個優先順序標 志來決定在什麼地方顯示這條系統資訊

對於linux核心的列印訊息,kennel定義了8個優先順序

code: /include/linux

#define KERN_EMERG	"<0>"	/* system is unusable			*/
#define KERN_ALERT	"<1>"	/* action must be taken immediately	*/
#define KERN_CRIT	"<2>"	/* critical conditions			*/
#define KERN_ERR	"<3>"	/* error conditions			*/
#define KERN_WARNING	"<4>"	/* warning conditions			*/
#define KERN_NOTICE	"<5>"	/* normal but significant condition	*/
#define KERN_INFO	"<6>"	/* informational			*/
#define KERN_DEBUG	"<7>"	/* debug-level messages			*/
其中

KERN_EMERG         :    最高級別,一般只用來列印崩潰資訊

KERN_ALERT         :    需要立即處理的資訊

KERN_CRIT          :    關鍵資訊,一般用來顯示嚴重的硬體和軟體錯誤

KERN_ERR           :    用來顯示硬體錯誤

KERN_WARNING       :    顯示不會造成嚴重錯誤的警告資訊

KERN_NOTICE        :    顯示需要引起注意的資訊

KERN_INFO          :  顯示一般資訊,例如驅動所發現的硬體列表

KERN_DEBUG    :  用來顯示除錯資訊

kernel在編譯之前會先指定當前資訊列印優先等級如定義為4 ,那麼

#define KERN_NOTICE	"<5>"	/* normal but significant condition	*/
#define KERN_INFO	"<6>"	/* informational			*/
#define KERN_DEBUG	"<7>"	/* debug-level messages			*/

擁有這幾個優先等級的列印訊息都不會被打印出來

另外若在使用printk列印訊息時未指定列印訊息優先順序時,則為預設的優先等級,這個優先等級可設

code: /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 */
};

DEFAULT_CONSOLE_LOGLEVEL 指定了整體預設的列印訊息優先等級

DEFAULT_MESSAGE_LOGLEVEL printk在使用時未指定優先等級時採用的預設優先順序

令也可以實時的改變其優先順序

cat /proc/sys/kernel/printk//檢視列印訊息優先順序

[email protected]:/proc/sys/kernel # cat printk
4       4       1       4

echo 8 8 > /proc/sys/kernel/printk//實時更改優先順序

[email protected]:/proc/sys/kernel # echo 8 8 > printk                              
[email protected]:/proc/sys/kernel # cat printk
8       8       1       4
[email protected]:/proc/sys/kernel # 

相關推薦

linux初學核心列印訊息

  核心版本:Linux version 3.0.15(cat /proc/version)   剛開始接觸程式設計,從第一句打印出hello world一直用的是printf,直到接觸linux核心,這一使用方法開始改變!   printk()和printf()之間的一個

Linux核心解析DTS裝置樹檔案並建立裝置的過程

核心之解析DTS裝置樹檔案並建立裝置的過程 在這裡,我分析的是核心原始碼來自谷歌官方Android7.1.2原始碼包經過打補丁包"SC60_Android7.1.2_Quectel_SDK_r270060_20180731.tar.gz"後得到的. 本文分析時使用的

初學C列印菱形

使用C語言輸出一個菱形圖,初次學習C語言,記錄之,程式碼如下: /* ============================================================================ Name : Normal1.c

linux網路程式設計POSIX訊息佇列

POSIX IPC名字限定: 必須以/打頭,並且後續不能有其它/ ,形如/somename 長度不能超過NAME_MAX 通過下面的命令將訊息佇列掛載到/dev/mqueue下,可通過cat/dev/mqueue/name檢視訊息佇列狀態 mount -t mqueue

Linux初學實戰重定向標準 I/O 流

Linux shell 使用 3 種標準的 I/O 流,每種流都與一個檔案描述符相關聯:1,stdout 是標準輸出流,它顯示來自命令的輸出。它的檔案描述符為 1。2,stderr 是標準錯誤流,它

linux網路程式設計POSIX 訊息佇列 和 系列函式

#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include<sys/msg.h>#include<sys/types.h>#include<unistd.h>#includ

Linux核心vmlinux與vmlinuz

因為是初次系統的學習Linux核心,過程中遇到了一些常常出現的名詞。似曾相識,但對他們的含義又不是非常清楚。因此,將搜尋到的內容進行一下彙總。 1.vmlinux   vmlinux是一個包括linux kernel的靜態連結的可執行檔案。檔案型別是l

linux核心class介紹(三)

前兩節介紹了class,device結構體的成員,在這一節主要介紹class和device的關鍵函式. 1.classes_init() 系統呼叫路徑: start_kernel()->>rest_init()->>kernel_init()->>do_b

linux核心class介紹(二)

在最底層,在linux系統裡每個裝置由一個device結構體表示.device結構體包含了裝置模型核心需要的資訊 大部分subsystem,還會增加額外的資訊.因此很少單獨由一個device表示一個裝置;而是像kobject一樣嵌入到 一個更大的結構體來表示一個裝置. device結構體定義

linux核心class介紹(一)

class的概念 class是裝置的更高層檢視,抽象出了底層的實現細節.驅動程式會區分SCSI硬碟和ATA硬碟,但在class層他們都是 硬碟.classes幫助使用者空間只需要知道這些是什麼裝置,而不需要關心他們是怎麼連線和工作的.(A class is a higher-level vi

linux核心klist連結串列

klist介面提供了兩個封裝了list_head的結構體,連結串列頭klist和連結串列節點klist_node 對於結構體klist包含一個spinlock來提供訪問保護.klist_node包含一個klist指標指向 歸屬的klist和kref引用計數器指示該節點的引用次數. 連結串列頭

Linux初學】系統分割槽分割槽與格式化

前言:該部落格主要為慕課網上一節課的筆記 系統分割槽之分割槽與格式化 在此感謝老師通俗易懂的講解 前幾天我在鬧電腦時也遇到了關於分割槽的問題:主分割槽與邏輯分割槽的區別,在此篇部落格都記錄了下來。 1.分割槽的概念  首先,什麼是分割槽?分割槽其實就是我們的硬碟需要分成

linux核心spin lock

轉自:http://www.wowotech.net/kernel_synchronization/spinlock.html 一、前言 在linux kernel的實現中,經常會遇到這樣的場景:共享資料被中斷上下文和程序上下文訪問,該如何保護呢?如果只有程序上下文的訪問,那麼可以考慮使用s

Linux初學Shell script

遍歷目錄: for file in `ls /etc`; do echo "${file}" done file:變數 `ls /etc` 等效於 $(ls /etc) echo :輸

linux 核心completion

    如果核心中一個任務需要發出訊號通知另外一個任務發生了某個特定事件,使用完成量completion是兩個任得以同步的最簡單方法。當任務1需要執行某些工作時,需要等待任務2完成特定操作才能繼續執行,那麼任務1就會阻塞等待,當任務2的特定操作執行完成之後,通過complet

Linux裝置驅動3.4.2核心下的I2C驅動

框架 1.1 硬體協議簡介 1.2 驅動框架 1.3 bus-drv-dev模型及寫程式 a. 裝置的4種構建方法 詳情參照:linux-3.4.2\Documentation\i2c:instantiating-devices: 以下摘取部分

linux核心USB驅動分析

第一部分  USB驅動程式框架   app:   -------------------------------------------   USB裝置驅動程式    // 知道資料含義  核心 --------------------------------------   USB匯流

Linux核心GDB基本除錯方法

Oops[#1]:Cpu 0$ 0   : 00000000 10008d00 00000000 ffffffea$ 4   : fffffdfd 10008d01 00000001 00000000$ 8   : 00000000 7fed2e40 00001cb2 00000b3b$12   : 0003

Linux程序管理核心執行緒

    核心原始碼:linux-2.6.38.8.tar.bz2     目標平臺:ARM體系結構     在Linux系統中,程序和執行緒都使用task_struct結構體來表示,執行緒只不過是一種特殊(所謂的特殊也不過是在被建立時使用不同的clone標誌組合而已)的

Linux核心禁止中斷和禁止核心搶佔

禁止中斷指的是Linux核心停工了一組介面用於操作機器上的中斷狀態。這些介面為我們提供了能夠禁止當前處理器的中斷系統,或者遮蔽掉整個機器的一條中斷線的能力。通過禁止中斷,可以確保某個中斷處理程式不會搶佔當前的程式碼。控制中斷系統在Linux的實現有很多,以local_irq