ブログ

Armadillo-400シリーズのbusyboxを1.20に上げてみる

at_takuya.sasaki
2014年11月12日 16時39分

Armadillo-400シリーズのAtmark Distで標準でインストールされるbusyboxのバージョンは [ 1.00-rc3 ] です。 このbusyboxを [ 1.20.2 ] に上げてみた際の、作業メモです。

バージョンのあげ方

以下のようにmake menuconfigで変更が可能です。

atmark@atde5:~/atmark-dist$ make menuconfig
 
Userland Configuration
BusyBox  ---> 
[*] BusyBox 
(v1.20.2)   Version
Configuration menu  --->  ←選択してデフォルト設定のままとしてください

新しいユーザーランドで起動してみた結果

1. mount に失敗する

起動ログで以下のように mount に失敗しているメッセージが出ています。

Remounting root rw: mount: can't read '/proc/mounts': No such file or directory
Remounting root rw: mount: can't read '/proc/mounts': No such file or directory

これは、/etc/init.d/rc の以下の2つのコマンドで出ているメッセージのようです。

###############################################################################
# fsck
###############################################################################
echo "Starting fsck for root filesystem."
mount -n -o remount,ro /
(中略)
###############################################################################
# remount /
###############################################################################
echo -n "Remounting root rw: "
mount -n -o remount,rw /

busybox-1.20.2のmount.cを見ると、remountオプションをつけた際には、/proc/mountsをopenする 仕様となっていますが、現状の/etc/init.d/rcでは、この[fsck][remout]の後に /procをマウントするため、 今回のエラーが出ているようです。

ATDE3上で 以下のように/procのマウントを fsckの前にもってくることで、このエラーは解消されました。

atmark@atde3:~/atmark-dist$ vi romfs/etc/init.d/rc
 
###############################################################################
# mount proc
###############################################################################
echo -n "Mounting proc: "
mount -n proc
check_status
 
###############################################################################
# fsck
###############################################################################
echo "Starting fsck for root filesystem."
 
atmark@atde3:~/atmark-dist$ make image

(*) 上の例はromfs配下のrcを直接修正していますが、atmarkdist/vendors/AtmarkTechno/Armadillo-4**/etc/init.d/rc を修正して、make romfs、make imageする方法でもよいでしょう。
Armadillo-4**の部分は、Armadillo-420など製品に合わせて読み替えてください。

2. inetdが起動しない

こちらのMLにもありますが、inetdが自動起動になっていません。 (起動スクリプトが /etc/rc.d配下にいない)
http://lists.atmark-techno.com/pipermail/armadillo/2013-May/008835.html

[root@armadillo440-0 (ttymxc1) ~]# ls /etc/rc.d/
S03udevd@             S25module-init-tools@ S71avahi@
S04flatfsd@           S30firewall@          S80xfbdev@
S05checkroot@         S30hostname@          S99misc@
S06checkftp@          S40networking@        S99rc.local@
S10syslogd@           S70at-cgi@
S20klogd@             S70lighttpd@

これは、atmark-dist/config/.configに busyboxのコンフィギュレーション情報が保存されていないため、 CONFIG_USER_BUSYBOX_INETDが有効になっていないと判断されているためのようです。

今回は暫定対処で、ベタでinetdを自動起動するようにします。 Armadillo-4**の部分は、Armadillo-420など製品に合わせて読み替えてください。

atmark@atde3:~/atmark-dist$ vi vendors/AtmarkTechno/Armadillo-4**/Makefile 
 
#       [ "$(CONFIG_USER_INETD_INETD)" != "y" ] && \                ←コメントアウト
#       [ "$(CONFIG_USER_BUSYBOX_INETD)" != "y" ] || \     ←コメントアウト
#        $(ROMFSINST) -s /etc/init.d/inetd /etc/rc.d/S60inetd            ←コメントアウト
 
        $(ROMFSINST) -s /etc/init.d/inetd /etc/rc.d/S60inetd              ← 追加
 
atmark@atde3:~/atmark-dist$  make romfs
atmark@atde3:~/atmark-dist$  make image
3. at-cgiでsyslogが参照できない

at-cgiは以下を参照して下さい。
https://manual.atmark-techno.com/armadillo-4x0/armadillo-440_startup_guide_ja-1.1.9/ch06.html#sec-at-cgi

これも 2 と同様に、CONFIG_USER_BUSYBOX_SYSLODが有効になっていないと 判断され、atmark-dist/user/at-cgi/Makefileの以下のCFLAGSが適用されていないためです。

ifdef CONFIG_USER_BUSYBOX_SYSLOGD
CFLAGS += -DSYSLOGD
endif

こちらも暫定ですが、以下のように必ずCFLAGSにDSYSLOGDが渡るようにします。

#ifdef CONFIG_USER_BUSYBOX_SYSLOGD
CFLAGS += -DSYSLOGD
#endif