我正在开发一个需要访问特殊USB设备的程序。此USB设备充当文件系统中的常规文件,因此我必须使用O_DIRECT标志打开此文件。如下:
open(pathname, O_CREAT | O_RDWR | O_DIRECT | O_SYNC, S_IRWXU)
该程序适用于PC环境。但是当我用openwrt将它移植到嵌入式主板时,“open”函数返回EINVAL 22 / *无效参数* /。
似乎错误是从内核中的以下函数返回的:
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,但是程序没有按照我的预期运行。