文档章节

基于linux 3.10的yaffs2移植

FGQ
 FGQ
发布于 2013/11/02 13:07
字数 796
阅读 1851
收藏 1

最近想起来还有一块mini2440的开发板很久没有使用了,所以想移植一个基于linux3.10的linux系统,但是在移植yaffs2文件系统的时候出现了一些问题,我将其记录下来给其他同学解决同样的问题提供帮助。

1. 首先通过git下载yaffs2代码。然后进入yaffs2文件夹中执行patch-ker.sh,给linux源代码打上patch。

$ git clone git://www.aleph1.co.uk/yaffs2
$ cd yaffs2/
$ ./patch-ker.sh c m ../linux3.10-mini2440

2. 然后在linux的源代码fs中多了一个yaffs2的文件夹,到此yaffs2文件系统就已经添加到linux3.10中了。在Linux内核源代码根目录运行:make menuconfig,移动上下按键进行配置:

File Systems
	---> Miscellaneous filesystems
		---> [*]YAFFS2 file system support
并按空格选中它,这样我们就在内核中添加了yaffs2文件系统的支持,按“Exit”退出内核配置。

3. 编译linux源代码。

$ make zImage
scripts/kconfig/conf --silentoldconfig Kconfig
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CC      scripts/mod/devicetable-offsets.s
  GEN     scripts/mod/devicetable-offsets.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTLD  scripts/mod/modpost
  CHK     include/generated/compile.h
  CC      fs/yaffs2/yaffs_ecc.o
  CC      fs/yaffs2/yaffs_vfs.o
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_proc_debug_write':
fs/yaffs2/yaffs_vfs.c:3304: warning: comparison of distinct pointer types lacks a cast
fs/yaffs2/yaffs_vfs.c: In function 'init_yaffs_fs':
fs/yaffs2/yaffs_vfs.c:3398: error: implicit declaration of function 'create_proc_entry'
fs/yaffs2/yaffs_vfs.c:3399: warning: assignment makes pointer from integer without a cast
fs/yaffs2/yaffs_vfs.c:3402: error: dereferencing pointer to incomplete type
fs/yaffs2/yaffs_vfs.c:3403: error: dereferencing pointer to incomplete type
fs/yaffs2/yaffs_vfs.c:3404: error: dereferencing pointer to incomplete type
make[2]: *** [fs/yaffs2/yaffs_vfs.o] Error 1
make[1]: *** [fs/yaffs2] Error 2
make: *** [fs] Error 2

编译fs/yaffs2/yaffs_vfs.c时出现错误,function 'create_proc_entry'没有申明。Google之后才知道原来这个接口在linux-3.10被删除了,应该使用proc_create代替。

参考:What's coming in 3.10, part 2

4. 修改fs/yaffs2/yaffs_vfs.c

@@ -3384,12 +3384,6 @@ static struct file_system_to_install fs_to_install[] = {
        {NULL, 0}
 };
 
