Linux学习笔记2

书接上文,上次说到了Linux最小内核,今天来说一下制作最小系统的流程

关于制作最小系统【基于itop4412】

可以按照网上比较完善的教程去安装Busybox,之后去利用“mkdir"终端命令完善一些文件夹,比如dev,etc,lib,mnt,proc,sys,tmp,var 文件夹

其中etc文件夹里包含网络相关的配置文件,我们可以使用命令 vi 或者 vim 建立 eth0-setting 文件,写入IP/Mask/Mac/Gateway/DNS【写入 IP、子网掩码、MAC 地址、网关和 DNS 信息的目的是为了手动配置网络接口 eth0 的参数】,之后还得修改一下这个文件的权限。

之后还要建立一个存放启动脚本的目录文件夹init.d,建立ifconfig-eth0脚本【该脚本根据是否存在 /etc/eth0-setting 文件来配置 eth0 网络接口的参数,包括 IP 地址、子网掩码、MAC 地址、网关和 DNS 服务器地址,并输出相应的提示信息】

ifconfig-eth0脚本如下:
#!/bin/sh
echo -n "Try to bring eth0 interface up......" > /dev/ttySAC2
if [ -f /etc/eth0-setting ]; then
    # Source settings from the file
    source /etc/eth0-setting
    # Check if the root filesystem is mounted over NFS
    if grep -q "^/dev/root / nfs " /etc/mtab; then
        echo -n "NFS root ..." > /dev/ttySAC2
    else
        # If not NFS, configure network settings
        ifconfig eth0 down
        ifconfig eth0 hw ether $MAC
        ifconfig eth0 $IP netmask $Mask up
        route add default gw $Gateway
        echo "nameserver $DNS" > /etc/resolv.conf
    fi
else
    # Additional NFS root check, seems redundant, could be an error
    if grep -q "^/dev/root / nfs " /etc/mtab; then
        echo -n "NFS root ..." > /dev/ttySAC2
    else
        # Default configuration if no settings file is found
        /sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up
    fi
fi
echo "Done" > /dev/ttySAC2

代码大意是:先判断有无/etc/eth0-setting 文件,有的话就用souse命令将文件里的参数传输到这个脚本里方便后续使用,

检查 /etc/mtab 文件中是否存在字符串“^dev/root /nfs”,这一句是为了判断系统是不是通过NFS 方式去挂载文件系统的,

补充:

嵌入式系统启动时挂载根文件系统的方式:

  1. 本地存储设备:嵌入式系统可以通过SD卡、eMMC、NAND闪存、Nor闪存等本地存储设备来存储根文件系统。在启动时,系统会从这些存储设备中加载文件系统。

  2. 网络文件系统(NFS):在网络引导系统中,根文件系统可以通过NFS从远程服务器上挂载。这种方式使得系统可以从网络上获取文件系统,而不依赖于本地存储设备。

  3. 其他

以上1和2是比较常用的挂载根文件系统的方式,根文件系统一般被挂载在根目录下,是整个文件系统的起点。它包含了操作系统启动所需的所有文件和目录,以及在系统运行时需要访问的其他文件和数据。

我们在关机或挂起根文件系统时,根文件系统的一些数据什么的会存放在存储设备里,比如SD卡等等,所以在下一次启动的时候我们可以通过去存储设备里寻找根文件系统的数据,然后去挂载根文件系统,这也就是第一种常用的挂载方式。

而NFS是网络文件系统协议,允许在网络上共享文件系统。相比于本地存储设备,NFS可以通过网络将文件系统中的数据提供给远程计算机使用,当一个计算机通过NFS挂载远程文件系统时,实际上是在网络上请求远程服务器提供文件系统的数据。因此,NFS允许计算机在启动时从网络上获取文件系统的数据,而不必依赖本地存储设备。

如果上一步的 grep 命令找到匹配的字符串,就将消息 "NFS root ..." 写入 /dev/ttySAC2 设备中。

如果未找到匹配的字符串,则执行下面的命令——关闭 eth0 接口,设置硬件地址,设置 IP 地址和子网掩码,添加默认网关,并将 DNS 服务器地址写入 /etc/resolv.conf 文件。

