Chinaunix首页 | 论坛 | 博客
  • 博客访问: 147538
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-01 12:35
个人简介

不断超越自己,将更强大!

文章分类

全部博文(35)

文章存档

2022年(1)

2017年(5)

2016年(29)

我的朋友

分类: 嵌入式

2016-05-24 00:17:39

          经过测试,发现最新版本的yaffs2很容易移植到Linux 2.xx与Linux 3.xx的版本上。

我使用Linux 3.10.12之前的版本,打上yaffs2最新版本补丁后,直接编译通过。但Linux 3.10.12却提示错误:


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




       经过查找并搜索相应的代码,发现内核改了。

create_proc_entry()/create_proc_read_entry() are killed off; use proc_create().

因此需要用:proc_create来代替原来的:




# gedit ./fs/yaffs2/yaffs_vfs.c

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #ifdef YAFFS_NEW_PROCFS  
  2. static int yaffs_proc_show(struct seq_file *m, void *v)  
  3. {  
  4.     /* FIXME: Unify in a better way? */  
  5.     char buffer[512];  
  6.     char *start;  
  7.     int len;  
  8.   
  9.     len = yaffs_proc_read(buffer, &start, 0, sizeof(buffer), NULL, NULL);  
  10.     seq_puts(m, buffer);  
  11.     return 0;  
  12. }  
  13.   
  14. static int yaffs_proc_open(struct inode *inode, struct file *file)  
  15. {  
  16.     return single_open(file, yaffs_proc_show, NULL);  
  17. }  
  18.   
  19. static struct file_operations procfs_ops = {  
  20.     .owner = THIS_MODULE,  
  21.     .open  = yaffs_proc_open,  
  22.     .read  = seq_read,  
  23.     .write = yaffs_proc_write,  
  24. };  
  25.   
  26. static int yaffs_procfs_init(void)  
  27. {  
  28.     /* Install the proc_fs entries */  
  29.     my_proc_entry = proc_create("yaffs",  
  30.                     S_IRUGO | S_IFREG,  
  31.                     YPROC_ROOT,  
  32.                     &procfs_ops);  
  33.   
  34.     if (my_proc_entry) {  
  35.         return 0;  
  36.     } else {  
  37.         return -ENOMEM;  
  38.     }  
  39. }  
  40.   
  41. #else  
  42.   
  43. static int yaffs_procfs_init(void)  
  44. {  
  45.     /* Install the proc_fs entries */  
  46.     my_proc_entry = create_proc_entry("yaffs",  
  47.                     S_IRUGO | S_IFREG,   
  48.                     YPROC_ROOT);  
  49.   
  50.     if (my_proc_entry) {  
  51.         my_proc_entry->write_proc = yaffs_proc_write;  
  52.         my_proc_entry->read_proc = yaffs_proc_read;  
  53.         my_proc_entry->data = NULL;  
  54.         return 0;  
  55.     } else {  
  56.         return -ENOMEM;  
  57.     }  
  58. }  
  59.   
  60. #endif  


         因此,只要打开编译开关 YAFFS_NEW_PROCFS 即可!经过进一步搜索:YAFFS_NEW_PROCFS,发现有版本宏控制,因此修改如下:

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0))        /* edit here use NEW PROCFS */
#define YAFFS_NEW_PROCFS
#include 
#endif

         把:KERNEL_VERSION(3,12,0)->KERNEL_VERSION(3,10,0))这里因为在3.10版本里,已经使用 YAFFS_NEW_PROCFS了。
修改后,就可以正常编译并下载成功了。
阅读(2172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~