作業用miniroot作成 -2-
なんか、普通にシェル環境が使えたほうがいいとのリクエストがある。
あと、プリセットのuboot scriptで起動したほうが楽。
ついでに、いくつかカスタム。
そういえば、こんな技もあったな。
http://d.hatena.ne.jp/kinneko/20070126/p2
パスワード空のユーザーを作り、inittabで
1:2345:respawn:/bin/login username
としておくと、gettyを飛ばして動作できる。もちろんジョブコントロールも可能。
デバイスを直接さわる作業用なので、rootアカウントをパスワードなしにしておく。
kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/passwd root::0:0:root:/root:/bin/bash kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/shadow root::15533:0:99999:7::: kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/inittab #1:2345:respawn:/sbin/getty 38400 tty1 1:2345:respawn:/bin/login root
起動してみる。
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. -bash: no job control in this shell root@BuildSV:~#
うまくきた。
ホスト名はminirootがいいな。
作成環境のを引きずるみたい。
kinneko@BuildSV:~$ sudo vi /media/etc/hostname miniroot
inittabで他が生きているので、これも定期的に出る。
これもキモチわるい。
INIT: Id "3" respawning too fast: disabled for 5 minutes
INIT: Id "5" respawning too fast: disabled for 5 minutes
INIT: Id "4" respawning too fast: disabled for 5 minutes
INIT: Id "6" respawning too fast: disabled for 5 minutes
INIT: Id "2" respawning too fast: disabled for 5 minutes
kinneko@BuildSV:~$ sudo vi /media/etc/inittab #2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6
止める。
内部eMMCだけでなく、SDCardにもアクセスしたいとリクエスト。
Android環境を見てみる。
brw------- root root 179, 12 2012-07-12 11:15 mmcblk1p4 brw------- root root 179, 11 2012-07-12 11:15 mmcblk1p3 brw------- root root 179, 10 2012-07-12 11:15 mmcblk1p2 brw------- root root 179, 9 2012-07-12 11:15 mmcblk1p1 brw------- root root 179, 8 2012-07-12 11:15 mmcblk1 brw------- root root 179, 4 2012-07-12 11:15 mmcblk0p4 brw------- root root 179, 3 2012-07-12 11:15 mmcblk0p3 brw------- root root 179, 2 2012-07-12 11:15 mmcblk0p2 brw------- root root 179, 1 2012-07-12 11:15 mmcblk0p1 brw------- root root 179, 0 2012-07-12 11:15 mmcblk0
あれ?
7つまでなのか。
root@miniroot:~# ls -l /dev/mmc* brw-r--r-- 1 root root 179, 0 Jul 12 06:37 /dev/mmcblk0 brw-r--r-- 1 root root 179, 1 Jul 12 06:37 /dev/mmcblk0p1 brw-r--r-- 1 root root 179, 2 Jul 12 06:38 /dev/mmcblk0p2 brw-r--r-- 1 root root 179, 3 Jul 12 06:38 /dev/mmcblk0p3 brw-r--r-- 1 root root 179, 4 Jul 12 06:38 /dev/mmcblk0p4 brw-r--r-- 1 root root 179, 5 Jul 12 06:38 /dev/mmcblk0p5 brw-r--r-- 1 root root 179, 6 Jul 12 06:38 /dev/mmcblk0p6 brw-r--r-- 1 root root 179, 7 Jul 12 06:38 /dev/mmcblk0p7 brw-r--r-- 1 root root 179, 8 Jul 12 06:39 /dev/mmcblk0p8 root@miniroot:~# rm -rf /dev/mmcblk0p8 root@miniroot:~# mknod /dev/mmcblk1 b 179 8 root@miniroot:~# mknod /dev/mmcblk1p1 b 179 9 root@miniroot:~# mknod /dev/mmcblk1p2 b 179 10 root@miniroot:~# mknod /dev/mmcblk1p3 b 179 11 root@miniroot:~# mknod /dev/mmcblk1p4 b 179 12 root@miniroot:~# mknod /dev/mmcblk1p5 b 179 13 root@miniroot:~# mknod /dev/mmcblk1p6 b 179 14 root@miniroot:~# mknod /dev/mmcblk1p7 b 179 15 root@miniroot:~# mknod /dev/mmcblk1p8 b 179 16 root@miniroot:~# ls -l /dev/mmc* brw-r--r-- 1 root root 179, 0 Jul 12 06:37 /dev/mmcblk0 brw-r--r-- 1 root root 179, 1 Jul 12 06:37 /dev/mmcblk0p1 brw-r--r-- 1 root root 179, 2 Jul 12 06:38 /dev/mmcblk0p2 brw-r--r-- 1 root root 179, 3 Jul 12 06:38 /dev/mmcblk0p3 brw-r--r-- 1 root root 179, 4 Jul 12 06:38 /dev/mmcblk0p4 brw-r--r-- 1 root root 179, 5 Jul 12 06:38 /dev/mmcblk0p5 brw-r--r-- 1 root root 179, 6 Jul 12 06:38 /dev/mmcblk0p6 brw-r--r-- 1 root root 179, 7 Jul 12 06:38 /dev/mmcblk0p7 brw-r--r-- 1 root root 179, 8 Jul 12 11:25 /dev/mmcblk1 brw-r--r-- 1 root root 179, 9 Jul 12 11:25 /dev/mmcblk1p1 brw-r--r-- 1 root root 179, 10 Jul 12 11:25 /dev/mmcblk1p2 brw-r--r-- 1 root root 179, 11 Jul 12 11:25 /dev/mmcblk1p3 brw-r--r-- 1 root root 179, 12 Jul 12 11:25 /dev/mmcblk1p4 brw-r--r-- 1 root root 179, 13 Jul 12 11:25 /dev/mmcblk1p5 brw-r--r-- 1 root root 179, 14 Jul 12 11:25 /dev/mmcblk1p6 brw-r--r-- 1 root root 179, 15 Jul 12 11:25 /dev/mmcblk1p7 brw-r--r-- 1 root root 179, 16 Jul 12 11:25 /dev/mmcblk1p8
ddできることを確認。
"-bash: no job control in this shell"が出るのも美しくない。
美しくないばかりか、コマンドを途中で殺せないので不便。
http://d.hatena.ne.jp/kinneko/20081029/p7
/dev/consoleを引き継いでいる以上は無理か。
この対策にはいくつか例がある。
原始的な方法だとこんなの。
1:2345:respawn:/bin/login -f root </dev/ttyS0 >/dev/ttyS0 2>&1
何も道具がいらない。
gettyで外部プログラムを起動する方法。
cで書くのと、シェルスクリプトの2つ。
T0:23:respawn:/sbin/getty -l /usr/local/bin/autologin -n -L ttyS0 115200 vt102
autologin.cの例。
#include <unistd.h> int main(void) { execlp("login", "login", "-f", "USERNAME", NULL); }
cc autologin.c -o autologinと普通にコンパイル。
シェルスクリプトの例。
vi /usr/local/bin/autologin #!/bin/sh exec /bin/login -f root
最後はsuloginを使う方法。
T0:23:respawn:/sbin/getty -l /sbin/sulogin -n -L ttyS0 115200 vt102
getty外部プログラムとシェルスクリプトの組み合わせを採用。
kinneko@BuildSV:~$ sudo vi /media/usr/local/bin/autologin kinneko@BuildSV:~$ sudo chmod +x /media/usr/local/bin/autologin kinneko@BuildSV:~$ sudo vi /media/etc/inittab T0:23:respawn:/sbin/getty -l /usr/local/bin/autologin -n -L ttyS0 115200 vt102
ダメだ...
autologin単体では動くのだけどな。
原始的な方法を試してみる。
/bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file /bin/sh: cannot open /dev/ttyS0: No such file INIT: Id "1" respawning too fast: disabled for 5 minutes INIT: no more processes left in this runlevel
あらま。
root@miniroot:~# mknod /dev/ttyS0 c 4 64 root@miniroot:~# ls -l /dev/ttyS0 crw-r--r-- 1 root root 4, 64 Jul 12 11:39 /dev/ttyS0
うまくいった。