O_DIRECT无法在openwrt上运行?

时间:2014-11-28 02:33:06

标签: linux embedded kernel openwrt jffs2

我正在开发一个需要访问特殊USB设备的程序。此USB设备充当文件系统中的常规文件,因此我必须使用O_DIRECT标志打开此文件。如下:

open(pathname, O_CREAT | O_RDWR | O_DIRECT | O_SYNC, S_IRWXU)

该程序适用于PC环境。但是当我用openwrt将它移植到嵌入式主板时,“open”函数返回EINVAL 22 / *无效参数* /。

  • 在内核配置中选择了O_DIRECT支持。
  • openwrt的文件系统是squashfs和jffs2。
  • USB设备的文件系统很胖,并挂载在/ media / aegis目录下。
  • 董事会的ARCH是mips。

似乎错误是从内核中的以下函数返回的:

int open_check_o_direct(struct file *f)
{
         /* NB: we're sure to have correct a_ops only after f_op->open */
         if (f->f_flags & O_DIRECT) {
                 if (!f->f_mapping->a_ops ||
                     ((!f->f_mapping->a_ops->direct_IO) &&
                     (!f->f_mapping->a_ops->get_xip_mem))) {
                         return -EINVAL;
                 }
         }
         return 0;
 }

是否知道在jffs2上不支持O_DIRECT并且在fat上受支持。当在/ media / aegis中运行文件时,我猜使用了脂肪的a_ops,但是程序没有按照我的预期运行。

0 个答案:

没有答案