• 成功启动系统和通过nfs挂载根文件系统后进行相关的系统配置和优化


    在上一次成功移植内核通过tftp方式下载内核并且通过nfs方式挂载根文件系统后,基本就可以看到在系统启动后有控制台输出,但是会一直报错,原因就是根文件系统缺少部分文件,在系统启动挂载根文件系统时需要运行相关文件,比如rcS,inittab,profile等文件,导致控制台会一直输出相关错误信息。
    接下来就是对系统进行相关的配置

    需要配置的文件有
    在这里插入图片描述

    第一步就是在根文件目录下的etc/下添加inittab文件

    #first:run the system script file 运行系统时先运行的脚本
    ::sysinit:/etc/init.d/rcS
    ::askfirst:-/bin/sh
    ::ctrlaltdel:-/sbin/reboot
    #umount all filesystem
    ::shutdown:/bin/umount -a -r
    #restart init process
    ::restart:/sbin/init
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里提一下这个文件下文本的命令格式为id:runlevel:action:process
    id:字段:action:process
    再重新启动系统就可以看到提示,进入控制台也没有相关的报错信息输出,应该说在进入控制台后
    在这里插入图片描述
    首先通过分析可知,在初始化时执行 /etc/init.d/rcS ,可以看到这里的rcS就是一个初始化脚本,导出环境变量,设置runlevel即运行模式为S(单用户模式)和prevlevel
    umask是设置创建目录时默认的权限,这里为022,在Linux下可以通过命令umask查出其默认创建目录的权限
    接下来就是导出runlevel和prevlevel
    mount -a 用来挂载文件系统的,mount -a的意思是挂载所有的应该挂载的文件系统,在busybox中mount -a时会去查找一个文件/etc/fstab、并执行这个文件
    默认没有这个sysconfig目录和HOSTNAME文件,需要创建
    /bin/hostname -F /etc/sysconfig/HOSTNAME下的HOSTNAME存放的就是主机名,启动后用来设置系统主机名的
    ifconfig eth0 192.168.1.20设置网络ip,建议和uboot设置的一致,不然通过nfs挂载会断开重连需要时间,也很麻烦

    #!/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    
    runlevel=S
    prevlevel=N
    
    umask 022
    
    export PATH runlevel prevlevel
    
    mount -a
    
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    
    /bin/hostname -F /etc/sysconfig/HOSTNAME
    
    ifconfig eth0 192.168.1.20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    下一个文件fstab

    # /etc/fstab: static file system information.
    #
    # Use 'vol_id --uuid' to print the universally unique identifier for a
    # device; this may be used with UUID= as a more robust way to name devices
    # that works even if disks are added and removed. See fstab(5).
    #
    #                        
            proc                    /proc                   proc    defaults        0               0
            sysfs                   /sys                    sysfs   defaults        0               0
            tmpfs                   /var                    tmpfs   defaults        0               0
            tmpfs                   /tmp                    tmpfs   defaults        0               0
            tmpfs                   /dev                    tmpfs   defaults        0               0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    和挂载相关的

    启动后登陆login设置
    还有后面需要设置启动登陆后再进入控制台的,第一需要在inittab文件下的#::askfirst:-/bin/sh替换成::askfirst:-/bin/login

    #first:run the system script file
    ::sysinit:/etc/init.d/rcS
    #::askfirst:-/bin/sh
    ::askfirst:-/bin/login
    ::ctrlaltdel:-/sbin/reboot
    #umount all filesystem
    ::shutdown:/bin/umount -a -r
    #restart init process
    ::restart:/sbin/init
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    除此之外还需要在Ubuntu下的etc/下拷贝passwd和shadow两个文件到所挂载的根文件系统下的etc/目录下,对其进行一定的修改
    passwd文件
    在这里插入图片描述
    shadow文件
    在这里插入图片描述
    这里的是含有密码的,而且这个密码进行的加密,这里的这个文件下只看到了这个XEkxNPCSDuKwQ是其加密后的密文,对于我们刚移植可以不需要这个,先将其删除后发现登陆只需要输入用户名而不需要密码,回车即可进入控制台,可以通过passwd root的方式进行设置密码。
    配置完成功启动后挂载根文件系统的效果
    在这里插入图片描述

    多提一嘴:有可能会发现系统启动后控制台输出没有init.d/rcS这个文件,可能是在在windows下编辑的这个文件,需要在串口输出的控制台下打开这个文件删除每一行后面的^M字符,太多坑了。。。

  • 相关阅读:
    Codeforces Round 897 (Div. 2)
    ThreadLocal的简单理解
    【华为机试题分析】 6 质数因子
    一命通关双指针
    2022最新windows上传ipa文件到app store的方法
    Centos7离线安装mysql8 glibc版本
    Java中的堆和栈
    Keil Assistant 插件 fromelf.exe路径报错及hex、bin、axf、elf文件之间关系
    基础夯实,字节内部总结240道算法LeetCode刷题笔记,直呼太全
    李宏毅生成式AI课程笔记(持续更新
  • 原文地址:https://blog.csdn.net/hwf1877655/article/details/126894348