日期:2014-05-16  浏览次数:20690 次

linux中sys_open等内核函数的错误码如何获得?
syscalls.h中定义的比如sys_open等内核函数失败后返回值是-1
但是错误码怎样获取呢?

本来以为可以像上层应用一样包含errno.h直接取errno的值就行,结果驱动的errno.h根本没有这个变量
用什么办法取得错误码呢?

初学驱动开发,多多关照。

------解决方案--------------------
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode) // 这就是sys_open()
{
ret = do_sys_open(AT_FDCWD, filename, flags, mode);
return ret;
}
long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
{
int fd = PTR_ERR(tmp);
if (!IS_ERR(tmp)) {
}
return fd;
}
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)

由以上可知,错误值是直接返回的。