ffs,linux3.11,내부 컴파일링 시간 오류,error:unknown field'readdir'specified in initializer
3749 단어 kernel
원본을 보니 linux3.11의 원본에 있는 file_operations 구조체에는readdir가 없습니다. 대신iterate가 있습니다. 그러나yaffs(fs/yaffs2/yaffs_vfs.c)에서는readdir를 사용합니다. 따라서 이 파일을 고쳐 쓰십시오.
변경 사항은 다음과 같습니다.
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0))
static int yaffs_iterate(struct file *file, struct dir_context *ctx)
{
struct yaffs_obj *obj;
struct yaffs_dev *dev;
struct yaffs_search_context *sc;
struct inode *inode = file->f_dentry->d_inode;
unsigned long offset, curoffs;
struct yaffs_obj *l;
int ret_val = 0;
char name[YAFFS_MAX_NAME_LENGTH + 1];
obj = yaffs_dentry_to_obj(file->f_dentry);
dev = obj->my_dev;
yaffs_gross_lock(dev);
yaffs_dev_to_lc(dev)->readdir_process = current;
offset = ctx->pos;
sc = yaffs_new_search(obj);
if (!sc) {
ret_val = -ENOMEM;
goto out;
}
yaffs_trace(YAFFS_TRACE_OS,"yaffs_readdir: starting at %d", (int)offset);
if (offset == 0) {
yaffs_trace(YAFFS_TRACE_OS, "yaffs_readdir: entry . ino %d", (int)inode->i_ino);
yaffs_gross_unlock(dev);
if (!dir_emit_dot(file, ctx)) {
yaffs_gross_lock(dev);
goto out;
}
yaffs_gross_lock(dev);
offset++;
ctx->pos++;
}
if (offset == 1) {
yaffs_trace(YAFFS_TRACE_OS, "yaffs_readdir: entry .. ino %d", (int)file->f_dentry->d_parent->d_inode->i_ino);
yaffs_gross_unlock(dev);
if (!dir_emit_dotdot(file, ctx)) {
yaffs_gross_lock(dev);
goto out;
}
yaffs_gross_lock(dev);
offset++;
ctx->pos++;
}
curoffs = 1;
/* If the directory has changed since the open or last call to readdir, rewind to after the 2 canned entries. */
if (file->f_version != inode->i_version) {
offset = 2;
ctx->pos = offset;
file->f_version = inode->i_version;
}
while (sc->next_return) {
curoffs++;
l = sc->next_return;
if (curoffs >= offset) {
int this_inode = yaffs_get_obj_inode(l);
int this_type = yaffs_get_obj_type(l);
yaffs_get_obj_name(l, name, YAFFS_MAX_NAME_LENGTH + 1);
yaffs_trace(YAFFS_TRACE_OS, "yaffs_readdir: %s inode %d", name, yaffs_get_obj_inode(l));
yaffs_gross_unlock(dev);
if (!dir_emit(ctx, name, strlen(name),this_inode, this_type) < 0) {
yaffs_gross_lock(dev);
goto out;
}
yaffs_gross_lock(dev);
offset++;
ctx->pos++;
}
yaffs_search_advance(sc);
}
out:
yaffs_search_end(sc);
yaffs_dev_to_lc(dev)->readdir_process = NULL;
yaffs_gross_unlock(dev);
return ret_val;
}
#else
static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir)
{
.....
}
#endif
static const struct file_operations yaffs_dir_operations = {
.read = generic_read_dir,
// .readdir = yaffs_readdir,
//add by jxm begin
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0))
.iterate = yaffs_iterate,
#else
.readdir = yaffs_readdir,
#endif
//add by jxm end
.fsync = yaffs_sync_object,
.llseek = generic_file_llseek,
};
그리고
번역하면 이 잘못을 보고하지 않는다
참조 웹 주소:https://dev.openwrt.org/browser/trunk/target/linux/generic/patches-3.12/503-yaffs-3.12-convert-readdir-to-iterate.patch?rev=39084#L1911
또 이 실수를 보고합니다: fs/yaffs2/yaffs_vfs.c:3501: error: implicit declaration of function 'create_proc_entry', 해결 방법은 내가 전재한 이 문장을 볼 수 있다
http://blog.csdn.net/xiaominthere/article/details/17549607
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
QEMU에서 커널 변경 사항 테스트이것은 5분 미만의 짧은 빌드, 설치 및 실행 주기로 QEMU 가상 머신에서 Linux 커널 변경 사항을 테스트하는 것입니다. 인터넷은 Linux 커널 구축에 대한 자습서로 가득 차 있지만 가상화된 환경에 변경 사항...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.