当前位置: 首页 > news >正文

从零开始学习 sg200x 多核开发之 eth0 自动使能并配置静态IP

前文提到 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.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:175 errors:0 dropped:97 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions: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.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions: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 <andersen@codepoet.org>
#
# 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" ] && continuecase "$i" in*.sh)# Source shell script for speed.(trap - INT QUIT TSTPset 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/networkcase "$1" instart)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
esacexit $?

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 buildrootauto 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.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions: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 staticaddress 192.168.188.190netmask 255.255.255.0gateway 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.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:21 errors:0 dropped:6 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions: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.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions: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 或其他网络。

http://www.lryc.cn/news/486065.html

相关文章:

  • 《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-集成心知天气(二)
  • 通过声纹或者声波来切分一段音频
  • sql专场练习(二)(16-20)完结
  • [ 网络安全介绍 2 ] 网络安全发展现状
  • 《基于Oracle的SQL优化》读书笔记
  • 零基础利用实战项目学会Pytorch
  • Go八股(Ⅵ)Goroutine 以及其中的锁和思想
  • 向潜在安全信息和事件管理 SIEM 提供商提出的六个问题
  • 蓝桥杯每日真题 - 第15天
  • Python的Matplotlib
  • Python数据分析:分组转换transform方法
  • 高效灵活的Django URL配置与反向URL实现方案
  • 深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
  • Java-Redisson分布式锁+自定义注解+AOP的方式来实现后台防止重复请求扩展
  • Java 全栈知识体系
  • 树状数组+概率论,ABC380G - Another Shuffle Window
  • 机器学习day1-数据集
  • 【Golang】——Gin 框架中的路由与请求处理
  • nuxt3添加wowjs动效
  • 我们是如何实现 TiDB Cloud Serverless 的 - 成本篇
  • PCL算法汇总
  • sql注入之二次注入(sqlilabs-less24)
  • Android compose 软键盘 遮挡对话框中TextField 输入框
  • spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索
  • 【项目开发】分析六种常用软件架构
  • 算法和程序的区别
  • 用指针遍历数组
  • 《Probing the 3D Awareness of Visual Foundation Models》论文解析——多视图一致性
  • 使用pip安装esp32的擦除、写入固件的esptool库