Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程

linux的宏

日期:2017/1/20 17:43:53      編輯:Linux系統常見問題解答

首先來看看__user的宏定義:

#ifdef __CHECKER__
# define __user __attribute__((noderef, address_space(1)))
從宏定義可以看出,在配置__CHECKER__宏的條件下,__user宏定義有效,而顯然可以看出宏__CHECKER__是作為檢查機制出現的,所以我們可以推斷宏__user應該是用來檢查錯誤使用。

而事實上也確實如此,它是為了編譯內核/模塊時用 make C=1選項,打開靜態語法檢查工具sparse,來探測可能出現的錯誤。同時也可以看出它對文件的生成並沒有影響,只是用來檢查語法正確性。

進一步研究發現,sparse是一個靜態的C語法檢查工具,Linux下編譯內核或編譯module時,可以附加C=1來調用sparse檢查代碼.

另外,sparse定義了幾個內存空間,sparse針對Linux內核定義了幾個地址空間, kernel空間為默認, user空間為1, io區間為2. 這樣可以檢查訪問地址的代碼是否有問題。包括其中address_space(1)指用戶空間。

例如驅動編寫中,size_t hello_read(struct file *file, char __user *buff, size_t count, loff_t *offp)
{
return 0;
}

Copyright © Windows教程網 All Rights Reserved