Weitere ähnliche Inhalte
Ähnlich wie retrobsd-2012-JUL-07 at JNUG BSD BoF (20)
retrobsd-2012-JUL-07 at JNUG BSD BoF
- 1. RetroBSDを
味見
takelab-BSD
2012/7/7
たけおか@たけおかラボ(株)/AXE
- 2. RetroBSDとは
● http://retrobsd.org/
● 2.11BSDベース
● MMU無しで動く
● PDP-11もマッパしか無かったな…
– アドレス変換はあった。
– デマンド・ページングは不能
● PIC32という1チップ・マイコンで動く
● MIPSコア
● 一応、組込みMIPSのメモリ・マッピング機構で、kernelは守って
いるらしい(未確認)
● VirtualMIPSというシミュレータが同時に配られている
● PIC32プラットフォームをシミュレート
- 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. ●
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
- 7. RetroBSD 実行例
2.11 BSD Unix for PIC32, revision 560M build 18:
Compiled 20120707 by take@gigant:
/home/take/docs/retrobsd/src/retrobsdreadonly/sys/pic32/max32
cpu: 795F512L 80 MHz, bus 80 MHz
oscillator: XT crystal, PLL div 1:2 mult x20
console: port UART1
sd0: port SPI4, select pin D3
sd0: type I, size 975360 kbytes, speed 0 Mbit/sec
phys mem = 128 kbytes
user mem = 96 kbytes
root dev = (0,0)
root size = 16384 kbytes
swap dev = root, offset 65
swap size = 2048 kbytes
/dev/sd0: 294 files, 9550 used, 6769 free
Starting daemons: update
*** 0x7f00e8f8: bus error
2.11 BSD UNIX (pic32) (console)
login: root
Password:
Welcome to RetroBSD!
erase, kill ^U, intr ^C
# ls
.profile etc init.core lost+found swap var
bin games lib sbin tmp
dev include libexec share u
- 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. 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. RetroBSD開発環境
● ソース (svnチェックアウトして得る)
svn checkout http://retrobsd.googlecode.com/svn/trunk/
retrobsdreadonly
● コンパイラ (うう、Linux版…すみません)
https://github.com/downloads/jasonkajita/chipKIT
cxx/pic32toolschipKITcxxmasterLinux32image
20120614.zip
● MAX32へのkernelの書き込みツール
https://github.com/chipKIT32/chipKIT32MAX/downloads
中の avrdude。(コンパイラなども含まれているが、使わない)
- 13. RetroBSDのmake
● target.mkを合わせる
GCCPREFIX = /opt/pic32tools/bin/pic32
● Makefileの TARGETを合わせる(もともとMAX32になってた)
# Select target board
TARGET ?= $(MAX32)
● filesys.imgがトップ・ディレクトリにできる
# dd if=filesys.img of=/dev/sdb conv=sync
● Kernelは sys/pic32/max32/unix.* にできる(いいね!)
- 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. RetroBSD
● Kernelバイナリ 約130KBytes
● ROMはまだまだ余裕 (512KBもある)
● kernelが太っても大丈夫
● コマンドは、SDCard
● 今は2GB以下(であろう)
● Swapしてます
● 全executable
● stickしないし、コード共有しないし…
– これは直しにくそう
- 17. 俺的、まとめ (1/2)
● 2.11BSDって、TCP/IP動いてた
● IPv4だけどね
● PIC32に入れてみた人も居る
– EtherNICも、Arduino用SPI I/Fがある
● 4本線+電源でつながる
● PICなBSD。安くて、小さくて楽しい
- 18. 俺的、まとめ (2/2)
● もうuCLinuxなんか要らない\(^^)/
● 弊社は、世界で最もuCLinuxのCPUポーティ
ングを行ったサイトだが…
● UNIX系OSの拡大には寄与した
● でも、「Linuxナニソレ」
● インターフェース編集部に教えてあげないと
なぁ
● Linuxは疲れるんで、日本企業にはRetroBSD
で押す