在Linux系统上,哪里定义和实现了函数copy_to_user和copy_from_user?copy_to_user在哪里定义
0
A
回答
4
它在asm/uaccess.h
定义,例如,在/usr/src/linux-3.0.6-gentoo/include/asm-generic/uaccess.h:
static inline long copy_from_user(void *to,
const void __user * from, unsigned long n)
{
might_sleep();
if (access_ok(VERIFY_READ, from, n))
return __copy_from_user(to, from, n);
else
return n;
}
static inline long copy_to_user(void __user *to,
const void *from, unsigned long n)
{
might_sleep();
if (access_ok(VERIFY_WRITE, to, n))
return __copy_to_user(to, from, n);
else
return n;
}
而且__copy_to_user
:
#ifndef __copy_to_user
static inline __must_check long __copy_to_user(void __user *to,
const void *from, unsigned long n)
{
if (__builtin_constant_p(n)) {
switch(n) {
case 1:
*(u8 __force *)to = *(u8 *)from;
return 0;
case 2:
*(u16 __force *)to = *(u16 *)from;
return 0;
case 4:
*(u32 __force *)to = *(u32 *)from;
return 0;
#ifdef CONFIG_64BIT
case 8:
*(u64 __force *)to = *(u64 *)from;
return 0;
#endif
default:
break;
}
}
memcpy((void __force *)to, from, n);
return 0;
}
#endif
+0
这导致下一个问题:__copy_to_user()定义在哪里:-) –
+0
@ott它在同一个文件中,我包含片段 –
相关问题
- 1. LPPICTURE在哪里定义?
- 2. Enum.values()定义在哪里?
- 3. OSTYPE_solaris定义在哪里
- 4. BCRYPT_HASH_FUNCTION_TABLE在哪里定义?
- 5. RestClient.send在哪里定义?
- 6. IRepository定义在哪里 - ServiceStack
- 7. 定义yearMonthDuration在哪里?
- 8. FireDAC pbByNumber在哪里定义?
- 9. DEBUG宏定义在哪里?
- 10. kill_proc_info定义在哪里?
- 11. glTextureVertexPointer定义在哪里?
- 12. XMLHttpRequest.responseStream在哪里定义?
- 13. “sprite”在哪里定义?
- 14. UNS_32定义在哪里?
- 15. __NR_accept的定义在哪里?
- 16. NSLineSeparatorCharacter在哪里定义?
- 17. _kCLLocationAccuracyBest在哪里定义?
- 18. DIR定义在哪里?
- 19. GL_UNSIGNED_INT_8_8_8_8_REV在哪里定义?
- 20. Widget.Material.Light.TextView.ListSeparator在哪里定义?
- 21. uc_mcontext定义在哪里?
- 22. callback()的定义在哪里?
- 23. getActivity()它在哪里定义?
- 24. UDP_TABLE_CLASS值在哪里定义?
- 25. ERROR_PENDING在哪里定义?
- 26. ConfigDSN定义在哪里?
- 27. DeleteMediaType()定义在哪里?
- 28. App :: Application.load_tasks在哪里定义?
- 29. 这里定义的样式在哪里?
- 30. 在哪里定义NSArray以及在哪里定义按钮操作?
我推荐使用ctags或cstope。我建议使用ctags vim(或emacs) - 这对我很有帮助。 http://kernelnewbies.org/FAQ/CodeBrowsing,http://0x8086.blogspot.cz/2011/02/gvim-ctags-and-linux-kernel.html,http://courses.cs.washington.edu/ course/cse451/10au/tutorials/tutorial_ctags.html – pevik