从零开始构建一个小型 Linux

主要观点:作者从 scratch 构建了一个 2.5MB 的 tiny Linux 系统并在笔记本电脑上启动,展示了构建过程及遇到的问题和解决方法,包括构建 Linux 内核、在 QEMU 中启动、编写 init 程序、构建 initramfs、在 UEFI 系统上启动等,还提及后续想尝试的事情及参考文章等。
关键信息:

  • 遵循“Linux From Scratch”项目,使用 Nix 管理工具和库,从下载 Linux 内核源代码开始,配置并编译生成 bzImage。
  • 在 QEMU 中启动内核时遇到缺少 ncurses 库等问题,通过切换到 Nix flake 解决,还需开启 printk 等功能才能显示启动日志。
  • 编写用 Rust 实现的 init 程序,创建 initramfs 并解决相关编译错误,添加 Busybox 以获得更实用的 shell,解决其编译过程中的网络相关错误等。
  • 为在 UEFI 系统上启动,进行一系列配置和准备工作,包括创建 EFI 系统分区、复制文件等,最终在虚拟机和真实硬件上成功启动。
    重要细节:
  • 下载 Linux 内核源代码的命令及配置方式,如git clone --depth=1 --branch=v6.12 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.gitmake tinyconfig等。
  • 在 QEMU 中启动内核的命令及各种错误和解决方法,如qemu-system-x86_64 -kernel arch/x86/boot/bzImage及缺少 ncurses 库的错误处理。
  • 编写 init 程序的 Rust 代码及相关编译设置,如use std::io::Write;等。
  • 构建 initramfs 的命令及流程,如find. -print0 | cpio --null --create --verbose --format=newc | gzip --best >../initrd
  • 在 Busybox 编译过程中遇到的各种错误及解决方式,如网络相关错误的禁用等。
  • 在 UEFI 系统上启动的相关配置和操作,如创建 EFI 系统分区、使用 OVMF 等。
阅读 8
0 条评论