container_of(inode->i_cdev,struct globalmem_dev,cdev);`
通過結構體成員的指標找到對應結構體指標。
引數1:結構體成員指標
引數2:結構體型別
引數3:引數1的型別
包含標頭檔案:
#include
函式原型:
asmlinkage __printf(1, 2) __cold int printk(const
char *fmt, ...);
通常用法:
#define aps_tag "[als/ps] "
#define aps_fun(f) printk(kern_info aps_tag"%s\n", __function__)
#define aps_err(fmt, args...) printk(kern_err aps_tag"%s %d : "fmt, __function__, __line__, ##args)
#define aps_log(fmt, args...) printk(kern_err aps_tag fmt, ##args)
#define aps_dbg(fmt, args...) printk(kern_info aps_tag fmt, ##args)
若未指定列印級別:
printk()則採用的預設級別是 default_message_logleve
在核心**include/linux/kernel.h中,定義了控制台的級別:
extern
int console_printk;
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
kernel/printk.c的console_printk的定義:
/* printk's without a loglevel use this.. */
#define default_message_loglevel 4 /* kern_warning */
/* we show everything that is more important than this.. */
#define minimum_console_loglevel 1 /* minimum loglevel we let people use */
#define default_console_loglevel 7 /* anything more serious than kern_debug */
declare_wait_queue_head(log_wait);
int console_printk[4] = ;
包含標頭檔案:
#include
或者#include
函式原型:
#if defined(config_dynamic_debug)
#define dev_dbg(dev, format, ...) \
do while (0)
#elif defined(debug)
#define dev_dbg(dev, format, arg...) \
dev_printk(kern_debug, dev, format, ##arg)
#else
#define dev_dbg(dev, format, arg...) \
()#endif
注意:使用之前需定義debug為真;
dev_printk類似printk,若使能夠輸出log,需如下定義
#define default_message_loglevel 8 /* kern_warning */
標頭檔案包含:.h>
原型:#define max_errno 4095
#define is_err_value(x) unlikely((x) >= (unsigned long)-max_errno)
/*將錯誤號轉化為錯誤指標,即指向最後一頁的指標*/
static
inline
void *err_ptr(long error)
/*將錯誤指標轉化為錯誤號*/
static
inline
long ptr_err(const
void *ptr)
/*將錯誤指標是否是有效指標*/
static
inline
long is_err(const
void *ptr)
Linux核心 核心基礎知識
核心的版本號主要有四個陣列組成。比如版本號 2.6.26.1 其中,2 主版本號 6 從版本號或副版本號 26 修訂版本號 1 穩定版本號 副版本號表示這個版本是穩定版 偶數 還是開發版 奇數 上面例子中的版本號是穩定版。穩定的版本可用於企業級環境。修訂版本號的公升級包括bug修正,新的驅動以及新的...
Linux核心知識
linux核心最初創始人 linus torvalds管理乙個linus樹,linus樹也稱為主線 mainline 一般指的upstream,上游 也指這個linus樹或者各種開發樹。linus樹是以2.6.x這樣的三個數字來表示。比如linux 2.6.18 164.el5xen 的linus樹...
Linux核心知識
linux核心最初創始人 linus torvalds管理乙個linus樹,linus樹也稱為主線 mainline 一般指的upstream,上游 也指這個linus樹或者各種開發樹。linus樹是以2.6.x這樣的三個數字來表示。比如linux 2.6.18 164.el5xen 的linus樹...