+static const struct file_operations yaffs_fops = {
+        .owner = THIS_MODULE,
+        .read = yaffs_proc_read,
+        .write = yaffs_proc_write,
+};
+
 static int __init init_yaffs_fs(void)
 {
        int error = 0;
@@ -3401,9 +3395,9 @@ static int __init init_yaffs_fs(void)
        mutex_init(&yaffs_context_lock);
 
        /* Install the proc_fs entries */
+       my_proc_entry = proc_create("yaffs",
+                                         S_IRUGO | S_IFREG, YPROC_ROOT, &yaffs_fops);
+#if 0
-       my_proc_entry = create_proc_entry("yaffs",
-                                         S_IRUGO | S_IFREG, YPROC_ROOT);
-
        if (my_proc_entry) {
                my_proc_entry->write_proc = yaffs_proc_write;
                my_proc_entry->read_proc = yaffs_proc_read;
@@ -3411,7 +3405,7 @@ static int __init init_yaffs_fs(void)
        } else {
                return -ENOMEM;
         }
+#endif
-
        /* Now add the file system entries */
 
        fsinst = fs_to_install;

5. 修改之后保存,然后再编译就可以成功了。

$ make zImage
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CC      scripts/mod/devicetable-offsets.s
  GEN     scripts/mod/devicetable-offsets.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTLD  scripts/mod/modpost
  CHK     include/generated/compile.h
  CC      fs/yaffs2/yaffs_vfs.o
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_proc_debug_write':
fs/yaffs2/yaffs_vfs.c:3304: warning: comparison of distinct pointer types lacks a cast
fs/yaffs2/yaffs_vfs.c: At top level:
fs/yaffs2/yaffs_vfs.c:3389: warning: initialization from incompatible pointer type
fs/yaffs2/yaffs_vfs.c:3390: warning: initialization from incompatible pointer type
  CC      fs/yaffs2/yaffs_guts.o
  CC      fs/yaffs2/yaffs_checkptrw.o
  CC      fs/yaffs2/yaffs_packedtags1.o
  CC      fs/yaffs2/yaffs_packedtags2.o
  CC      fs/yaffs2/yaffs_nand.o
  CC      fs/yaffs2/yaffs_tagscompat.o
  CC      fs/yaffs2/yaffs_tagsmarshall.o
  CC      fs/yaffs2/yaffs_mtdif.o
  CC      fs/yaffs2/yaffs_nameval.o
  CC      fs/yaffs2/yaffs_attribs.o
  CC      fs/yaffs2/yaffs_allocator.o
  CC      fs/yaffs2/yaffs_yaffs1.o
  CC      fs/yaffs2/yaffs_yaffs2.o
  CC      fs/yaffs2/yaffs_bitmap.o
  CC      fs/yaffs2/yaffs_summary.o
  CC      fs/yaffs2/yaffs_verify.o
  LD      fs/yaffs2/yaffs.o
  LD      fs/yaffs2/built-in.o
  LD      fs/built-in.o
  LINK    vmlinux
  LD      vmlinux.o
  MODPOST vmlinux.o
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  KSYM    .tmp_kallsyms1.o
  KSYM    .tmp_kallsyms2.o
  LD      vmlinux
  SORTEX  vmlinux
  SYSMAP  System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  GZIP    arch/arm/boot/compressed/piggy.gzip
  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready

© 著作权归作者所有

共有 人打赏支持
FGQ

FGQ

粉丝 33
博文 19
码字总数 40151
作品 0
武汉
项目经理
私信 提问
加载中

评论(1)

k
kangear
新版本的yaffs2源码中已经有这个方面的实现,只不过版本的宏开关是判断的3.12,改为3.10就可以直接使用新的proc文件系统了。
YAFFS2移植到AliOS Things指南

摘要: YAFFS2介绍 YAFFS(Yet Another Flash File System)是第一个专门为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备。YAFFS 是基于日志的文件系统,提供磨损平衡和掉电...

阿里云云栖社区
2018/02/08
0
0
大神 ! 请教问题 基于linux 3.5的yaffs2移植

@FGQ 你好,想跟你请教个问题:大神 ! 请教问题 基于linux 3.5的yaffs2移植 遇到了 yaffs_vfs.c 的问题 您的文章中 如何修改 yaffs_vfs.c文件 我不是很明白 所以请求您的帮助...

yingzhuo
2014/03/25
31
0
高版本linux内核添加yaffs2文件系统支持后编译出错

内核移植编译时出现下面的错误无法编译,求解决方法。 fs/yaffs2/yaffs_vfs.c:440: warning: initialization from incompatible pointer type fs/yaffs2/yaffs_vfs.c:445: warning: initiali......

慎思
2012/08/17
0
1
移植 linux kernel 2.6.32 至 mini2440 板

移植准备 1.1 获取Linux内核源代码(linux-2.6.32.tar.gz) $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz 1.2 解压内核源代码 $ tar xvzf linux-2.6.32.tar.gz 得......

宁宁爸
2015/12/04
115
2
移植Linux2.6.22.6到s3c2410/2440开发板成功

主要还是参考tekkaman的文章http://blog.chinaunix.net/u1/34474/showart.php?id=369449自己修改了网卡移植这一部分。交叉编译器用的是arm-linux-3.4.1版本。 一、将Linux2.6.22.6内核源码放...

YACHE
2011/07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我所遇到的GitLab 502问题的解决

我所遇到的GitLab 502问题的解决 2015年02月11日 20:17:07 wangxicoding 阅读数:51095 标签: gitlab 502 解决 端口冲突 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://bl...

rootliu
6分钟前
0
0
OSChina 周五乱弹 —— 对不起,把你看成绿灯了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 梁博《男孩 (Live)》居然只有现场版,也是好听cry。 《男孩 (Live)》- 梁博 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
16分钟前
33
3
移植Modbus到STM32F103(2):移植FreeModbus到usart3并运行示例代码

FreeModbus是Modbus的一个被广泛移植的实现。其源码在github,最新版是1.6。 FreeModbus支持Modbus功能码里的0x01~0x06,0x0F~0x11和0x17,对一些功能比如异常诊断和读事件计数等功能码并没有...

Konstantine
今天
3
0
浅谈神经网络(神经网络篇)

背景 之前写过浅谈神经网络基础篇,简单介绍下机器学习这块内容,用于扫盲。本文正式将神经网络,这部分是深度学习的基础。了解完可以掌握强大的机器学习的方法,也可以更好的了解深度学习。...

Uknowzheng
今天
5
0
移动硬盘变为RAW格式后的修复

在Mac上使用自己的移动硬盘结果文件系统格式变为RAW; 在自己windows笔记本上使用chkdsk H: /F进行修复,修复日志如下: C:\Users\mengzhang6>chkdsk H: /F文件系统的类型是 NTFS。卷标是 do...

晨猫
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部