uname 在 chroot 中的实际使用?

Rom*_*jev 5 linux compiling chroot linux-kernel cpu-architecture

我正在通过引导和 chroot 的组合来准备操作系统映像。某些操作(例如构建内核模块)依赖于uname输出,它甚至在 chroot 内部报告主机配置。该配置与正在部署的配置不同。结果是找不到内核头文件,其他步骤也搞砸了。

人们可以发挥创意并用uname伪造它的 shell 脚本替换它,但有什么更实用的方法呢?

Gil*_*il' 4

Linux 提供了一种有限的方法来更改 报告的值uname,可以通过实用程序(每个非嵌入式 Linux 上可用的 util-linux 软件包的一部分)personality调用系统调用。setarch例如,您可以在 amd64 计算机上使用setarch i386 myprogramlinux32 myprogram使程序相信它正在 32 位 x86 系统上运行。

但是,无法将报告的版本更改为uname任意数字。

还可以使用UTS 命名空间更改进程树的主机名。

schroot可以根据 chroot 的配置来设置这些参数。

但对于编译软件来说,改变信息报告uname是不够的。您还需要为目标处理器使用正确的编译器,链接正确的代码等。这称为交叉编译,交叉编译环境不使用有关主机的任何信息来决定构建什么以及如何构建来建造它。因此,忘记伪造uname,而是继续阅读,从交叉编译内核模块开始,然后阅读kbuild 文档