补充一下对DNS 的理解:DNS可以将域名映射成计算机可理解的IP地址

  1. 当用户在浏览器中输入一个域名时,比如"baidu.com",系统会首先查询本地DNS缓存,如果找到了对应的IP地址,则直接使用这个IP地址访问网站。
  2. 如果本地缓存中没有找到对应的IP地址,则会向本地配置的DNS服务器发起查询请求。
  3. 如果本地DNS服务器缓存中有对应的IP地址,则返回给客户端。
  4. 如果本地DNS服务器没有缓存对应的IP地址,则会向其他DNS服务器发起递归查询,直到找到对应的IP地址或者查询超时。

如果 /etc/eth0-setting 文件不存在,再次检查 /etc/mtab 文件中是否存在字符串 ^/dev/root / nfs,如果能找到匹配的字符串,就将消息 "NFS root ..." 写入 /dev/ttySAC2 设备中。grep 命令未找到匹配的字符串,则执行默认的网络配置:设置 eth0 接口的 IP 地址为 192.168.253.12,子网掩码为 255.255.255.0,并启用该接口。【其实就是确认是不是用NFS挂载文件系统的,如果不是就用默认配置】

最后一行将消息 "Done" 写入 /dev/ttySAC2 设备中。

之后建立rcS文件(用于初始化系统环境)
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin: runlevel=s

prevlevel=N umask 022

export PATH runlevel prevlevel #

#

Trap CTRL-C &c only in this shell so we can interrupt subprocesses. #

trap ":" INT QUIT TSTP /bin/hostname iTOP-4412

#/bin/mount -n -t proc none /proc #/bin/mount -n -t sysfs none/sys

#/bin/mount -n -t usbfs none /proc/bus/usb #/bin/mount -t ramfs none /dev

[-e/proc/1 ]

ll /bin/mount -n -t proc

none /proc [ -e /sys/class ] |l /bin/mount -n -t sysfs none /sys [-e /dev/tty]

ll /bin/mount

-t ramfs none /dev echo /sbin/mdev > /proc/sys/kerne1/hotplug

/sbin/mdev-s #/bin/hotplug

# mounting file system specified in /etc/fstab mkdir -p/dev/pts

mkdir -p/dev/shm

/bin/mount -n -t devpts none /dev/pts -o mode=0622

/bin/mount -n -t devpts none /dev/pts -o mode=0622 /bin/mount -n -t tmpfs tmpfs /dev/shm

#/bin/mount -n -t ramfs none /tmp #/bin/mount -n -t ramfs none /var mkdir -p/var/empty

mkdir -p /var/log mkdir -p/var/log/boa mkdir -p /var/lock

mkdir -p/var/run )

1 -) 


mkdir -p /var/tmp

In -sf/dev/ttys2/dev/tty2 1n -sf/dev/ttys2/dev/tty3 In -sf/dev/ttyS2 /dev/tty4 syslogd

/etc/rc.d/init.d/netd start echo "

">/dev/tty1 echo "Starting networking..." > /dev/tty1 #sleep 1

#/etc/rc.d/init.d/httpd start #echo "

">/dev/tty1 #echo "Starting web server...">/dev/tty1 #sleep 1

#/etc/rc.d/init.d/leds start #echo "

">/dev/tty1 #echo "Starting leds service..." > /dev/tty1 #echo "


-

#echo " #sleep 1 #echo

>/dev/ttySAC2 #echo

"

http://www.topeet.com.cn

"

>/dev/ttySAC2 #echo

"*:

***

******************

*****

***"

>/dev/ttySAC2 ¥¥¥

#echo

"*************************************" #echo

"

http://www.topeet.com.cn

-1 #echo

****" mkdir /mnt/disk

sleep 1

/sbin/ifconfig lo 127.0.0.1 /etc/init.d/ifconfig-eth0 

脚本分析:设置环境变量 PATH单用户模式,设置文件创建时的权限掩码

PATHrunlevelprevlevel 这三个变量导出,使得它们在后续的脚本中可用。

设置了一组 trap,用于捕获信号并执行相应的操作。这里对 INTQUITTSTP 信号设置了空操作 :,即不做任何处理。

