制作文件系统

执行以下步骤,制作文件系统:

  1. 创建目录结构:
    mkdir rootfs
    cd rootfs
    mkdir dev usr bin sbin lib etc proc tmp sys var root mnt
  2. 下载BusyBox源代码,保存至rootfs文件夹以外的路径:
    git clone https://git.busybox.net/busybox
  3. 找到解压后文件所在位置,并进入BusyBox配置界面:
    cd busybox
    make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv menuconfig
    1. 配置Busybox
  4. 选择Settings > Build Options,按Y检查Build static binary (no shared libs)选项。
    2. 检查Build static binary (no shared libs)
  5. 指定编译器。
    1. Build Options下,选择(riscv64-linux-gnu-) Cross compiler prefix
      3. 选择Cross Compiler Prefix
    2. 执行以下命令指定编译器:
      riscv64-linux-gnu-
  6. 选择Installation Options > Destination path for 'make install'下,将路径更改为rootfs文件目录的路径(即编译后的BusyBox的安装路径)。
    示例:
    /home/user/rootfs
    4. 示例界面
  7. 保存设置内容,退出BusyBox设置窗口。
  8. 编译BusyBox:
    make ARCH=riscv
  9. 安装BusyBox:
    make install
  10. 进入此前创建的rootfs/etc目录,创建一个名为inittab的文件,并使用vim文本编辑器打开。
    cd rootfs/etc
    vim inittab
  11. 复制以下内容,并粘贴到inittab文件内。
    ::sysinit:/etc/init.d/rcS
    ::respawn:-/bin/login
    ::restart:/sbin/init
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r
    ::shutdown:/sbin/swapoff -a
    
  12. rootfs/etc目录下,新建名为profile的文件,并使用vim文本编辑器打开。
    vim profile
  13. 复制以下内容,并粘贴到profile文件内。
    # /etc/profile: system-wide .profile file for the Bourne shells
    echo
    # echo -n "Processing /etc/profile..."
    # no-op
    # Set search library path
    # echo "Set search library path in /etc/profile"
    export LD_LIBRARY_PATH=/lib:/usr/lib
    # Set user path
    # echo "Set user path in /etc/profile"
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export PATH
    # Set PS1
    # Note: In addition to the SHELL variable, ash supports \u, \h, \W, \$, \!, \n, \w, \nnn (octal numbers corresponding to ASCII characters)
    # And \e[xx;xxm (color effects), etc.
    # Also add an extra '\' in front of it! 
    # echo "Set PS1 in /etc/profile"
    export PS1="\\e[00;32m[$USER@\\w\\a]\\$\\e[00;34m"
    # echo "Done"
    
  14. rootfs/etc目录下,新建名为fstab的文件,并使用vim文本编辑器打开。
    vim fstab
  15. 复制以下内容,并粘贴到fstab文件内。
    proc /proc proc defaults 0 0
    none /tmp tmpfs defaults 0 0
    mdev /dev tmpfs defaults 0 0
    sysfs /sys sysfs defaults 0 0
  16. rootfs/etc目录下,新建名为passwd的文件,并使用vim文本编辑器打开。
    vim passwd
  17. 复制以下内容,并粘贴到passwd文件内。
    root:x:0:0:root:/root:/bin/sh
  18. rootfs/etc目录下,新建名为group的文件,并使用vim文本编辑器打开。
    vim group
  19. 复制以下内容,并粘贴到group文件内。
    root:x:0:root
  20. rootfs/etc目录下,新建名为shadow的文件,并使用vim文本编辑器打开。
    vim shadow
  21. 复制以下内容,并粘贴到shadow文件内。
    root:BAy5qvelNWKns:1:0:99999:7:::
  22. rootfs/etc目录下,新建名为init.d的目录,并到该目录下。
    mkdir init.d
    cd init.d
  23. rootfs/etc目录下,新建名为rcS的文件,并使用vim文本编辑器打开。
    vim rcS
  24. 复制以下内容,并粘贴到rcS文件内。
    #! /bin/sh
    #echo "----------mount all"
    /bin/mount -a
    #echo "----------Starting mdev......"
    #/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    echo "********************************************************"
    echo " starfive mini RISC-V Rootfs"
    echo "********************************************************"
    
  25. 进入此前创建的rootfs/dev目录,并执行以下操作:
    1 cd rootfs/dev
    2 sudo mknod -m 666 console c 5 1
    3 sudo mknod -m 666 null c 1 3
  26. 在rootfs的根目录下新建软链接:
    1 cd rootfs/
    2 ln -s bin/busybox init
    
  27. 修改rootfs目录中所有文件的权限:
    sudo chmod 777 -R *
  28. 在rootfs目录下,执行以下命令在指定目录下生成rootfs.cpio.gz (cpio文件系统包)。
    1 cd rootfs
    2 find .| cpio -o -H newc | gzip > /home/user/Desktop/rootfs.cpio.gz
    注: 系统成功执行命令后,将在桌面上生成名为rootfs.cpio.gz的文件。您也可以根据需要,将命令中的目录修改为其它路径。如果您的CPU中有8个内核,请将其更改为-j8。该过程较为耗时,请您耐心等待。