• (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

  • 相关阅读:
    select服务器模型
    网络编程-并发服务器基础
    生产者消费者模型
    readv()和write()sendfile()
    snprintf函数的用法
    struct stat结构体的简介
    half-socket
    结构体struct sockaddr_in, struct sockaddr,struct in_addr
    int main(int argc,char* argv[])的作用
    fgets和fputs,fread和fwrite,fscanf,和fprintf用法小结
  • 原文地址:https://www.cnblogs.com/ztguang/p/12644284.html
Copyright © 2020-2023  润新知