【运维案例】驱动调用kernel_read获取文件时出错

版本:openEuler 22.03-LTS

组件:kernel

分类:文件系统

来源:总结/咨询

【背景及现象描述】

驱动调用kernel_read函数打开"/proc/self/cpuset"时出错,日志如下:

【原因分析】

查看kernel_read函数源码,定位到出现错误打印的地方

可以看到是由于不满足433行判断条件才返回的错误,该条件判断表示传入的file的fs应当支持read_iter。5.10内核中如果调用kernel_read/kernel_write需要传入的file对应的fs支持read_iter/write_iter接口,而传入的file为打开的"/proc/self/cpuset",查看proc文件系统可以看到其并不支持read_iter接口。

image

【解决方法】

不要调用kernel_read函数,直接在用户态调用open\read函数即可。

1 个赞