Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

retrobsd-2012-JUL-07 at JNUG BSD BoF

2,951 views

Published on

Published in: Economy & Finance
  • Be the first to comment

retrobsd-2012-JUL-07 at JNUG BSD BoF

  1. 1. RetroBSDを 味見takelab-BSD 2012/7/7 たけおか@たけおかラボ(株)/AXE
  2. 2. RetroBSDとは● http://retrobsd.org/● 2.11BSDベース● MMU無しで動く ● PDP-11もマッパしか無かったな… – アドレス変換はあった。 – デマンド・ページングは不能● PIC32という1チップ・マイコンで動く ● MIPSコア ● 一応、組込みMIPSのメモリ・マッピング機構で、kernelは守って いるらしい(未確認)● VirtualMIPSというシミュレータが同時に配られている ● PIC32プラットフォームをシミュレート
  3. 3. PIC32というマイコン● ROM,RAM,IO入りの1チップ・マイコン ● MIPS Core ● 40MHz~80MHz ● キャッシュ無し ● 1.56~3 Dhrystone MIPS● PIC32MX795 ● 128KBytes of RAM ● 512KBytes of Flash ROM ● 78 usable I/O pins ● CPU runs at 80MHz ● USB Bootloader ● 80MHz (約3MIPS)● 私は、別途、PIC32MX220に萌え中 ● 1.5Mips, ROM:32KB, RAM:8KB, USB I/F入り, ¥210円也
  4. 4. ● MAX32というマイコンボード PIC32MX795F512を使用● 共立の通販で¥5900円 ● ホストとの接続&開発は、オンボードのUSBシリアルI/F。電源もUSBから取る● それに、SDCardをつなぐ ● 4本しか要らない(それに電源 3.3V,GND)● http://retrobsd.org/wiki/max32-board-2/ のとおりに接続 Max32 board Signal SD/MMC 9 D3 – /CS0 CS card0 10 D4 – /CS1 CS card1 16 TX2 F5 – SDO4 DI 3V3 +3.3V VCC 14 TX3 F13 – SCK4 CLK GND GND GND 17 RX2 F4 – SDI4 DO AREF A10 – LED0 Disk(Green) 12 A2 – LED1 kernel(Red) 13 A3 - LED2 UART
  5. 5. RetroBSD MAX32● Arduino用のSDCardシールドをつないだ ● Mega系には合わない(涙)よって長い配線
  6. 6. RetroBSD
  7. 7. RetroBSD 実行例2.11 BSD Unix for PIC32, revision 560M build 18:     Compiled 2012­07­07 by take@gigant:     /home/take/docs/retrobsd/src/retrobsd­read­only/sys/pic32/max32cpu: 795F512L 80 MHz, bus 80 MHzoscillator: XT crystal, PLL div 1:2 mult x20console: port UART1sd0: port SPI4, select pin D3sd0: type I, size 975360 kbytes, speed 0 Mbit/secphys mem  = 128 kbytesuser mem  = 96 kbytesroot dev  = (0,0)root size = 16384 kbytesswap dev  = root, offset 65swap size = 2048 kbytes/dev/sd0: 294 files, 9550 used, 6769 freeStarting daemons: update *** 0x7f00e8f8: bus error2.11 BSD UNIX (pic32) (console)login: rootPassword:Welcome to RetroBSD!erase, kill ^U, intr ^C# ls.profile    etc         init.core   lost+found  swap        varbin         games       lib         sbin        tmpdev         include     libexec     share       u
  8. 8. RetroBSD 実行例# ps auxUSER       PID NICE SZ TTY TIME COMMANDroot         0   0   3 ?   0:57 swapperroot         1   0  49 ?   0:06 init ­ root        10   0   7 ?   0:01 update root        11   0  56 co  0:12 ­sh root        14   0  54 co  0:02 ps aux # # dateFri Jul  6 18:06:09 PST 2012# # ls gamesadventure    bcd          fish         ppt          wormarithmetic   canfield     lib          primes       wormsbackgammon   cfscores     morse        rain         wumpbanner       factor       number       teachgammon# morse ­scq daw dit daw dit, daw daw dit daw,
  9. 9. RetroBSD 実行例# nohup cat &34# ps auxSending output to nohup.outUSER       PID NICE SZ TTY TIME COMMANDroot         0   0   3 ?   4:27 swapperroot         1   0  49 ?   0:06 init ­ root        10   0   7 ?   0:02 update root        11   0  56 co  0:48 ­sh root        34   5  31 co  0:03 cat root        35   0  54 co  0:02 ps aux # vmstat­procs­ ­­­memory­­ ­­­­­disks­­­­­ ­­­faults­­­ ­­­­cpu­­­­ r b w    avm   fre sd0 sd1 dk2 dk3   in  sy  cs  us  sy  id 1 0 2 101460     0   1   0   0   0   21   1   0   0  15  85# kill 3434: No such process# ps auxUSER       PID NICE SZ TTY TIME COMMANDroot         0   0   3 ?   4:51 swapperroot         1   0  49 ?   0:06 init ­ root        10   0   7 ?   0:02 update root        11   0  56 co  0:53 ­sh root        38   0  54 co  0:02 ps aux # vmstat­procs­ ­­­memory­­ ­­­­­disks­­­­­ ­­­faults­­­ ­­­­cpu­­­­ r b w    avm   fre sd0 sd1 dk2 dk3   in  sy  cs  us  sy  id 0 0 3 123204     0   1   0   0   0    1   1   0   0  16  84# 
  10. 10. RetroBSD:オリジナル2.11BSDからの 変更点 (1/2)● http://retrobsd.googlecode.com/files/RetroBSD-BSD- Day-2011.pdf の一部を和訳● struct textの削除。共有実行コードを持つほど内蔵メモリが無い ので…● 全システムデータ構造をwordサイズ・データ型に修正。 short, charはRISCで良いわけではない● ブロック・サイズを512Bytesから 1Kbytesに増やした● ファイルシステム構造を1KBytesブロック構造に変更● 単一プロセス・ユーザ・メモリ・アロケーションを実装。 コア・メモリについてのmalloc/mfreeは無し。全割り当ては静的
  11. 11. RetroBSD:オリジナル2.11BSDからの変更点● setjmp/longjmpの実装。 (2/2) 二つのUエリアが割り当てられる: ● 一つはswapper(プロセス0) ● もう一つは他のすべてのプロセス ● 切り替え(スイッチング)は、データをコピーすることによるlongjmpで実行される。● rootファイル・システム上のファイルへのswapを実装。● swapファイルは、mkfsで作られる、特別な連続領域。● VirtualMIPSエンジン・ベースのPIC32シミュレータを実装。● キークエスチョン: MMU無しでプロセス・スイッチが実現できるのか?● Kernel stackは、Uエリアの一部。それは、固定アドレスにあり、割り込みハ ンドラによって使用される。しかし、新しいプロセスに切り替わる時、スタック は置き換えられなければならない。切り替えが発生したとき、ただ一ヶ所に あるなら、切り替えはlongjmp()ルーチンで実現できる。 4.3BSDでは、それはresume()と呼ばれる。 それは、先にセーブされたスレッドへの標準的なlongjmp()でのジャンプと 非常に近い動きをする。
  12. 12. RetroBSD開発環境● ソース (svnチェックアウトして得る)svn checkout http://retrobsd.googlecode.com/svn/trunk/ retrobsd­read­only● コンパイラ (うう、Linux版…すみません)https://github.com/downloads/jasonkajita/chipKIT­cxx/pic32­tools­chipKIT­cxx­master­Linux32­image­20120614.zip● MAX32へのkernelの書き込みツールhttps://github.com/chipKIT32/chipKIT32­MAX/downloads 中の avrdude。(コンパイラなども含まれているが、使わない)
  13. 13. RetroBSDのmake●   target.mkを合わせるGCCPREFIX   = /opt/pic32­tools/bin/pic32­● Makefileの TARGETを合わせる(もともとMAX32になってた)# Select target boardTARGET          ?= $(MAX32)● filesys.imgがトップ・ディレクトリにできる# dd if=filesys.img of=/dev/sdb conv=sync● Kernelは sys/pic32/max32/unix.* にできる(いいね!)
  14. 14. kernelのMAX32への書き込みAVRTOOLS=/opt/mpide­0023­linux32­20111221/hardware/tools/$AVRTOOLS/avrdude ­C $AVRTOOLS/avrdude.conf ­c stk500v2 ­p pic32         ­P /dev/ttyUSB0 ­b 115200 ­v         ­U flash:w:unix.hex:i● (このツールのバイナリが64bit Linuxだと、うまく動かず 自分で、makeしないといけませんね。ん、Linuxだと!?)
  15. 15. たけおかのやったこと● SDCardのアクセスが速すぎた ● オリジナルは、13Mbps● SDCardの配線が超いい加減 ● 13Mbpsとかで動くはず無い。実際、無理 ● 0.3Mbpsで動く (SDCardの配線をちゃんとすれば、43倍速くなる)● sys/pic32/sd.c 中の値を (0.3)に変更 #define SD_MHZ          (0.3) ●定数計算式中に、小数点が出るが、コンパイルが終了したら整数● それだけで、動くようになった ● 今日のデモは遅いのですが、SDCardが遅い ● 基本、SDCardへのswapで動作している● VirtualMIPSでは、動かせてない ● ま、実機優先で
  16. 16. RetroBSD● Kernelバイナリ 約130KBytes ● ROMはまだまだ余裕 (512KBもある) ● kernelが太っても大丈夫● コマンドは、SDCard ● 今は2GB以下(であろう)● Swapしてます ● 全executable ● stickしないし、コード共有しないし… – これは直しにくそう
  17. 17. 俺的、まとめ (1/2)● 2.11BSDって、TCP/IP動いてた ● IPv4だけどね ● PIC32に入れてみた人も居る – EtherNICも、Arduino用SPI I/Fがある ● 4本線+電源でつながる● PICなBSD。安くて、小さくて楽しい
  18. 18. 俺的、まとめ (2/2)● もうuCLinuxなんか要らない\(^^)/ ● 弊社は、世界で最もuCLinuxのCPUポーティ ングを行ったサイトだが… ● UNIX系OSの拡大には寄与した ● でも、「Linuxナニソレ」 ● インターフェース編集部に教えてあげないと なぁ● Linuxは疲れるんで、日本企業にはRetroBSD で押す
  19. 19. おしまいtakelab-BSD

×