(OK) 自己动手构建Linux发行版---极简版

《自己动手构建Linux发行版》


在 Fedora30 中,root用户进行以下操作:

2.3.1  创建磁盘映像文件

[[email protected] minilinux]# pwd
/mnt/iso/minilinux
[[email protected] minilinux]# dd if=/dev/zero of=minilinux_disk.img bs=1M count=128

2.3.2  对磁盘分区

[[email protected] minilinux]# fdisk minilinux_disk.img
命令(输入 m 获取帮助):n
分区类型
   p   主分区 (0个主分区,0个扩展分区,4空闲)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认  1): 1
第一个扇区 (2048-262143, 默认 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-262143, 默认 262143):

创建了一个新分区 1,类型为“Linux”,大小为 127 MiB。

命令(输入 m 获取帮助):w
分区表已调整。
正在同步磁盘。

[[email protected] minilinux]#

2.3.3  关联磁盘分区

[[email protected] minilinux]# fdisk -l minilinux_disk.img
Disk minilinux_disk.img:128 MiB,134217728 字节,262144 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0d27477d

设备                启动  起点   末尾   扇区  大小 Id 类型
minilinux_disk.img1       2048 262143 260096  127M 83 Linux

[[email protected] minilinux]# losetup -o 1048576 /dev/loop0 minilinux_disk.img

2.3.4  格式化分区和挂载分区

[[email protected] minilinux]# mkfs.ext4 /dev/loop0
[[email protected] minilinux]# mkdir /mnt/minilinux
[[email protected] minilinux]# mount -t ext4 /dev/loop0 /mnt/minilinux

2.3.5  安装grub2

[[email protected] minilinux]# grub2-install --boot-directory=/mnt/minilinux/boot/ --target=i386-pc --modules=part_msdos minilinux_disk.img

2.3.6  下载、编译内核

[[email protected] ~]# cd /opt/linux-smartphone/linux-kernel/
[[email protected] linux-kernel]# ls
linux-5.1.5.tar.xz
[[email protected] linux-kernel]# tar xJvf linux-5.1.5.tar.xz
[[email protected] linux-kernel]# cd linux-5.1.5/
[[email protected] linux-5.1.5]# make x86_64_defconfig
[[email protected] linux-5.1.5]# make menuconfig

Device Drivers  --->
    [*] Block devices  --->
    <*>   RAM block device support

[[email protected] linux-5.1.5]# dnf install openssl-devel elfutils-libelf-devel
[[email protected] linux-5.1.5]# make -j4 bzImage
[[email protected] linux-5.1.5]# cp arch/x86/boot/bzImage /mnt/minilinux/boot/

2.3.7  制作initrd

[[email protected] minilinux]# pwd
/mnt/iso/minilinux
[[email protected] minilinux]# dd if=/dev/zero of=initrd.img bs=1M count=4
[[email protected] minilinux]# mkfs.ext4 initrd.img
[[email protected] minilinux]# mkdir /mnt/rootfs
[[email protected] minilinux]# mount -o loop initrd.img /mnt/rootfs
[[email protected] busybox]# dnf install ncurses-devel
[[email protected] busybox]# tar xjvf busybox-1.30.1.tar.bz2
[[email protected] busybox]# cd busybox-1.30.1/
[[email protected] busybox-1.30.1]# make menuconfig

勾选下面的选项:
Settings  --->
--- Build Options
[*] Build static binary (no shared libs)

[[email protected] busybox-1.30.1]# dnf install glibc-static
[[email protected] busybox-1.30.1]# make -j4
[[email protected] busybox-1.30.1]# make CONFIG_PREFIX=/mnt/rootfs install
[[email protected] busybox-1.30.1]# mkdir -p /mnt/rootfs/etc/init.d/
[[email protected] busybox-1.30.1]# gedit /mnt/rootfs/etc/init.d/rcS

#!/bin/busybox sh
echo "Hello miniLinux!"

[[email protected] busybox-1.30.1]# chmod +x /mnt/rootfs/etc/init.d/rcS
[[email protected] busybox-1.30.1]# mkdir /mnt/rootfs/dev
[[email protected] busybox-1.30.1]# mknod /mnt/rootfs/dev/console c 5 1
[[email protected] busybox-1.30.1]# mknod /mnt/rootfs/dev/ram b 1 0
[[email protected] busybox-1.30.1]# umount /mnt/rootfs
最后生成的 initrd.img文件就是根文件系统

[[email protected] minilinux]# cp initrd.img /mnt/minilinux/boot/
[[email protected] minilinux]# ls /mnt/minilinux/boot/
bzImage  grub2  initrd.img
[[email protected] minilinux]#

2.3.8  编写grub.cfg

[[email protected] minilinux]# cd /mnt/minilinux/boot/grub2
[[email protected] grub2]# cat > grub.cfg << EOF
menuentry "minilinux" {
    linux (hd0,msdos1)/boot/bzImage root=/dev/ram rw init=/linuxrc
    #linux (hd0,msdos1)/boot/bzImage console=tty0
    initrd (hd0,msdos1)/boot/initrd.img
}
EOF

2.4  从VirtualBox运行Linux

[[email protected] ~]# cd /mnt/iso/minilinux/
[[email protected] minilinux]# ls
initrd.img  minilinux_disk.img  minilinux_disk.raw  minilinux_disk.vdi
[[email protected] minilinux]#

qemu-img convert minilinux_disk.img -O raw minilinux_disk.raw
VBoxManage convertdd minilinux_disk.raw minilinux_disk.vdi

 

(OK) 自己动手构建Linux发行版---极简版

(OK) 自己动手构建Linux发行版---极简版