05步:制作根文件系统
  BUniBU6Nn1a2 2023年11月17日 28 0

5.1 编译、安装根文件系统

根文件系统的安装方法有很多,这里我们为了方便,安装最为简单和轻量的busybox


1. # cd /home/tftpboot
2. # mkdir filesys
3. # cd filesys
4. # wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
5. # tar -xvf busybox-1.35.0.tar.bz2
6. # cd busybox-1.35.0
7. # sudo mkdir -p /home/nfs
8. # sudo chmod 777 /home/nfs/

配置Makefile


1. # gedit Makefile +191

和编译kernel的时候一样,ARCH和CROSS_COMPILE配置成arm编译器


1. ARCH ?= arm
2. CROSS_COMPILE =-linux-gnueabi-

05步:制作根文件系统_根文件系统

和kernel一样,输入make menuconfig进行一些配置
(1) 设置一下编辑器环境,方便操作:
Settings —-> [*] vi-style line editing commands (New)

(2) 设置一下安装路径,避免错误安装在根目录
Settings —-> Destination path for ‘make install’

进入以后,输入自己的rootfs的路径(我这里的路径是: /home/nfs)

05步:制作根文件系统_根目录_02

设置完毕,设置编译安装:

  1. # make install -j 2

无需再输入单独的编译命令,没有编译的话默认是会编译好了再安装的

注意!!!!!这里不要以root用户编译也不要加sudo编译,防止安装到根目录里,破坏Ubuntu

我们通常设置的安装模式安装到的/home/tftpboot已经给了最高权限,是肯定可以安装的,如果错误设置不安装到这个地方就会因为没有权限导致安装不上,从而完全避免了安装到根目录导致Ubuntu崩溃的问题。

如下图,就是错误的将安装目录设置为根目录的时候,因为没有权限没有执行安装过程,从而避免了因为错误安装导致的系统崩溃。

05步:制作根文件系统_根目录_03


正常安装以后:

05步:制作根文件系统_根文件系统_04


基本系统的功能是有了,接下来的功能便是安装动态链接库、设置设备节点、设置初始化进程、设置文件系统、设置环境变量

5.2 完成完整的根文件系统的构建

5.2.1 安装动态链接库

通过apt安装的arm编译器,动态链接库路径通常为:/usr/arm-linux-gnueabi/lib,复制到根文件系统的lib下


1. # cd /home/nfs
2. # mkdir lib
3. # cd /usr/arm-linux-gnueabi/lib
4. # cp *.so* /home/nfs/lib -d

若在运行linuxrc时失败,库的版本不兼容等,解决方法是编译busybox时,配置静态编译:


1. [*]Build(no shared libs)

这样linuxrc运行时就不依赖动态库了,就可以正常运行了。

