it-swarm.cn

是否可以单独安装Linux内核?

我只是好奇是否可以单独安装Linux内核,或者是否需要使用其中一种。如果可能,您将如何做?我不需要详细的教程。我只想知道它将在概念上如何完成。我对低级的东西不好,并且想知道如何将操作系统带入计算机。我想这与MBR有关。

哦,我注意到很多答案都表明某些最小Linux的一定分布。我可能应该说过,我并不想安装最小或裸露的Linux。这个问题纯粹是理论上的。尽管如此,我还是非常感谢所有答案,如果我想安装真正个性化的Linux,请立即参考它们。

50
cesar

从技术上讲,您可以仅安装一个引导程序和一个内核,但是一旦内核启动,它将抱怨无法启动“ init”,然后它会停在那儿,您将无法对其进行任何操作。

顺便说一句,它是MBR中引导加载程序的一部分。内核位于磁盘的常规区域中的某个位置。引导加载程序已配置为知道该位置,因此它可以加载内核并执行它。

54
Shawn J. Goff

我不认为您确切了解您的要求,但是您可能想看一看 Linux From Scratch 项目。

20
Shadur

如果您要问是否可以仅在现有系统上“安装”或升级内核而不安装其他程序?

Linux内核是二进制文件,通常在boot目录(通常是硬盘驱动器开头的一个单独的小分区)中的vmlinuz-x.x.x-x-name中,其中x是版本号。 “名称”只是可以在编译时设置的内核的选定名称,您可以使用它来识别内核是出于何种类型的计算机或体系结构或任何其他原因。

它是在引导时由引导加载程序加载的,通常是GRUB,它由BIOS ROM调用的MBR中的引导代码调用。一旦加载,它就不会“保持打开状态”或受到特别保护。因此,您可以使用另一个工作内核替换该文件。但是,GRUB具有很酷的功能,可让您选择要从中引导的多个内核。因此,将其他内核添加到该列表中是非常明智的,但是保留原始已知的工作内核,以防万一出错。

我相信几乎所有发行版都构成一个“模块化”内核,其中设备驱动程序位于单独的文件中。因此,大多数内核需要一个文件系统,该文件系统包含启动时可用的驱动程序,这就是“ initrd”(初始RAM disk)或“ initramfs”)的作用。GRUB将将内核加载到内存中的某个位置,将initrd加载到其他位置,然后跳转到内核并告诉initrd所在的位置,从而启动Linux。

驱动程序也可以“内置”在内核中,因此会在引导加载程序加载vmlinuz映像时自动加载并可用。打算在各种系统(例如,大多数发行版的系统)上工作的内核通常会最小化内核中内置的内核,因为可用硬件将在引导过程中稍后进行扫描,并且仅加载代表当前硬件的模块。

有一些工具可以修改和创建initrds。 Debian有不错的工具,我想其他发行版也可以。

因此,如果您从kernel.org下载更新的内核并进行编译以创建新的内核二进制映像,则需要使用适用于该内核的驱动程序来制作或更新initrd。旧的initrd无效,因为驱动程序必须与正在运行的内核版本匹配。

该initrd文件的名称类似于initrd.img-x.x.x.x-name,与内核类似,可以在启动后像内核一样替换,并且最佳实践将表明您在知道可以启动到新内核之前不会删除已知的initrd。 + initrd成功。

我希望能提供一些背景信息。

如果您正在寻找“准系统” Linux安装,几乎没有安装任何其他程序,那么我最喜欢的选择一直是安装Debian netinst映像。您几乎只拥有运行命令行文本控制台和nano作为文本编辑器所需的最基本工具。

13
LawrenceC

单个可执行rootfs

绝对最小系统运行一个/init程序,正如我在 Single Application Linux |超级用户

最低Linux Live

https://github.com/ivandavidov/minimal

对于更有趣的交互式系统,这是一个(主要是教育性的)小脚本,其中:

  • 下载内核和busybox的源代码
  • 编译它们
  • 用它们生成可引导的8Mb ISO

然后,ISO会将您留在带有busybox的最小Shell中。

借助QEMU,您可以轻松启动系统。

我已经对其进行了修改,以允许从内核源目录运行它: https://github.com/cirosantilli/runlinux

用法:

git clone https://github.com/ivandavidov/minimal
cd minimal/src
./build_minimal_linux_live.sh
# Wait.
# Install QEMU.
# minimal_linux_live.iso was generated
./qemu64.sh

然后您将被留在QEMU窗口中,并带有新的最小系统。太棒了.

由于它很小,因此是阅读源代码并了解正在发生什么的一个不错的选择。

在Ubuntu 16.04上测试。

Buildroot

https://buildroot.org/

大型的Makefile脚本管理:

  • GCC交叉编译工具链
  • 内核编译
  • 引导程序编译
  • rootfs的生成
  • 在源代码树中有大量的软件包下载/构建配方,包括GTK之类的复杂内容。有一个依赖系统。

最小示例:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
# Can't use -jN, use `BR2_JLEVEL=2` instead.
BR2_JLEVEL=2 make
# Wait.
# cat board/qemu/x86_64/readme.txt
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -Net User
# You are now in a Shell with BusyBox utilities.

它甚至包含从零开始构建X11的方法: 如何在我自己的Linux Buildroot系统上安装X11?

专业的东西。

高山Linux

https://github.com/gliderlabs/docker-Alpine

带有软件包管理器的嵌入式分发,该软件包管理器从网站提供预编译的二进制文件。

另请参阅

无需通常的用户空间工具就可以安装Linux内核。这通常在路由器等嵌入式系统中完成。通常,内核是从ROM或闪存)加载的,并且已针对相关设备进行了自定义(通常将所需的驱动程序编译到内核中,而不是作为模块加载)。

至少需要存在一个用户空间程序才能成为“ init”进程(不一定称为init,但由内核作为进程1启动,并且是任何孤立进程的自动父进程)-除非内核已经过修改(而不是简单定制),不需要此功能。

尽管可以使开发变得容易得多,但不一定要有可用的Shell才能有可用的基于Linux的设备。

3
Toby Speight

我想再说一遍 Shadur's 建议您以“从零开始”的方式弄脏Linux。
另外,类似的方法,请尝试 Pocket Linux

《 Pocket Linux指南》演示了如何仅使用源代码和几个软盘来构建基于控制台的小型GNU/Linux系统。它适用于希望深入了解发行版特定功能和工具的系统工作方式的Linux用户。

3
Philomath

许多发行版提供“核心”安装。这就是你想要的。参见ubuntu-minimal,debian net-install,archlinux(默认只是核心)。

如果您想学习,其他答案很有用,但是可能不是这样= p

2
user606723