2017-02-15 14 views
5

Sự khác biệt chính xác giữa các hàm printkpr_info là gì? Và theo những điều kiện nào, tôi có nên chọn cái nào khác không?Sự khác biệt giữa printk và pr_info

+0

@CL. Vâng, tệ lắm. – LPs

+0

Tất cả những thứ này đều tương đương ngoại trừ một lỗi. – 0andriy

Trả lời

5

Các kernel's printk.h có:

#define pr_info(fmt,arg...) \ 
    printk(KERN_INFO fmt,##arg) 

Cũng giống như tên, pr_info là printk với ưu tiên KERN_INFO.

+0

Trên thực tế '#define pr_info (fmt, ...) eprintf (0, verbose, pr_fmt (fmt), ## __ VA_ARGS __)' – LPs

+0

Ngoại lệ là 'pr_debug()' so với 'printk (KERN_DEBUG)' và tất cả các dẫn xuất. – 0andriy

0

Khi tìm kiếm cụ thể tại pr_info, định nghĩa sẽ lần lượt sử dụng printk(KERN_INFO ... (như đã đề cập trong barcelona_delpy's answer); tuy nhiên, đoạn mã nguồn của câu trả lời dường như loại trừ trình bao bọc định dạng pr_fmt(fmt) (như đã đề cập bởi LP comment).


Sự khác biệt tại sao bạn có thể sử dụng pr_info qua printk(KERN_INFO ... là tùy chỉnh định dạng bạn có thể thiết lập. Nếu bạn muốn tiền tố tin nhắn của bạn trong module của bạn với printk, một phương pháp là thêm một cách rõ ràng tiền tố của bạn trên mỗi dòng:

printk(KERN_INFO "mymodule: hello there\n"); 
// outputs "mymodule: hello there" 

hay:

printk(KERN_INFO KBUILD_MODNAME " hello there\n"); 
// outputs "mymodule: hello there" 

Tuy nhiên, nếu bạn sử dụng pr_info (và khác pr_* chức năng), bạn có thể tái xác định định dạng và chỉ cần sử dụng pr_info không có việc làm thêm:

... (includes) 
#ifdef pr_fmt 
#undef pr_fmt 
#endif 
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 

... 
{ 
    ... 
    pr_err("hello there\n"); 
    // outputs "mymodule: hello there" (assuming module is named 'mymodule') 
    ... 
} 
... 

Xem thêm:

Các vấn đề liên quan