我已经开发了一个内核模块,已经建立在内核版本4.9和5.4,和工程文件。但当我试图建立内核版本5.10.113,我得到了以下错误:
ERROR: modpost: "vfs_fstatat" [/home/jarvisbao/***/build/kernel/shman/shman.ko] undefined!
我在函数中使用了vfs_stat函数,如下所示:
int file_stat(char *path, struct kstat *st){
mm_segment_t oldfs;
int ret=0;
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0)
oldfs = get_fs();
set_fs( get_ds() );
#elif LINUX_VERSION_CODE < KERNEL_VERSION(5,10,0)
oldfs = get_fs();
set_fs( KERNEL_DS );
#else
oldfs = force_uaccess_begin();
#endif
ret = vfs_stat(path, st);
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,10,0)
set_fs(oldfs);
#else
force_uaccess_end(oldfs);
#endif
return ret;
}
内核版本5.10和5.4之间调用vfs_stat好像有些不同,但我不知道。
1条答案
按热度按时间bmp9r5qi1#
vfs_fstatat的实现包含在fs/stat. c中。要成功编译,应在实现后添加EXPORT_SYMBOL(vfs_fstatat)。