石原 博の覚書

電子工作に関する日々の覚書を記載します

Raspberry Pi Picoでfuzix その2

2022-09-17 20:27:21 | 日記

先日はaspberry Pi Picoでfuzixを試してみた。一応動くところまで確認出来たが、せっかくなので環境を整えた。



  1. バックスペース
    なにもしないとcHがバックスペースになっている。通常どおりのバックスペースキーを使用するためには stty erase '^?' とする必要がある。毎回同じことをするのも面倒なので/root/.profileに登録した。これでrootでログオンすると自動的に反映される。/etc/profileは無いようだ。

  2. パスワード
    デフォールトではパスワードは登録されておらず、パスワードなしでログオン出来る。passwdコマンドで設定することが出来る。シャドウパスワードはない。

  3. グループ
    なぜか/etc/groupが無い。FUZIX/Standalone/filesystem-src/etc-filesにあるのだが、
    FUZIX/Kernel/platform-rpipico/update-flash.shでbgetの対象になっていないため、設定されない。update-flash.shを編集しfilesystem.uf2を作り直しても良いし、エディタで/etc/groupを作ってもOK。

  4. ユーザ
    常にrootというのは気持ち良くない。useraddadduserも無いので/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:
    


  5. viが使いたい
    ここまでunixに似ていると、ついviと入力しエラーとなる。viクローンのleveeがあるので、ハードリンク。


    #ln levee vi
    

    なお同じくviクローンのvileもあったのでbgetの対象としてみたが、実行してみると「warning: out of memory fork: Out of memory」となり動かなかった。


  6. 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
    

    でマウント出来る。



  7. 起動時に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>


  8. swapを設定したい入れたい
    手動でswapon /dev/hdb1 4096とするらしいが、自動で行う方法がわからない。/etc/fstabに登録すれば良いのだろうか。良くわからない。



  9. 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としてkillallsubstrootを導入してみたが、


    # 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は避けることは出来る。





最新の画像もっと見る

コメントを投稿