注释:环境变量 PATH,用于指定系统在哪些目录中搜索可执行文件。不仅在Linux有这个概念,Windows也有,Windows环境变量的执行是从上到下执行的,因此需要把一些比较重要的放前面(不然可能会先执行其他的然后受干扰)

单用户模式是计算机系统的一种运行状态,在这个状态下,系统只允许一个用户访问并控制系统。一般用于系统维护和修复问题。

文件创建时的权限掩码(umask)是一个权限掩码,用于确定新创建的文件或目录的默认权限。它是一个八进制数。umask 的工作方式是通过将文件的默认权限与 umask 值进行按位取反的方式来确定最终的权限。通常,umask 会屏蔽掉对应位置上的权限位。例如,如果 umask 的值是 022,则新创建的文件的默认权限为 666(rw-rw-rw-),但 umask 会屏蔽掉 022 中的各个权限位,最终的文件权限会变为 644(rw-r--r--)。

trap 命令用于设置捕获和处理信号的操作,

eg:

trap "echo 'Signal received!'" INT  # 捕获中断信号并执行命令

在这个例子中,trap 命令捕获中断信号,并在捕获到信号时执行 echo 'Signal received!' 命令,即打印一条消息。

之后设置主机名为 iTOP-4412创建 /dev/pts 目录,用于支持伪终端设备;创建 /dev/shm 目录,用于共享内存;

【注释:伪终端设备 :是一种特殊的字符设备(字符设备通常用于表示与计算机进行通信的外部设备,例如键盘、鼠标、打印机、串口等),用于在计算机系统中模拟物理终端设备(例如键盘和显示器),作者本人认为可以我们手机的输入法键盘就是伪终端设备,所以它算挺重要的。

在远程登录和远程 Shell 会话中,伪终端设备允许用户通过网络连接到远程计算机,并与其交互,就像在本地计算机上一样

伪终端设备成对出现,每个主伪终端设备,都会有一个相应的从伪终端设备,如 /dev/pty[pseudo terminal]-[n]/dev/tty[pseudo terminal]-[n]

/dev/pts 目录用于管理伪终端设备

挂载伪终端文件系统到 /dev/pts,设置权限为 0622挂载 tmpfs 文件系统到 /dev/shm创建一系列目录用于日志、锁文件和运行时数据;

注释:tmpfs 是一种基于内存的临时文件系统,数据关机即丢失(因为内存是用DRAM做存储介质),因为其基于内存,所以访问速度快

创建符号链接,将 /dev/ttyS2/dev/ttys2 链接到 /dev/tty4/dev/tty3/dev/tty2;

注释:符号链接(Symbolic Link)是一种特殊类型的文件,假如说一个文件A要链接到另一个文件B的意思是,当访问A的时候其实会访问文件B

/dev/ttyS2/dev/ttys2 分别代表串行端口设备。而/dev/tty4/dev/tty3/dev/tty2 则是虚拟控制台设备(虚拟控制台设备是指在计算机上模拟出来的一种虚拟终端界面,想象一下,你的计算机屏幕就像是一个大型电视墙,分成了几个小屏幕,每个小屏幕上都显示着一个不同的操作界面。这些小屏幕就好比是虚拟控制台,它们可以让你同时进行多个任务,而不需要来回切换通过创建符号链接,将串行端口设备链接到虚拟控制台设备,这样可以通过串行端口与某些设备或系统进行通信,类似于串口助手

启动系统日志服务

注释:系统日志服务通常由一个守护进程(如syslogdrsyslogd)负责管理,它会接收来自系统内核、系统服务、用户程序等的日志消息,并将这些消息写入日志文件中。守护进程通常在系统启动时启动,在系统运行期间一直保持运行状态,为其他应用程序提供服务,可以监控和管理系统资源的使用情况】;

启动网络服务;输出一些提示信息到 /dev/tty1/dev/ttySAC2 设备;

创建 /mnt/disk 目录;

/mnt/disk 目录通常用于挂载额外的存储设备或分区

配置 loopback 接口的 IP 地址为 127.0.0.1

本地回环地址就是计算机用来和自己通信的特殊地址,就好像是计算机的镜子一样,用于测试网络通信和访问本地服务

执行 /etc/init.d/ifconfig-eth0 脚本。

由于内容太长,接下来的见下一篇分析...

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值