copy_to_user()函數分析
在學習字元裝置驅動時,遇到一個函數copy_to_user(),這個函數是在編寫驅動程式代碼的過程中經常遇到的一個函數,它的功能是拷貝一個資料塊從核心空間到使用者空間。
因為核心空間和使用者空間的記憶體不能直接互相通路,才會出現這麼一個函數。
它的實作如下:
static inline unsigned long __must_checkcopy_to_user(void __user *to, const void *from, unsigned long n)
{
if(access_ok(VERIFY_WRITE, to, n))
n= __copy_to_user(to, from, n);
returnn;
}
與常見的拷貝函數的思路一樣,上來先檢查參數的合法性,__copy_to_user這個函數才是真正的拷貝函數。通過這個函數可以知道,其實核心也沒什麼高明之處,實作的大體思路都是一樣的,隻是細節方面人家做的更加到位。
代碼的好壞往往展現在細節。