最小Linux系统搭建
  BUniBU6Nn1a2 2023年11月02日 67 0


相关连接:https://zhuanlan.zhihu.com/p/645417092

主仓库:https://github.com/buyuer/learnlinux

我们总说linux系统,但到底什么是linux系统?linux系统到底长什么样子?

一个操作系统宏观上分为两个部分,kernel和shell(核和壳),kernel就是操作系统内核,shell在kernel之上,提供与用户交互的界面,包括CLI(命令行界面)和GUI(图形用户界面)。除此之外还有基础运行库(如c库、posix)等基础软件。只有kernel,不能算作一个操作系统,因为什么也做不了。本文通过linux内核和busybox工具集,制作一个最简单的linux系统。(不需要任何开发板,我们使用模拟器来运行)

系统环境为ubuntu-22.04

(wsl2和docker环境也是可以的)

1、安装必要的软件包

更新本地仓库

sudo apt update
sudo apt upgrade

然后安装必要的软件包

sudo apt install build-essential git kconfig-frontends flex bison libelf-dev bc libssl-dev qemu qemu-system-x86

2、创建工作目录

进入到用户目录下

cd ~

创建work目录

mkdir work

进入到work目录下

cd work

后面大部分的操作都将在这个目录下进行,当然work目录创建在非用户根目录下也是可以的

3、获取linux-kernel源码

这里介绍有两种方式获取linux源码

a、直接下载linux内核的源码,并解压,网址如下:

The Linux Kernel Archiveswww.kernel.org/

b、通过git克隆整个仓库

git clone https://github.com/torvalds/linux.git

或者使用国内的镜像

git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux.git

克隆好后切换到最新的stable分支

git checkout v5.19

4、编译linux内核

进入到linux源码的根目录,执行

make ARCH=x86_64 defconfig

这一步是生成.config配置文件,由于我的主机是x86_64的架构,所以使用x86_64的默认配置,如果是arm主机,则将x86_64替换成arm64。

接下来,执行如下命令,开始编译内核的镜像

make bzImage -j

编译大约需要5分钟左右的时间,具体因性能而异,如果编译成功,则会看到如下输出

最小Linux系统搭建_根目录

编译成功后的输出

bzImage就是编译出来的内核镜像文件

5、获取并编译busybox

a、官网直接下载:

busyboxbusybox.net/

下载好后,将源码解压到work目录下

b、通过git克隆到源码到work目录下

git clone https://github.com/mirror/busybox.git

同样我们把busybox切换到稳定的分支上,进入busybox源码根目录

git checkout 1_35_stable

进入到busybox的根目录中,执行:

make menuconfig

最小Linux系统搭建_linux系统_02

编译成功后的输出

按Enter进入到Settings的设置子项里,并通过方向下键选中

[*] Build static binary (no shared libs)

选中后按y键开启这个配置

最小Linux系统搭建_根目录_03

选中Build static binary

按左右方向键选中Exit,并按Enter返回到主菜单,在选中Exit,按Enter退出,并选中Yes确认保存。

最小Linux系统搭建_linux系统_04

退出menconfig

接下来编译busybox

make -j

6、制作根文件系统

首先进入work目录下,生成空的镜像文件

dd if=/dev/zero of=rootfs.img bs=1M count=8

把刚生成的镜像文件格式化为ext4的文件系统

mkfs.ext4 rootfs.img

并创建一个目录用于挂载镜像文件

mkdir ./rootfs

挂载镜像文件

sudo mount -t ext4 -o rw rootfs.img ./rootfs

安装文件系统到rootfs目录下

(注意这里使用root权限创建,因为根目录下的目录默认都是root用户所有,所以我们需要用root权限创建,避免权限问题)

sudo make -C busybox install CONFIG_PREFIX=../rootfs

进入到rootfs目录,并创建相关的文件夹

(注意这里使用root权限创建,原因同上)

sudo mkdir etc dev home root proc sys mnt

这样我们就制作好了一个非常简单的根文件系统,此时的目录结构已经和大部分linux发行版相似了

进入到work目录,并取消挂载

sudo umount rootfs

7、运行最小系统

现在我们有了一个kernal和可以提供shell的文件系统,就可以搭建一个操作系统了,并使用qemu来模拟运行,最终进入到命令行界面。(qemu是一个开源的模拟处理器软件)

qemu-system-x86_64 -kernel ./linux/arch/x86_64/boot/bzImage -hda ./rootfs.img -append "root=/dev/sda console=ttyS0" -nographic

运行之后,不出意外将会看到如下输出

Please press Enter to activate this console.

按Enter就进入到了终端,此时我们已经成功的运行了这个最小的linux系统,键入ls查看目录结构

最小Linux系统搭建_git_05

运行成功

一个最小linux系统的搭建就此完成!!!

Qemu: https://www.python100.com/html/84830.html



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
BUniBU6Nn1a2