错误处理 – linux内核中的系统调用错误处理

我正在linux内核中编写一个新的系统调用.我想实现一个错误处理系统,以便向使用sycall的用户返回一个描述错误类型的代码.我想知道在内核中是如何完成的,因为我想遵循标准.我想让用户读取errno变量或类似的变量来理解发生的错误.
谢谢.

附:我正在使用最新的linux版本.

最佳答案
你的大部分任务都是由libc和低级内核系统调用处理程序(在程序集中编写的部分)自动完成的.处理错误代码的内核约定是返回负错误常量,例如-ENOMEM.零或正数表示成功.这在整个内核中使用.

如果你已经定义了新的sycall入口点static asmlinkage long my_new_syscall(int param){…},它只需要返回-ENOMEM(或类似).如果使用libc的syscall(nr,param)调用系统调用,那么在出错时它将返回-1,而ENOMEM(在正数中)将在errno中.

您可以使用include / asm-generic / {errno,errno-base} .h中定义的许多错误代码(如ENOMEM).如果这些都不符合您的目的,您可以将自己的错误编号添加到这些文件中,但请注意,您还需要修改用户空间可见的内核头文件以显示相同的编号,这样会更加困难设置系统以使用您的修改.如果你不需要,不要这样做.

转载注明原文:错误处理 – linux内核中的系统调用错误处理 - 代码日志