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

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


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

2.3.1  创建磁盘映像文件

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

2.3.2  对磁盘分区

[root@localhost 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
分区表已调整。
正在同步磁盘。

[root@localhost minilinux]#

2.3.3  关联磁盘分区

[root@localhost 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

[root@localhost minilinux]# losetup -o 1048576 /dev/loop0 minilinux_disk.img

2.3.4  格式化分区和挂载分区

[root@localhost minilinux]# mkfs.ext4 /dev/loop0
[root@localhost minilinux]# mkdir /mnt/minilinux
[root@localhost minilinux]# mount -t ext4 /dev/loop0 /mnt/minilinux

2.3.5  安装grub2

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

2.3.6  下载、编译内核

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

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

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

2.3.7  制作initrd

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

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

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

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

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

[root@localhost minilinux]# cp initrd.img /mnt/minilinux/boot/
[root@localhost minilinux]# ls /mnt/minilinux/boot/
bzImage  grub2  initrd.img
[root@localhost minilinux]#

2.3.8  编写grub.cfg

[root@localhost minilinux]# cd /mnt/minilinux/boot/grub2
[root@localhost 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

[root@localhost ~]# cd /mnt/iso/minilinux/
[root@localhost minilinux]# ls
initrd.img  minilinux_disk.img  minilinux_disk.raw  minilinux_disk.vdi
[root@localhost minilinux]#

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

 

posted @ 2019-06-03 15:41  张同光  阅读(1457)  评论(0编辑  收藏  举报