我们有基于 Beaglebone 黑色的定制板,配有 256MB RAM 和 4GB eMMC。
我们从Linux-3.12升级到Linux-4.4,从busybox-1.20.2升级到busybox-1.26.2。
现在,在 busybox-1.26.2 中,我们看到了 busybox-1.20.2 中没有的问题
我在最后一个初始化脚本之一中添加了以下代码。
if [ -f /home/ankur ] ; then
count=50
rm /home/ankur
echo "----Check Whoami----"
whoami #prints root
reboot
echo "--------------------"
while [ true ]
do
count=$((count - 1 ))
echo "Count = $count"
if [ $count -le 0 ];then
break;
fi
echo "Sleep 1"
sleep 1
done
fi
我触摸了该文件/home/ankur
,然后重新启动了开发板。
我观察到,系统没有重新启动,但计数器下降到 0,然后执行其他初始化脚本,然后板重新启动。
因此,busybox 似乎正在获取信号,reboot
但仅在执行初始化脚本后才进行处理。
现在我的问题是,在完成所有初始化脚本之前是否有办法进入reboot
董事会。是否有任何 busybox 配置可以禁用此重启阻止?
reboot -f
(强制重新启动而不通过 init)可以工作,但我们还需要运行停止脚本,因此无法使用它。
答案1
因此,busybox 似乎正在收到重新启动的信号,但仅在执行初始化脚本后才进行处理。
是的,这正是init
BusyBox 现在的工作方式。不,这是不可配置的。您必须更改程序并重新构建它。
进一步阅读
- 丹尼斯·弗拉森科 (2014-11-21)。init:不要从信号处理程序运行关闭/重新执行操作。 BusyBox 源码。