通常,如果特定于体系结构的子目录中存在一个模块,那就是正在使用的模块。否则,通用的就是它。
对于给定的模块,.c
是正确的。.文件中很少有任何可执行代码.h
。我有 2.6.27.8 的uaccess.h
方便:
#ifndef _ASM_GENERIC_UACCESS_H_
#define _ASM_GENERIC_UACCESS_H_
/*
* This macro should be used instead of __get_user() when accessing
* values at locations that are not known to be aligned.
*/
#define __get_user_unaligned(x, ptr) \
({ \
__typeof__ (*(ptr)) __x; \
__copy_from_user(&__x, (ptr), sizeof(*(ptr))) ? -EFAULT : 0; \
(x) = __x; \
})
/*
* This macro should be used instead of __put_user() when accessing
* values at locations that are not known to be aligned.
*/
#define __put_user_unaligned(x, ptr) \
({ \
__typeof__ (*(ptr)) __x = (x); \
__copy_to_user((ptr), &__x, sizeof(*(ptr))) ? -EFAULT : 0; \
})
#endif /* _ASM_GENERIC_UACCESS_H */
仔细看看。这些是调用底层__copy_from_user()
和__copy_to_user()
函数的宏包装器,它们在每个架构上的实现方式不同。