在Linux內(nèi)核中,dev_err()
是用于輸出設(shè)備驅(qū)動(dòng)程序錯(cuò)誤信息的宏
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/dev_err.h>
dev_err()
宏輸出錯(cuò)誤信息。它通常需要一個(gè)設(shè)備對(duì)象(struct device *
)作為參數(shù),以及一個(gè)格式字符串,后面可以跟任意數(shù)量的參數(shù)。例如:static int my_driver_init(struct device *dev)
{
int ret = 0;
// ... 初始化代碼 ...
if (ret < 0) {
dev_err(dev, "初始化失敗,錯(cuò)誤代碼:%d\n", ret);
return ret;
}
// ... 其他初始化代碼 ...
return 0;
}
在這個(gè)例子中,如果初始化失敗,dev_err()
宏將輸出一條錯(cuò)誤信息,包括設(shè)備對(duì)象和錯(cuò)誤代碼。
dev_err()
宏的另一個(gè)版本,它接受一個(gè)額外的struct printk_rate_limit *
參數(shù)。例如:static int my_driver_init(struct device *dev)
{
int ret = 0;
struct printk_rate_limit *rate_limit = NULL;
// ... 初始化代碼 ...
if (ret < 0) {
rate_limit = &my_driver_rate_limit; // 設(shè)置日志速率限制
dev_err(dev, "初始化失敗,錯(cuò)誤代碼:%d\n", ret);
printk_ratelimit(rate_limit); // 輸出日志
return ret;
}
// ... 其他初始化代碼 ...
return 0;
}
在這個(gè)例子中,我們?cè)O(shè)置了日志速率限制,然后使用printk_ratelimit()
函數(shù)輸出錯(cuò)誤信息。
總之,要在Linux內(nèi)核中通過(guò)dev_err()
輸出錯(cuò)誤信息,你需要包含必要的頭文件,然后使用dev_err()
宏,并提供一個(gè)設(shè)備對(duì)象和一個(gè)格式字符串。如果需要,還可以設(shè)置日志速率限制。