源码编译制作Linux操作系统
1.初始化磁盘
#mkdir /mnt/iso/minilinux && cd /mnt/iso/minilinux
# dd if=/dev/zero of=minilinux.img bs=1M count=128
#parted minilinux.img mklabel msdos
#parted minilinux.img mkpart primary ext4 2048s 100%
# losetup -o 1048576 /dev/loop0 minilinux.img
# mkfs.ext4 /dev/loop0
# mkdir /mnt/minilinux && mount -t ext4 /dev/loop0 /mnt/minilinux
2.安装bootloader
grub2-install --boot-directory=/mnt/minilinux/boot/ --target=i386-pc --modules=part_msdos minilinux.img
3.编译安装内核
内核编译
cd linux-5.13.4
make
make x86_64_defconfig
make menuconfig
general setup-> Initial RAM filesystem and RAM disk -> enable
filesystem -> ext2 -> enable
device drivers-> block devices -> RAM block device support ->enable
make -j4 bzImage
cp arch/x86/boot/bzImage /mnt/minilinux/boot/
4.编译文件系统
cd /mnt/iso/minilinux
dd if=/dev/zero of=initrd.img bs=1M count=4
mkfs.ext4 initrd.img
mkdir /mnt/rootfs
mount -o loop initrd.img /mnt/rootfs
##busybox编译依赖glibc_static可以使用源码编译
cd busybox-1.30.1/
make menuconfig
Settings --->
--- Build Options
[*] Build static binary (no shared libs)
make -j4
make CONFIG_PREFIX=/mnt/rootfs install
mkdir -p /mnt/rootfs/etc/init.d/
gedit /mnt/rootfs/etc/init.d/rcS
#!/bin/busybox sh
echo "Hello miniLinux!"
chmod +x /mnt/rootfs/etc/init.d/rcS
mkdir /mnt/rootfs/dev
mknod /mnt/rootfs/dev/console c 5 1
mknod /mnt/rootfs/dev/ram b 1 0
umount /mnt/rootfs
cp initrd.img /mnt/minilinux/boot/
5.增加grub引导文件
menuentry "minilinux" {
linux (hd0,msdos1)/boot/bzImage root=/dev/ram rw init=/linuxrc noapic
initrd (hd0,msdos1)/boot/initrd.img
}
6.磁盘转换及virtualBox启动
umount /mnt/rootfs
umount /mnt/minilinux
losetup -d /dev/loop0
cd /mnt/iso/minilinux && qemu-img convert minilinux.img -O raw minilinux.raw
VBoxManage convertdd minilinux_disk.raw minilinux_disk.vdi
其中vdi磁盘可以直接在virtualBox中加载磁盘使用