linux 核心常用知識筆記

2021-07-07 04:36:58 字數 2564 閱讀 3455

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樹...