从零开始学习 sg200x 多核开发之 eth0 dhcpc 配置

前面已经介绍过 sophpi 的启动过程和 eth0 静态 IP 地址配置。不过静态 IP 在使用的时候比较不通用,本文介绍 eth0 自动使能并配置 dhcp 功能。

udhcpc

udhcpc 是 BusyBox 工具集中的一个组件,用于从 DHCP 服务器获取网络配置信息,如 IP 地址、子网掩码、默认网关和 DNS 服务器等。它是一个轻量级的工具,非常适合资源受限的嵌入式系统。

手工配置网络接口

在使用 udhcpc 之前,需要确保网络接口已经启用并处于活动状态,我们要配置的网络接口是 eth0。

[root@sg200x]~# ifconfig eth0 up

这将启动 udhcpc 客户端,尝试在名为 eth0 的网络接口上获取 IP 地址。

[root@sg200x]~# udhcpc -h
udhcpc: option requires an argument: h
BusyBox v1.33.0 (2024-08-20 07:13:20 CST) multi-call binary.Usage: udhcpc [-fbqRB] [-a[MSEC]] [-t N] [-T SEC] [-A SEC/-n][-i IFACE] [-s PROG] [-p PIDFILE][-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]...-i IFACE        Interface to use (default eth0)-s PROG         Run PROG at DHCP events (default /usr/share/udhcpc/default.script)-p FILE         Create pidfile-B              Request broadcast replies-t N            Send up to N discover packets (default 3)-T SEC          Pause between packets (default 3)-A SEC          Wait if lease is not obtained (default 20)-b              Background if lease is not obtained-n              Exit if lease is not obtained-q              Exit after obtaining lease-R              Release IP on exit-f              Run in foreground-S              Log to syslog too-a[MSEC]        Validate offered address with ARP ping-r IP           Request this IP address-o              Don't request any options (unless -O is given)-O OPT          Request option OPT from server (cumulative)-x OPT:VAL      Include option OPT in sent packets (cumulative)Examples of string, numeric, and hex byte opts:-x hostname:bbox - option 12-x lease:3600 - option 51 (lease time)-x 0x3d:0100BEEFC0FFEE - option 61 (client id)-x 14:'"dumpfile"' - option 14 (shell-quoted)-F NAME         Ask server to update DNS mapping for NAME-V VENDOR       Vendor identifier (default 'udhcp VERSION')-C              Don't send MAC as client identifier
Signals:USR1    Renew leaseUSR2    Release lease

在 udhcpc 常用命令可选参数如下:

  • -i:指定接口名
  • -s:指定指定一个脚本文件,该文件将在收到 DHCP 下发的参数时被执行
  • -d:允许 udhcpc 运行时打印出调试信息

udhcpc还支持许多高级选项,例如:

  • -t:指定尝试获取IP地址的次数。
  • -T:指定每次尝试之间的延迟时间(秒)。

例如:

[root@sg200x]~# udhcpc -i eth0 -t 5 -T 2 -s /path/to/custom/script

使用 udhcpc 获取 IP 地址

接下来,我们使用udhcpc来获取IP地址和其他网络配置信息。

[root@sg200x]~# udhcpc -i eth0
udhcpc (v1.30.1) started
udhcpc: started, v1.33.0
udhcpc: sending discover
udhcpc: sending select for 192.168.188.167
udhcpc: lease of 192.168.188.167 obtained, lease time 864000
deleting routers
adding dns 192.168.188.1

udhcpc 将自动从 DHCP 服务器获取配置信息。再次使用 ifconfig 查看网络信息:

[root@sg200x]~# ifconfig
eth0      Link encap:Ethernet  HWaddr 72:94:A5:19:79:23  inet addr:192.168.188.167  Bcast:192.168.188.255  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:202 errors:0 dropped:130 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:51828 (50.6 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)

已经成功获取到 IP地址,并且已经添加了默认网关和 DNS 服务器。

[root@sg200x]~# vi /etc/resolv.conf
search fritz.box # eth0
nameserver 192.168.188.1 # eth0

并可以正常使用 ping 测试:

[root@sg200x]~# ping www.baidu.com
PING www.baidu.com (180.101.50.242): 56 data bytes
64 bytes from 180.101.50.242: seq=0 ttl=50 time=13.834 ms
64 bytes from 180.101.50.242: seq=1 ttl=50 time=12.120 ms
64 bytes from 180.101.50.242: seq=2 ttl=50 time=12.001 ms
64 bytes from 180.101.50.242: seq=3 ttl=50 time=11.658 ms
^C
--- www.baidu.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 11.658/12.403/13.834 ms

自动启动方式一

前文 从零开始学习 sg200x 多核开发之 eth0 自动使能并配置静态IP 已经介绍了如何在开机时启动 eth0,可以修改 /etc/network/interfaces 文件,添加如下内容:

