compiler-errors - “' errno ' undeclared”编译Linux内核时

标签 compiler-errors linux-kernel operating-system kernel errno

我正在尝试编译,但不断出现以下错误:
enter image description here

我已经包含了asm-i386/errno.h一次,但是没有用。我也试过包括linux/errno.h,它不工作以太。

我应该包含什么文件?

最佳答案

Linux内核中没有errno变量:此变量仅存在于用户空间中。

如果内核函数想要报告错误并指定错误代码,则它将错误代码封装到返回值中。这种封装有3种可能性,取决于成功返回的值类型:

  • 函数成功返回0,失败返回错误代码。

  • 有时将此最常用的约定称为0/-err
  • 函数在成功时返回有效指针,在失败时返回ERR_PTR(err)表达式。

  • 该表达式的计算结果是指针,指针永远不能指向实际的内核对象。即使NULL是有效的结果,也可以使用此约定。
  • 函数成功返回正整数,失败则返回负错误代码:+val/-err

  • 如果有效结果为0,则也可以使用以下约定:+val/0/-err

    当用户空间库需要根据内核的请求设置errno时,它将检查系统调用的结果(这是对内核执行请求的唯一方法)。根据syscall,使用1或3约定(任何系统调用的返回类型为long)。

    在内核空间中为用户空间“设置” errno的示例,请参见here

    关于compiler-errors - “' errno ' undeclared”编译Linux内核时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40574018/

    相关文章:

    java - Java程序无法编译: missing return statement

    c++ - 没有匹配函数调用 'begin(int [n])'

    c - 'passing file descriptors between processes' 是如何工作的?

    c - 如何在 Linux 内核中将 char[] 字符串转换为 int?

    c - 谁抛出段错误?

    visual-c++ - VS CShellManager未声明

    linux-kernel - Linux 内核如何知道在哪里寻找驱动程序固件?

    c - 线程_创建() : member of which C library

    operating-system - bios和实模式

    assembly - 组装x86中的Sqrt