Linux常用错误码--"errno-base.h"

本文主要介绍了Linux环境下,特别是在Fedora12系统中,如何查阅和理解错误码,特别是从/usr/include/asm-generic/errno-base.h文件中获取的信息。对于经常需要处理错误码的开发者来说,了解这些内容有助于更有效地解决系统错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常会需要用到错误码,但是它具体的值 是什么呢,往往不太清楚,所以在使用的时候非常不舒服,下面把linux平台下常用的错误码列了下。

我是Fedora12系统,找到的定义文件是:/usr/include/asm-generic/errno-base.h

#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define	EPERM		 1	/* Operation not permitted */
#define	ENOENT		 2	/* No such file or directory */
#define	ESRCH		 3	/* No such process */
#define	EINTR		 4	/* Interrupted system call */
#define	EIO		 5	/* I/O error */
#define	ENXIO		 6	/* No such device or address */
#define	E2BIG		 7	/* Argument list too long */
#define	ENOEXEC		 8	/* Exec format error */
#define	EBADF		 9	/* Bad file number */
#define	ECHILD		10	/* No child processes */
#define	EAGAIN		11	/* Try again */
#define	ENOMEM		12	/* Out of memory */
#define	EACCES		13	/* Permission denied */
#define	EFAULT		14	/* Bad address */
#define	ENOTBLK		15	/* Block device required */
#define	EBUSY		16	/* Device or resource busy */
#define	EEXIST		17	/* File exists */
#define	EXDEV		18	/* Cross-device link */
#define	ENODEV		19	/* No such device */
#define	ENOTDIR		20	/* Not a directory */
#define	EISDIR		21	/* Is a directory */
#define	EINVAL		22	/* Invalid argument */
#define	ENFILE		23	/* File table overflow */
#define	EMFILE		24	/* Too many open files */
#define	ENOTTY		25	/* Not a typewriter */
#define	ETXTBSY		26	/* Text file busy */
#define	EFBI
<think>好的,用户现在遇到了一个问题,就是使用`rpm -ivh`安装内核头文件包时,文件没有被安装到预期的`/usr/src/kernel`目录。用户之前已经得到了一个详细的排查步骤,现在他们运行了`rpm -qlp`来查看包内容,发现文件都安装在`/usr/include`及其子目录下,而不是`/usr/src/kernel`。需要分析这个问题并给出解决方案。 首先,用户提供的`rpm -qlp`的输出显示所有文件都在`/usr/include`下,这说明这个RPM包的设计是将头文件安装到系统的标准头文件目录,而不是开发用的内核源码目录。通常,内核头文件分为两部分:一部分是用户空间程序使用的头文件(在`/usr/include/linux`等目录),另一部分是内核开发需要的源码和头文件(在`/usr/src/kernel`或类似目录)。 接下来,需要确认这个包是否正确包含了内核开发所需的文件。根据输出,所有文件都在`/usr/include`下,可能这个包只是用户空间的头文件,而不是内核源码头文件。这可能意味着用户安装的是错误的包,或者包本身的结构有问题。 用户的目标是将文件安装到`/usr/src/kernel`,但当前的包并没有包含这些路径。需要解释为什么会出现这种情况,可能的原因包括:包设计问题、用户误解了包的内容、或者系统路径的差异(比如不同的发行版使用不同的路径)。 解决方案方面,首先应该建议用户确认他们下载的包是否正确,是否是专门用于内核开发的包。可能需要联系包的维护者或查看文档,确认这个包是否应该包含`/usr/src/kernel`下的内容。如果包确实有问题,可能需要获取正确的包。 如果用户确实需要将现有文件转移到`/usr/src/kernel`,可以手动创建符号链接,或者调整编译时的头文件路径。不过需要注意,手动移动文件可能会导致包管理系统无法跟踪这些文件,带来后续更新或卸载的问题。 另外,还需要检查系统是否存在符号链接问题,或者内核版本是否匹配。比如,`/usr/src/kernel`可能是一个符号链接,指向实际安装的内核版本目录。如果符号链接缺失,可能需要手动创建。 总结起来,用户的问题根源在于RPM包的文件路径与预期不符,需要从包的内容验证开始,逐步排查,并提供相应的解决方案,包括联系维护者、调整路径或使用正确的包。</think>--- ### **问题分析** 通过 `rpm -qlp` 输出的文件列表可以看到,此 RPM 包 (`kernel-headers-5.4.286_ky10_custom-1.ky10.aarch64.rpm`) 的安装路径集中在 `/usr/include` 目录下,**未包含 `/usr/src/kernel` 目录的任何内容**。这表明: 1. **包功能定位**:该包提供的是 **用户态头文件**(供用户程序调用内核接口),而非 **内核开发头文件**(需包含完整的内核源码结构,通常位于 `/usr/src/kernel`)。 2. **路径差异**:内核开发所需的头文件(如内核模块编译)通常需要完整的源码目录结构(如 `Makefile`、`Kconfig`、`scripts` 等),但此包未包含这些内容。 --- ### **关键结论** - **该包并非内核开发头文件包**,而是 **用户态内核头文件包**(仅包含用户程序所需的内核 API 头文件)。 - 若需编译内核模块或进行内核开发,需额外安装 **内核源码包**(通常包名类似 `kernel-devel` 或 `kernel-source`)。 --- ### **解决方案** #### 1. **安装正确的内核开发包** - 查询麒麟系统对应的内核开发包名称(例如 `kernel-devel-5.4.286_ky10_custom`),使用以下命令安装: ```bash sudo rpm -ivh kernel-devel-5.4.286_ky10_custom-1.ky10.aarch64.rpm ``` - 安装后验证路径: ```bash rpm -ql kernel-devel-5.4.286_ky10_custom | grep "/usr/src/kernel" ``` #### 2. **手动调整路径(临时应急)** 如果开发工具强制依赖 `/usr/src/kernel`,可创建符号链接指向实际头文件路径: ```bash # 假设实际安装路径为 /usr/include/linux sudo ln -s /usr/include/linux /usr/src/kernel ``` #### 3. **联系包维护者** - 提交问题说明:当前包未包含内核开发所需的源码结构,需确认是否: - 包名称或版本错误(例如误用用户态头文件包代替开发包)。 - 发行版自定义路径规则(如麒麟系统可能调整了标准路径)。 --- ### **补充说明:用户态头文件 vs 内核开发头文件** | **类型** | **路径** | **用途** | **包含内容** | |-------------------|-----------------------|-----------------------------|---------------------------------| | 用户态头文件 | `/usr/include/linux` | 用户程序调用内核API(如 `ioctl`) | 精简的API定义头文件(如 `socket.h`) | | 内核开发头文件 | `/usr/src/kernel` | 内核模块编译、驱动开发 | 完整的内核源码、构建脚本、配置文件 | --- ### **操作验证** 1. 检查已安装的内核开发包: ```bash rpm -qa | grep -E "kernel-(devel|source)" ``` 2. 确认内核版本匹配: ```bash uname -r # 查看当前运行的内核版本 rpm -qa | grep "kernel-devel" # 检查开发包版本是否一致 ``` 若版本不一致,需安装与当前运行内核匹配的开发包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值