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


45

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

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


3
“单独”和“风味”是什么意思?Linux不是一个操作系统,而是一个内核,没有操作系统的内核有什么好处?您是否正在尝试找出引导加载程序的顺序?
卡莱布

3
如果您想了解内核/操作系统是如何进入计算机的,这里是开始的地方。只要确保不要在这里问“新手”问题,他们就会咬你,而是用SO来问他们。
Philomath

3
单独指的是内核,减去用户界面,并包含OpenOffice之类的程序。“风味”是指linux的不同发行版,例如ubuntu,redhat,debian和mandriva。我几乎不知道我在说什么。我在想Linux内核具有一些基本的bash功能,例如DOS。我想我可能对内核和操作系统的想法有些纠结。
cesar

4
是的,您真的被他们缠住了:) Bash只是一个用户级程序,作为由内核管理的进程运行。内核本身除了平台上可以运行其他功能之外,没有提供任何其他功能。Shadur的答案中的LFS(Linux From Scratch)建议是正确的。您将学到很多有关所有不同部分的内容,以及使发行版成为发行版的知识,以及内核的构建以及通过构建暂存系统而开始的用户领域的知识。
卡莱布

2
实际上,DOS kernel也没有任何基本bash功能。标准的用户界面由shell程序提供COMMAND.COM。做任何有用的工作,最接近裸内核的情况是使用kernel参数引导init=/bin/bash(假设磁盘上有最少的Linux)。答案是,如果您只有引导加载程序和内核,则在找不到时它将很快停止init
StarNamer

Answers:


51

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

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


您如何将其放入MBR?
cesar

每个引导加载程序都带有一个用于将自身安装到MBR中的工具。还有一些更友好的工具,例如引导修复(help.ubuntu.com/community/Boot-Repair)。
肖恩·高夫

好吧,您可以创建一个initramfs并将其嵌入到内核映像中,然后仅从内核映像文件就可以拥有一个完全正常工作的系统:-)
Patrick

@ ShawnJ.Goff如果我们提供initramfs,为什么内核会抱怨无法启动init?
Pratik Singhal 2014年

4
@ ps06756如果您具有initramfs,则不是问题所问的内核“独立”。如果initramfs有一个init,内核将不会抱怨。
肖恩·高夫

18

我认为您并不完全了解您的要求,但您可能想看看Linux From Scratch项目。


LFS是弄清楚如何构建最小系统的好主意。或者,您可以查看MINIX(并阅读本书)。或者,对于不同的介绍(工作量少,但信息量少),请查看在aptitude search '?essential'Debian或Ubuntu上标记为“ essential”()的软件包,并了解它们各自的功能(比起最低要求还多了一些)。
吉尔(Gilles)“所以,别再邪恶了”,

12

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

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

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

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

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

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

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

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

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

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


5

单个可执行文件rootfs

绝对最小系统运行一个/init程序,正如我在“ 单一应用程序Linux | Linux”上所解释的那样。超级用户

最少的Linux Live

https://github.com/ivandavidov/minimal

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

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

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

借助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

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

也可以看看


3

我想赞同Shadur的建议,您应该以Linux From Scratch方式弄脏您的手。
另外,类似的方法,请尝试使用Pocket Linux

《 Pocket Linux指南》演示了如何仅使用源代码和几个软盘来构建基于控制台的小型GNU / Linux系统。本手册适用于希望在发行特定功能和工具的笼罩下深入了解其系统工作原理的Linux用户。


2
尽管请注意,没有人在任何重要的生产任务上都建议使用LFS或PocketLinux-它们对于学习事物的工作原理非常有用,但是大多数发行版都附带了全套工具和前端,这是有原因的对于大多数东西。
Shadur

3

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

至少需要一个用户空间程序才能成为“ init”进程(不一定要调用init,但必须由内核作为进程1启动,并且必须是任何孤立进程的自动父进程)-除非内核已被修改(而是而不是简单地定制)以不需要此设置。

尽管可以使开发变得更加容易,但当然不必具有可用的外壳即可具有可运行的基于Linux的设备。


2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.