우리는 256MB RAM과 4GB eMMC를 갖춘 Beaglebone 블랙 기반 맞춤형 보드를 보유하고 있습니다.
Linux-3.12에서 Linux-4.4로, busybox-1.20.2에서 busybox-1.26.2로 업그레이드했습니다.
이제 busybox-1.26.2에는 busybox-1.20.2에 없었던 문제가 표시됩니다.
마지막 init 스크립트 중 하나에 다음 코드를 추가했습니다.
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
init 스크립트가 실행된 후에만 처리하는 것 같습니다.
reboot
이제 내 질문은 모든 초기화 스크립트가 완료되기 전에 보드 에 들어갈 수 있는 방법이 있느냐는 것입니다 . 이 재시작 차단을 비활성화하는 busybox 구성이 있습니까?
reboot -f
(init를 거치지 않고 강제로 재부팅)은 작동하지만 중지 스크립트도 실행해야 하므로 사용할 수 없습니다.
답변1
따라서 busybox에 다시 시작하라는 신호가 전달되는 것 같지만 init 스크립트가 실행된 후에만 처리됩니다.
예, 이것이 바로 init
BusyBox가 작동하는 방식입니다. 아니요, 구성할 수 없습니다. 프로그램을 변경하고 다시 빌드해야 합니다.
추가 읽기
- 데니스 블라센코(2014-11-21).init: 신호 처리기에서 종료/재실행 작업을 실행하지 마세요.. BusyBox 소스 코드.