制作 Linux 根文件系统镜像

运行环境

系统版本Ubuntu 22.04 LTS
内核版本5.15.0-25-generic
GCC版本gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0

源码下载

需要准备 Linux 内核源码和 busybox 源码

内核源码下载地址(我选择的是 linux-5.17.4)

https://kernel.org/

官网

https://mirrors.aliyun.com/linux-kernel/

阿里

http://tel.mirrors.163.com/kernel/

网易

https://mirrors.cloud.tencent.com/linux-kernel/

腾讯

busybox 下载地址(我选择的是 busybox-1.35.0)

https://busybox.net/

官网

安装必备的软件包

sudo apt install  bison  flex libncurses-dev libelf-dev libssl-dev qemu-system-x86

编译内核

分别执行以下命令

make x86_64_defconfig    // 配置系统架构,64位操作系统选 x86_64, 32位操作系统选 x86
make menuconfig
make

注意:make menuconfig 时需要做一些配置如下

进入 General setup  --->
     [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support // 勾选此项

进入 Device Drivers  ---> 
        Block devices  --->
            RAM block device support // 勾选该项目
                Default RAM disk size (kbytes) // 并设置此项 为 65536(32MB 大小)

 编译完成后将生成 arch/x86_64/boot/bzImage

编译 busybox

分别执行以下命令

make menuconfig
make && make install

执行 make menuconfig 时做以下配置

进入 Settings  ---> 
     --- Build Options
        [*] Build static binary (no shared libs) // 勾选此项,编译成静态链接库

编译完成后将在 busybox 目录下生成 _install 目录,如下所示:

$ ls _install/
bin  linuxrc  sbin  usr

制作根文件系统 

创建一个 rootfs 目录并进入,然后将 busybox 生成的 _install 目录中的所有文件拷贝进 rootfs 目录。然后执行命令 mkdir -p mnt etc/init.d proc sys tmp dev。最终 rootfs 目录如下:

$ ls rootfs/
bin  dev  etc  linuxrc  mnt  proc  sbin  sys  tmp  usr

创建 /etc/init.d/rcS 文件

文件内容如下:

$ cat etc/init.d/rcS 
#!/bin/sh
echo "welcome my linux"

/bin/mount -a                       # mount 命令来挂载所有的文件系统 文件系统由文件/etc/fstab说明
mkdir /dev/pts                      # 创建目录 /dev/pts
mount -t devpts devpts /dev/pts     # 将 devpts 挂载到 /dev/pts 目录

创建 etc/inittab 文件

文件内容如下(参考 busybox-1.35.0/examples/inittab):

# This is run first except when booting in single-user mode.
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh

# Stuff to do when restarting the init process
::restart:/sbin/init

# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

创建 /etc/fstab 文件

文件内容如下:

proc              /proc             proc        defaults    0        0
tmpfs             /tmp              tmpfs       defaults    0        0
sysfs             /sys              sysfs       defaults    0        0

最后加权限:

chmod 755 /etc/fstab

chmod 755 /etc/inittab

chmod 755 /etc/init.d/rcS

制作根文件系统镜像文件

制作步骤:

1、先制作一个空的镜像文件

2、然后把此镜像文件格式化为ext4格式

3、然后把此镜像文件挂载,并把根文件系统复制到挂载目录

4、卸载该镜像文件

5、打成gzip包

#!/bin/sh
rm -f romfs rootfs.ext4 rootfs.img.gz
dd if=/dev/zero of=rootfs.ext4 bs=1M count=32
mkfs.ext4 rootfs.ext4
mkdir -p romfs
sudo mount -o loop rootfs.ext4 romfs
sudo cp -rf rootfs/* romfs
sudo umount romfs
gzip --best -c rootfs.ext4 > rootfs.img.gz

启动系统:

qemu-system-x86_64 -kernel linux-5.17.4/arch/x86_64/boot/bzImage -initrd rootfs.img.gz -append "root=/dev/ram init=/linuxrc"

运行结果如下:

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux 文件系统制作方法有很多,常见的有以下几种: 1. 使用已有的 Linux 发行版镜像,如 Debian、Ubuntu、CentOS 等 2. 使用操作系统安装工具,如 debootstrap、yum 等 3. 手动构建,在纯净系统中手动安装基本系统和必要软件,适用于需要定制系统的场景。 具体的制作过程取决于使用的方法,建议您搜索相关教程或询问更专业的人员。 ### 回答2: Linux文件系统Linux系统的核心。当一个Linux系统启动时,它会首先加载文件系统,该文件系统包含了内核驱动程序和其他文件,这些文件为系统中所有进程和服务提供支持。 制作Linux文件系统的过程通常分为以下三个步骤: 1.选择Linux发行版 制作Linux文件系统的第一步是选择一个Linux发行版,因为Linux发行版提供了包含内核和大量软件的完整操作系统,可以作为我们制作文件系统的基础。最流行的Linux发行版包括Red Hat、Debian、Ubuntu等等。 2.安装基本包 第二步是安装基本的Linux包,这些包包括像binutils、coreutils、findutils、glibc、grep、sed、tar、bash等工具。这些工具是Linux中必不可少的,因为它们为系统提供了标准的命令行工具和库。 3.安装必要的软件包 第三步是安装我们需要的软件包,这些软件包包括Apache、MySQL、PostgreSQL、PHP、Python等等。这些软件包提供了我们在这个Linux系统上运行的应用程序和服务。 在制作Linux文件系统的过程中,我们应该考虑以下几个因素: 1.文件系统 我们可以选择一个合适的文件系统,通常是EXT4。EXT4是一个快速并且安全的文件系统,适用于大多数的Linux系统。 2.内核配置 Linux内核提供了大量的选项来定制我们的系统,我们可以通过内核配置文件自定义内核并增加适应性。在内核配置时,我们应该据自己的需求进行选择,以确保我们的文件系统能够顺利地运行。 3.调整系统设置 我们还需要调整系统设置,以确保系统在运行时能够最大化效率。这包括在/etc/fstab文件中添加挂载点、在/etc/sysctl.conf文件中添加内核参数和在/etc/hosts中添加主机名等。 总之,在制作Linux文件系统时,我们需要严格控制所有组件的配置、组合等元素,以确保它们在部署后能够稳定地运行。 ### 回答3: Linux文件系统是一个在启动Linux系统时必要的部分。在Linux系统中,文件系统扮演着存储系统文件、部分二进制程序和一些必要的库文件的角色。它的制作是系统启动的一个必要的流程,因此对Linux系统的运行至关重要。 我们制作Linux文件系统的具体步骤如下: 1.创建一个文件系统的设置目录: 为了创建文件系统,我们需要先创建一个保存整个文件树的目录。这个目录是整个文件系统目录的一个虚拟影像。我们创建这个目录并命名为“rootdir”。 mkdir rootdir 2.添加必要的文件和目录: 接下来,我们需要将一些必要的文件和目录添加到rootdir中,包括“/dev”,“/tmp”和“/proc”等目录,它们都是操作Linux系统所必需的目录。这一步有些繁琐而且需要一定的Linux操作技能。 3.编辑并生成文件系统配置文件: 现在我们需要创建文件系统的配置文件。这个文件是存储我们之前所做的设置的基础,用于生成文件系统。 下面是一个示例配置文件: IMAGE_ROOTFS_TYPE="ext4" IMAGE_ROOTFS_EXTRA_SPACE=0 IMAGE_ROOTFS_SIZE="" IMAGE_ROOTFS_BLOCKSIZE=4096 IMAGE_ROOTFS_INODE_SIZE=256 使用您选择的文本编辑器,您需要编辑该文件,以便它与您的所需的设置相匹配。 4.使用genext2fs或其他工具生成文件系统: 一旦配置文件完成,我们将使用genext2fs或其他工具据配置文件生成文件系统。例如: sudo genext2fs -b $IMAGE_ROOTFS_BLOCKSIZE -i $IMAGE_ROOTFS_INODE_SIZE -M "/" -N $IMAGE_ROOTFS_BLOCK_COUNT -m ${IMAGE_ROOTFS_EXTRA_SPACE} -d rootdir/ $ROOTFS_IMAGE 此命令创建一个名为ROOTFS_IMAGE的文件系统。 以上就是制作Linux文件系统的基本步骤。当您成功创建一个文件系统时,它将允许您运行一些基本的Linux命令,并开始在您的计算机上运行Linux系统。但请注意,在此过程中涉及到许多细节和配置,并需要一定的Linux操作经验,否则可能会遇到一些问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值