前文提到 sophpi 默认没有使能有线网络,需要手工配置:
[root@sg200x]~# ifconfig eth0 up
[root@sg200x]~# udhcpc -i eth0
[root@sg200x]~# ifconfig
eth0 Link encap:Ethernet HWaddr EA:BD:18:08:1E:87
inet addr:192.168.188.142 Bcast:192.168.188.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:175 errors:0 dropped:97 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:51162 (49.9 KiB) TX bytes:684 (684.0 B)
Interrupt:21
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
本文将介绍如何通过配置文件启动自动使能有线网络。
/etc/inittab 文件
在 buildroot 文件系统目录 /etc/inittab
文件中,定义了系统启动后执行的脚本程序。文件内容如下:
# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen <[email protected]>
#
# Note: BusyBox init doesn't support runlevels. The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id == tty to run on, or empty for /dev/console
# runlevels == ignored
# action == one of sysinit, respawn, askfirst, wait, and once
# process == program to run
# Startup the system
::sysinit:/bin/mount -t proc proc /proc
::sysinit:/bin/mount -o remount,rw /
::sysinit:/bin/mkdir -p /dev/pts /dev/shm
::sysinit:/bin/mount -a
::sysinit:/sbin/swapon -a
null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd
null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin
null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout
null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr
::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the serial port
# console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL
console::respawn:/sbin/getty -L console 115200 vt100 -n -l /usr/local/bin/autologin
# Stuff to do for the 3-finger salute
#::ctrlaltdel:/sbin/reboot
# Stuff to do before rebooting
::shutdown:/etc/init.d/rcK
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
可以看到,系统启动后会执行 /etc/init.d/rcS 脚本程序,该脚本程序会执行 /etc/init.d/ 目录下的所有脚本程序。
/etc/init.d
在系统目录 /etc/init.d/ 下的脚本用于管理系统服务的启动和停止,而 /etc/profile.d/ 目录下的脚本用于配置用户的环境变量和初始化,它们会在用户登录时被执行。
因此,在系统启动过程中,/etc/init.d/ 目录下的脚本会比 /etc/profile.d/ 目录下的脚本先执行。/etc/init.d/ 中的脚本用于启动、停止、重启系统服务,而 /etc/profile.d/ 中的脚本用于配置用户环境。
/etc/init.d/ 目录下有两个脚本程序 rcS 和 rcK。
- rcS 是系统开机后执行的脚本,名称中的 S 是 Start 的意思。
- rcK 是系统收到关机命令后执行的脚本,名称中的 K 是 Kill 的意思。
/etc/init.d/rcS 脚本程序内容如下:
#!/bin/sh
# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do
# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i start
;;
esac
done
查看 /etc/init.d/rcS
里面会执行启动脚本,文件里面的数字 number 决定执行的顺序 .S 后面的数字表示启动的顺序,数字小的先启动。比如 “S20urandom” 会比"S40network" 先启动。
S40network
在 buildroot 文件系统目录 /etc/init.d/
下的 S40network
脚本程序用于启动网络服务,文件内容如下:
#!/bin/sh
#
# Start the network....
#
# Debian ifupdown needs the /run/network lock directory
mkdir -p /run/network
case "$1" in
start)
printf "Starting network: "
/sbin/ifup -a
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
stop)
printf "Stopping network: "
/sbin/ifdown -a
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
ifup 和 ifdown
ifup/ifdown 是一个用于管理网络接口的工具,它可以在系统启动时自动启动网络接口,并在系统关机时自动停止网络接口,可以通过配置文件来指定哪些网络接口需要启动,以及启动时的参数。
ifup/ifdown 的配置文件通常位于 /etc/network/interfaces
文件中。
ifup/ifdown 的使用方法如下:
ifup [interface] # 启动指定的网络接口
ifdown [interface] # 停止指定的网络接口
- 启动指定的网络接口
$ ifup eth0
- 启动所有网络接口
$ ifup -a
- 停止指定的网络接口
$ ifdown eth0
- 停止所有网络接口
$ ifdown -a
- 可以使用 -v 选项来查看详细的启动/停止过程
$ ifup -v eth0
$ ifdown -v eth0
/etc/network/interfaces
/etc/network/interfaces
文件包含了网络接口的配置信息,例如接口的名称、IP 地址、子网掩码、网关等。ifup和ifdown命令会根据这些配置来启动或关闭接口。
在 sophpi 系统中,/etc/network/interfaces
文件内容如下:
# interface file auto-generated by buildroot
auto lo
iface lo inet loopback
在这个例子中,lo 接口被配置为回环接口,并指定了 inet loopback 类型。这里没有配置其他网络接口,因此系统启动后只有一个回环接口可用。
[root@sg200x]~# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
配置 eth0 静态IP
在 sophpi 系统中,可以通过修改 /etc/network/interfaces
文件来配置 eth0
接口的静态IP地址。
auto eth0
iface eth0 inet static
address 192.168.188.190
netmask 255.255.255.0
gateway 192.168.188.1
重新系统后,再次使用 ifconfig
命令查看网络接口信息,可以看到 eth0
接口已经配置为静态IP地址。
[root@sg200x]~# ifconfig
eth0 Link encap:Ethernet HWaddr D6:16:B6:DA:30:3C
inet addr:192.168.188.190 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:6 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2584 (2.5 KiB) TX bytes:0 (0.0 B)
Interrupt:21
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
在这个例子中,eth0 接口被配置为静态IP地址,并指定了子网掩码、网关和DNS服务器。此时可以是用 ping 命令测试网络连接是否正常。
[root@sg200x]~# ping 192.168.188.1
PING 192.168.188.1 (192.168.188.1): 56 data bytes
64 bytes from 192.168.188.1: seq=0 ttl=64 time=1.081 ms
64 bytes from 192.168.188.1: seq=1 ttl=64 time=0.965 ms
64 bytes from 192.168.188.1: seq=2 ttl=64 time=0.890 ms
--- 192.168.188.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.890/0.978/1.081 ms
下面是对常用网络接口配置参数的详细解读:
-
auto
含义:指定系统在启动时是否自动激活该网络接口。
用法:通常在配置文件中为每个网络接口定义一行 auto 语句,接着是相应的网络接口名称。如果设置为 auto ,则表示在系统启动时会自动激活该网络接口;如果设置为 allow-hotplug ,则表示仅在接口插入时才激活。 -
iface
含义:定义一个网络接口的配置块。
用法:以 iface 关键字开始,后跟网络接口的名称(如 eth0、enp0s3 等),然后是接口的配置信息。 -
address
含义:设置接口的IP地址。
用法:在 iface 配置块中使用 address 关键字,后跟要分配给接口的IP地址。可以是IPv4地址或IPv6地址。 -
netmask
含义:设置接口的子网掩码。
用法:在 iface 配置块中使用 netmask 关键字,后跟接口的子网掩码。子网掩码用于确定IP地址中哪些位用于网络标识,哪些位用于主机标识。 -
gateway
含义:设置接口的默认网关。
用法:在 iface 配置块中使用 gateway 关键字,后跟接口的默认网关的IP地址。默认网关用于将非本地网络的数据包转发到 Internet 或其他网络。