![udhcpc:无租约,在 Buildroot 创建的嵌入式 Linux 上启动时失败](https://linux22.com/image/132012/udhcpc%EF%BC%9A%E6%97%A0%E7%A7%9F%E7%BA%A6%EF%BC%8C%E5%9C%A8%20Buildroot%20%E5%88%9B%E5%BB%BA%E7%9A%84%E5%B5%8C%E5%85%A5%E5%BC%8F%20Linux%20%E4%B8%8A%E5%90%AF%E5%8A%A8%E6%97%B6%E5%A4%B1%E8%B4%A5.png)
Linux 服务的响应能力udhcpc
(相对于/etc/init.d/S40network
调用ip up
和 的服务的本机 DHCP udhcpc
)在提示符下登录之前和之后有所不同。
/etc/init.d/rcS
通过(启动顺序)调用时,udhcpc
不分配 IP 地址:
udhcpc: no lease, failing
然而,一旦使用 root 帐户登录,S40network restart
就会通过udhcpc
.
这/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
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -a
::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the serial port
ttyPS0::respawn:/sbin/getty -L ttyPS0 0 vt100 # GENERIC_SERIAL
# 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
我们该如何解释这一点?
答案1
我遇到了与您相同的问题,它在启动过程中会失败,但如果之后手动调用则可以正常工作。在检查各种日志时,我意识到 udhcpc 似乎在接口出现时正在初始化,因此最初的几个发现实际上并没有通过接口发出。
理想情况下,我会这样做,以便 udhcpc 在接口稳定后才启动,但由于我不知道如何实现这一点,所以我只是增加了 udhcpc 的尝试次数。通常,它会在 4-5 次尝试后获得 IP,但我将限制增加到 10 次尝试以涵盖任何边缘情况。
将下面的第二行添加到/etc/network/interfaces
iface eth0 inet dhcp
udhcpc_opts -t 10 #sets max retries to 10
#rest of config params