先日はaspberry Pi Picoでfuzixを試してみた。一応動くところまで確認出来たが、せっかくなので環境を整えた。
- バックスペース
なにもしないとcHがバックスペースになっている。通常どおりのバックスペースキーを使用するためにはstty erase '^?'
とする必要がある。毎回同じことをするのも面倒なので/root/.profileに登録した。これでrootでログオンすると自動的に反映される。/etc/profileは無いようだ。 - パスワード
デフォールトではパスワードは登録されておらず、パスワードなしでログオン出来る。passwd
コマンドで設定することが出来る。シャドウパスワードはない。 - グループ
なぜか/etc/groupが無い。FUZIX/Standalone/filesystem-src/etc-files
にあるのだが、
FUZIX/Kernel/platform-rpipico/update-flash.sh
でbgetの対象になっていないため、設定されない。update-flash.shを編集しfilesystem.uf2を作り直しても良いし、エディタで/etc/groupを作ってもOK。 - ユーザ
常にrootというのは気持ち良くない。useradd
もadduser
も無いので/etc/passwd
を直接編集する。vipw
も無いがユーザは一人なのでlevee
で良い。/etc/group
も同様に追加すれば良い。(ホームディレクトリは作っておくこと)
# cat /etc/passwd root::0:0::/root:/bin/sh ishi::500:500::/home/ishi:/bin/sh #cat /etc/group root:x:0: ishi:x:500:
- viが使いたい
ここまでunixに似ていると、ついvi
と入力しエラーとなる。viクローンのlevee
があるので、ハードリンク。
#ln levee vi
なお同じくviクローンの
vile
もあったのでbgetの対象としてみたが、実行してみると「warning: out of memory fork: Out of memory」となり動かなかった。
- sdカードを外部記憶としたい
神楽坂らせんさんのRaspberryPi Pico で UNIX!!を参考に、sdカードに母艦でパーティション(hdb1 2MB, hdb2 16MB)を作る。
$ sudo fdisk /dev/sdb
その後picoでフォーマット。
#mkfs /dev/hdb2 32 65535 ... 略 ... Building free list... Writing initial inode and superblock... Done.
一応これでフォーマットは出来ているが、この後なにかコマンドを実行すると
panic: no free buffers
となり固まる。良くわからないが再起動して続行。
# mkdir /home # mount /dev/sdb2 /home
でマウント出来る。
- 起動時にsdカードを自動でマウントしたい
/etc/fstabを作り、起動時のスクリプトのコメントをはずす(以下の/etc/rcは初期にはfsck -a, mount -a
がコメントされている)
# cat /etc/fstab /dev/sdb2 /home fuzix defaults 0 1 # cat /etc/rc umask 022 fsck -a / setdate remount -n / rw prtroot >/etc/mtab #Uncomment if you have multiple file systems fsck -a mount -a >/var/run/utmp
ただしマウントしたままリセットすると、起動時に
fsck
でnot cleanlyと言われる。
Current time is 19:50:00 Enter new time: 19:51:00 /dev/hdb2: Filesystem was not cleanly unmounted. Device 0 has fsize = 65535 and isize = 32. Continue? y Pass 1: Checking inodes... Pass 2: Rebuilding free list... Rebuild free list? y Pass 3: Checking block allocation... Pass 4: Checking directory entries... Pass 5: Checking link counts... - ^ ^ n n Fuzix 0.3.1 >@< Welcome to Fuzix m m login: </code>
- swapを設定したい入れたい
手動でswapon /dev/hdb1 4096
とするらしいが、自動で行う方法がわからない。/etc/fstab
に登録すれば良いのだろうか。良くわからない。
- shutdownしたい
sdカードをマウントしたまま終了すると起動時にnot cleanlyと言われるので、終了時にはshutdownしたい。ところがrebootコマンドはあるのにshutdownコマンドがない。reboot自身も「reboot: Invalid argument」とエラーが出る。FUZIX/Applications/util/reboot.c
を読んでみるとどうもshutdownやhaltをハードリンクする想定のようだ。そこで# ln reboot shutdown # ln reboot halt
としてみたが、shutdownを実行すると/etc/rc.haltがないと出る。rc.haltは
FUZIX/Standalone/filesystem-src/etc-files
にあるのだが、内部でkillallやsubstrootを呼んでいる(どちらもApplications/utilにあるのだが、bgetでコメントアウトされている) コメントをはずしchmod 0755 rc.halt
としてkillall
やsubstroot
を導入してみたが、
# cat /etc/rc.halt killall umount -a substroot remount % ro halt # shutdown Halted. halt: Invalid argument
となる。ソースを追いかけても最終
FUZIX/Library/libs/fuzixarmm0/
内のアセンブリにぶつかる。そこからsvcをcallしており以降さっぱりわからない。RP2040のアセンブリコードが読めないと駄目か。ただsdカードのアンマウントはするので、not cleanlyは避けることは出来る。