5.2.2 创建设备结点

    1. # cd /home/nfs
    2. # mkdir dev
    3. # cd dev
    4. # sudo mknod -m 666 tty1 c 4 1
    5. # sudo mknod -m 666 tty2 c 4 2
    6. # sudo mknod -m 666 tty3 c 4 3
    7. # sudo mknod -m 666 tty4 c 4 4
    8. # sudo mknod -m 666 console c 5 1
    9. # sudo mknod -m 666 null c 1 3

    5.2.3 设置初始化进程/etc/rcS


    1. # cd /home/nfs
    2. # mkdir -p etc/init.d
    3. # cd etc/init.d
    4. # touch rcS
    5. # chmod 777 rcS
    6. # gedit rcS

    将以下内容加入rcS中


    1. #!/bin/sh
    2. PATH=/bin:/sbin:/usr/bin:/usr/sbin 
    3. export=/lib:/usr/lib
    4. /bin/mount -n -t ramfs ramfs /var
    5. /bin/mount -n -t ramfs ramfs /tmp
    6. /bin/mount -n -t sysfs none /sys
    7. /bin/mount -n -t ramfs none /dev
    8. /bin/mkdir /var/tmp
    9. /bin/mkdir /var/modules
    10. /bin/mkdir /var/run
    11. /bin/mkdir /var/log
    12. /bin/mkdir -p /dev/pts
    13. /bin/mkdir -p /dev/shm
    14. /sbin/mdev -s
    15. /bin/mount -a
    16. echo "-----------------------------------"
    17. echo "*****welcome to vexpress board*****"
    18. echo "-----------------------------------"

    5.2.4 设置文件系统/etc/fstab


    1. # cd /home/nfs/etc
    2. # touch fstab
    3. # gedit fstab

    输入以下内容:


    1. proc/proc           proc00
    2. none    /dev/pts        devpts  mode=062200
    3. mdev    /dev            ramfs   defaults        00
    4. sysfs   /sys            sysfs   defaults        00
    5. tmpfs   /dev/shm        tmpfs   defaults        00
    6. tmpfs   /dev            tmpfs   defaults        00
    7. tmpfs   /mnt            tmpfs   defaults        00
    8. var/dev            tmpfs   defaults        00
    9. ramfs   /dev            ramfs   defaults        00

    5.2.5 设置初始化脚本/etc/inittab


    1. # cd /home/nfs/etc
    2. # touch inittab
    3. # gedit inittab

    输入以下内容:


    1. ::sysinit:/etc/init.d/rcS
    2. ::askfirst:-/bin/sh
    3. ::ctrlaltdel:/bin/umount -a -r

    5.2.6 设置环境变量/etc/profile


    1. # cd /home/nfs/etc
    2. # touch profile
    3. # gedit profile

    输入以下内容:


    1. USER="root"
    2. LOGNAME=$USER
    3. export=`cat /etc/sysconfig/HOSTNAME`
    4. export=root
    5. export=/root
    6. export="[$USER@$HOSTNAME \W]\# "
    7. PATH=/bin:/sbin:/usr/bin:/usr/sbin
    8. LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
    9. export PATH LD_LIBRARY_PATH

    5.2.7 增加主机名/etc/sysconfig/HOSTNAME


    1. # cd /home/nfs/etc
    2. # mkdir sysconfig
    3. # cd sysconfig
    4. # touch HOSTNAME

    输入以下内容:


    1. vexpress

    5.2.8 创建剩下的文件夹


    1. # cd /home/nfs
    2. # mkdir mnt proc root sys tmp var

    5.3 封装构建好的根文件系统,并挂载


    1. # cd /home/
    2. # sudo mkdir temp
    3. # sudo dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
    4. # sudo mkfs.ext3 rootfs.ext3
    5. # sudo mount -t ext3 rootfs.ext3 temp/ -o loop
    6. # sudo cp -r nfs/* temp/
    7. # sudo umount temp
    8. # sudo mv rootfs.ext3 tftpboot
    9. # cd /home/tftpboot
    10. # sudo gedit start.sh

    更改启动脚本start.sh:
    和前面一样,root登录才能启动


    1. qemu-system-arm \
    2. -M vexpress-a9 \
    3. -m 512M \
    4. -kernel zImage \
    5. -dtb vexpress-v2p-ca9.dtb \
    6. -nographic \
    7. -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
    8. -sd rootfs.ext3

    如图,挂载成功,内核版本也是课程配套的5.10.99版本

    05步:制作根文件系统_根文件系统_05


    如果想设置为LCD启动的话,将start.sh改一下就好


    1. qemu-system-arm \
    2. -M vexpress-a9 \
    3. -m 512M \
    4. -kernel zImage \
    5. -dtb vexpress-v2p-ca9.dtb \
    6. -append "root=/dev/mmcblk0 rw console=tty0" \
    7. -sd rootfs.ext3

    效果图如图:

    05步:制作根文件系统_根目录_06


    【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

    1. 分享:
    最后一次编辑于 2023年11月17日 0

    暂无评论

    推荐阅读
    BUniBU6Nn1a2