[root@sg200x]~# vi /etc/network/interfaces
# interface file auto-generated by buildrootauto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
  • auto eth0: 表示网卡随机启动;
  • iface eth0 inet dhcp: 表示网卡 ip 地址自动获取

重启后可以发现 eth0 已经获取到了 IP 地址:

[root@sg200x]~# ifconfig
eth0      Link encap:Ethernet  HWaddr 16:4B:9E:5B:2D:6A  inet addr:192.168.188.168  Bcast:192.168.188.255  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:136 errors:0 dropped:74 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:46826 (45.7 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/init.d/ 下的 S40network 脚本程序自动启动的。

自动启动方式二

方式一是通过修改 /etc/network/interfaces 文件,也可以修改 /etc/init.d/S40network 文件完成启动。

添加如下内容:

[root@sg200x]~# vi /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/sbin/ifconfig eth0 upprintf "Starting eth0: "start-stop-daemon -b -q -S -x /sbin/udhcpc -- -b -i eth0 -R[ $? = 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 $?

start-stop-daemon

start-stop-daemon -b -q -S -x /sbin/udhcpc -- -b -i eth0 -R

start-stop-daemon(start and stop system daemon programs) 是将一个普通程序变成守护进程。

用法

[root@sg200x]~# start-stop-daemon
BusyBox v1.33.0 (2024-08-20 07:13:20 CST) multi-call binary.Usage: start-stop-daemon [OPTIONS] [-S|-K] ... [-- ARGS...]Search for matching processes, and then
-K: stop all matching processes
-S: start a process unless a matching process is foundProcess matching:-u USERNAME|UID Match only this user's processes-n NAME         Match processes with NAMEin comm field in /proc/PID/stat-x EXECUTABLE   Match processes with this commandin /proc/PID/cmdline-p FILE         Match a process with PID from FILEAll specified conditions must match
-S only:-x EXECUTABLE   Program to run-a NAME         Zeroth argument-b              Background-N N            Change nice level-c USER[:[GRP]] Change user/group-m              Write PID to pidfile specified by -p
-K only:-s SIG          Signal to send-t              Match only, exit with 0 if found
Other:-o              Exit with status 0 if nothing is done-v              Verbose-q              Quiet

start-stop-daemon [options] command

COMMANDS:
-S, --start [–] arguments:检查特定的进程是否存在,如果存在 start-stop-daemon 退出并返回状态 “1” (如果设置了–oknodo,返回"0"); 如果不存在则由 --exec 或者 --startas 指定的命令,所有跟在 – 后面的参数都将传递给要启动的命令。
-K, --stop:检查特定的进程是否存在,如果存在start-stop-daemon发送一个由–signal指定的信号并返回"0";如果不存在返回"1",如果–retry被设置,还要检查是不是进程已经退出。
-p, --pidfile pid-file: 指定 pid 文件,至于 pid 文件的用途就多了,stop,status 都少不了它。
-x, --exec executable (/proc/pid/exe): 真正要执行的进程
-n, --name process-name (/proc/pid/stat):如果没有指定 pid 文件,那么就要通过指定 name 来停止进程了
-u, --user username|uid:指定脚本用哪个用户或用户组执行,init脚本是必须使用root权限来执行的,但是它fork出来的子进程我们一般会选择一个权限较低的用户。
OPTIONS:
-g, --group group|gid
-s, --signal signal (default TERM)
-R, --retry timeout|schedule: 等待 timeout 的时间,检查进程是否停止,如果没有发送 KILL 信号;schedule 可以设置为:signal/time/KILL/time,retry后如果还存在进程将返回"2"。
-a, --startas pathname
If not specified, defaults to the argument given to --exec
-o, --oknodo
-q, --quiet
-c, -chuid username|uid:改变用户运行命令
-r, --chroot root:在某些安全性要求较高的情况下,我们就需要用到chroot将进程工作环境与物理环境完全隔离开来。
-d, --chdir path:启动进程前切换到目录path
-b, --background:后台运行
-k, --umask mask
-m, --make-pidfile:当命令本身不创建pidfile时,由start-stop-daemon创建;

# 启动程序:
$ start-stop-daemon -S -x 用户命令 -- 用户参数# 关闭程序:
$ start-stop-daemon -K -x 用户命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为eNSP:MSTP

一、什么是MSTP? 1、MSTP是IEEE 802.1S中定义的生成树协议,MSTP兼容STP和RSTP,既可以快速收敛,也提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。 2、MSTP可以将一个或多个VLAN映射到一个Inst…

MATLAB绘制克莱因瓶

MATLAB绘制克莱因瓶 clc;close all;clear all;warning off;% clear all rand(seed, 100); randn(seed, 100); format long g;% Parameters u_range linspace(0, 2*pi, 100); v_range linspace(0, pi, 50); [U, V] meshgrid(u_range, v_range);% Parametric equations for t…

2、 家庭网络发展现状

上一篇我们讲了了解家庭网络历史(https://blog.csdn.net/xld_hung/article/details/143639618?spm1001.2014.3001.5502),感兴趣的同学可以看对应的文章,本章我们主要讲家庭网络发展现状。 关于家庭网络发展现状,我们会从国内大户型和小户型的网络说起&…

Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】

下面是项目级完整配置1➡eslint:【吐血分享,博主踩过的坑你跳过去!!跳不过去?太过分了给博主打钱】 浏览器自动打开项目: 你想释放双手吗?你想每天早上打开电脑运行完项目自动在浏览器打开吗&a…

【SQL】E-R模型(实体-联系模型)

目录 一、介绍 1、实体集 定义和性质 属性 E-R图表示 2. 联系集 定义和性质 属性 E-R图表示 一、介绍 实体-联系数据模型(E-R数据模型)被开发来方便数据库的设计,它是通过允许定义代表数据库全局逻辑结构的企业模式&#xf…

LLM - 计算 多模态大语言模型 的参数量(Qwen2-VL、Llama-3.1) 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/143749468 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 影响 (…

基于Java Springboot成都旅游网

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

css 使用图片作为元素边框

先看原始图片 再看效果 边框的四个角灭有拉伸变形,但是图片的中部是拉伸的 代码 border-style: solid;/* 设置边框图像的来源 */border-image-source: url(/static/images/mmwz/index/bk_hd3x.png);/* 设置如何切割图像 */border-image-slice: 66;/* 设置边框的宽度 */border…

【阅读记录-章节1】Build a Large Language Model (From Scratch)

目录 1. Understanding large language models1.1 What is an LLM?补充介绍人工智能、机器学习和深度学习的关系机器学习 vs 深度学习传统机器学习 vs 深度学习(以垃圾邮件分类为例) 1.2 Applications of LLMs1.3 Stages of building and using LLMs1.4…

【WSL+Ubuntu】默认用户被意外变更为 root 后切回原来的默认用户

引言 在使用 Windows Subsystem for Linux (WSL) Ubuntu 时,在 ~ 目录下使用 ls 命令,发现所有文件都消失了,让我误以为文件被清空了。实际上是因为WSL Ubuntu的默认用户被意外地改变为了 root。那么,如何恢复并切回原来的默认用…

模式:每个服务一个数据库

Pattern: Database per service。 背景 如用微服务架构模式开发一个在线商店应用程序。大多数服务需要在某种数据库中持久化数据。如,订单服务存储订单信息,而客户服务存储客户信息。 问题 微服务应用程序中的数据库架构是什么? 驱动力…

Acme PHP - Let‘s Encrypt

Lets Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。 使用PHP来更新证书: Acme PHP | Rob…

如何实现主备租户的无缝切换 | OceanBase应用实践

对于DBA而言,确保数据库的高可用性、容灾等能力是其日常工作中需要持续思考和关注的重要事项。一方面,可以利用数据库自身所具备的功能来实现这些目标;若数据库本身不提供相应功能,DBA则需寻找其他工具来增强数据库的高可用性和容…

超越GPT-4o-mini | 北大开源「国产o1」大模型,{多阶段自主推理}让小模型也能“放大招“!

01、LLaVA-o1背景简介 以OpenAI o1为代表的大型语言模型展示了强大的推理能力,这充分的验证了语言模型推理时间缩放的有效性。然而,视觉对于使模型能够充分理解世界并扩展其认知能力同等重要。因此,开发一个融合语言和视觉的多模态模型&#…

Unity类银河战士恶魔城学习总结(P126 Item ToolTip物品提示)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了把鼠标放到物品上面就会显示物品属性 UI_ItemTooltip.cs 功能实现:该脚本的核心功能是展示和隐藏物品的工具提示…

11.13机器学习_线性回归

十 集成学习方法之随机森林 机器学习中有一种大类叫集成学习(Ensemble Learning),集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个…

【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)

欧式距离和曼哈顿距离是两种常用的距离度量方法,用于衡量两点之间的相似性或差异性。它们在几何分析、数据挖掘、机器学习等领域有广泛应用。 1. 欧式距离 概念 欧式距离(Euclidean Distance)是最常见的直线距离度量方法,源于欧…

hydra基础知识

hydra基础知识 1、yaml的使用 1.1 基础介绍 主要是用来写配置文件 优势: 层级式可以写注释安装: pip install pyyaml1.2 语法 2、omegaconf 2.1 基础介绍 为什么需要omegaconf? omegaconf主要是对python原生的字典,列表类型的增强,通过omegaconf能够更好的处理yaml…

递归(3)----力扣40组合数2,力扣473火柴拼正方形

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,6,1…

RPC-健康检测机制

什么是健康检测? 在真实环境中服务提供方是以一个集群的方式提供服务,这对于服务调用方来说,就是一个接口会有多个服务提供方同时提供服务,调用方在每次发起请求的时候都可以拿到一个可用的连接。 健康检测,能帮助从连…