(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM