佐倉まで行ってきた
先週のことだけど、fabcross見てたら佐倉市立美術館で面白そうな催しをやってたんで行ってきた。
まー自転車についての催しだし普通は自転車で行くだろ、ってことで走ったのが上の地図。
- 左上のJR北柏駅から手賀沼の南側を東へ
- →道の駅しょうなん で手賀沼を外れて南東へ
- →神崎川に着いたらそのまま東南東へ川沿いに
- →新川に合流したら川沿いに南西へ
- →道の駅やちよ でメシ
- →来た道を戻り、そのまま新川沿いに東南東へ行って印旛沼へ
- →道中の風車を軽く見学
- →最後は京急佐倉駅から南に曲がって坂を登って到着
これで大体40kmで、寄り道や休憩も入れて4時間半くらい。ちょうど良いところに川があるおかげで経路の半分が川沿いのサイクリングロードという実に絶妙なルート。ちなみに帰りは自転車を袋に詰めて京成→東武アパ線。
印旛沼。しばらく眺めた感想『……まぁ手賀沼みたいなもんか(ぉぃ』
このときは単に景色の感想だったんだけど、後で調べたらひたすら埋め立てられてたり水質がアレなところも似てたらしい。なお面積は手賀沼の2倍で県内最大とか。
佐倉ふるさと広場にある揚水式風車「リーフデ」。模型とかではなく揚水として運用されている本物で、もちろん風車も回転する。…行ったときは無風だったので回っているところは見れなかったけど(午前中は回ってたとのこと)。
んでこれが佐倉市立美術館。ところで直前の上り坂とか走り疲れた身にはめっちゃキツいんだけど何なのあれ。
館内はフラッシュ禁止ではあるものの撮影・SMS等へのアップロードはOKだったのでテキトーに撮った写真がこちら。リキシャタンク(最後の写真)は初めて見た。
今日のGR-PEACH
ずっと『うーんinitarm()以降のシリアルが出ないなードライバ実装どっかバグってんのかなー』と思ってたけど、結局bus_space_map()したときに取得したhandlepを保存しておくのを忘れてたせいだった。それを直したらなんかダバダバ流れてきてデバッガに落ちた模様。
U-Boot 2015.01-00076-gc83df16e6b-dirty (Jul 06 2017 - 01:45:26) I2C: ready DRAM: 10 MiB Using default environment In: serial Out: serial Err: serial SPI Flash Memory Map ------------------------------------ Start Size SPI u-boot: 0x00000000 0x080000 0 env: 0x00080000 0x040000 0 DT: 0x000C0000 0x040000 0 Kernel: 0x00100000 0x050000 0 Rootfs: 0x00600000 0x0A0000 0 Net: sh_eth => bootp 192.168.0.6:netbsd.bin sh_eth Waiting for PHY auto negotiation to complete.. done sh_eth: 100Base/Full BOOTP broadcast 1 BOOTP broadcast 2 DHCP client bound to address 192.168.0.4 (644 ms) Using sh_eth device TFTP from server 192.168.0.6; our IP address is 192.168.0.4 Filename 'netbsd.bin'. Load address: 0x20000000 Loading: ################################################################# ################################################################# ################################################################# #################################### 2.8 MiB/s done Bytes transferred = 3378964 (338f14 hex) => go 0x20000000 ## Starting application at 0x20000000 ... PC=0x20000024 SP=0x208afdb0 CPSR=0x600001d3 <cortex_init>@ABC12-</cortex_init> <mmu_init_table></mmu_init_table> <arm_cpuinit>FG01H1IJKLM</arm_cpuinit> jump to start() uboot arg = 0x1, 0x208b0e5c, 0x208b0e5c, 0x20000000 NetBSD/evbarm (EVBARM_BOARDTYPE) booting ... initarm: Configuring system, CLIDR=1110000003 CTR=0x83338003 arm32_bootmem_init: memstart=0x20000000, memsize=0x10000000, kernelstart=0x20000000 arm32_bootmem_init: kernelend=0x20356000 arm32_bootmem_init: adding 32341 free pages: [0x20356000..0x2fffffff] (VA 0x80356000) arm32_kernel_vm_init: 1 L2 pages are needed to map 0x38a000 kernel bytes arm32_kernel_vm_init: allocating page tables for kerneladd_pages: adding pv 0x8033964c (pa 0x20356000, va 0x80356000, 1 pages) at tail vmadd_pages: appending pv 0x8033a5d0 (0x20358000..0x2035bfff) to 0x20356000..0x20357fff add_pages: appending pv 0x80339824 (0x2035c000..0x2035dfff) to 0x20356000..0x2035bfff add_pages: appending pv 0x80339838 (0x2035e000..0x2035ffff) to 0x20356000..0x2035dfff add_pages: appending pv 0x8033984c (0x20360000..0x20361fff) to 0x20356000..0x2035ffff add_pages: appending pv 0x80339860 (0x20362000..0x20363fff) to 0x20356000..0x20361fff add_pages: appending pv 0x80339874 (0x20364000..0x20365fff) to 0x20356000..0x20363fff add_pages: appending pv 0x80339888 (0x20366000..0x20367fff) to 0x20356000..0x20365fff add_pages: appending pv 0x8033989c (0x20368000..0x20369fff) to 0x20356000..0x20367fff add_pages: appending pv 0x803398b0 (0x2036a000..0x2036bfff) to 0x20356000..0x20369fff arm32_kernel_vm_init: allocating stacks add_pages: appending pv 0x80339d44 (0x2036c000..0x2036dfff) to 0x20356000..0x2036bfff add_pages: appending pv 0x80339d30 (0x2036e000..0x2036ffff) to 0x20356000..0x2036dfff add_pages: appending pv 0x80339d1c (0x20370000..0x20371fff) to 0x20356000..0x2036ffff add_pages: appending pv 0x80339d08 (0x20372000..0x20373fff) to 0x20356000..0x20371fff add_pages: appending pv 0x80339cf4 (0x20374000..0x20375fff) to 0x20356000..0x20373fff add_pages: appending pv 0x80339d58 (0x20376000..0x20377fff) to 0x20356000..0x20375fff add_pages: appending pv 0x80339690 (0x20378000..0x2037bfff) to 0x20356000..0x20377fff Creating L1 page table at 0x20358000 arm32_kernel_vm_init: adding L2 pt (VA 0x80356000, PA 0x20356000) for VA 0x80000000 (kernel) arm32_kernel_vm_init: adding L2 pt (VA 0x8035c000, PA 0x2035c000) for VA 0xc0000000 (vm) arm32_kernel_vm_init: adding L2 pt (VA 0x8035e000, PA 0x2035e000) for VA 0xc0800000 (vm) arm32_kernel_vm_init: adding L2 pt (VA 0x80360000, PA 0x20360000) for VA 0xc1000000 (vm) arm32_kernel_vm_init: adding L2 pt (VA 0x80362000, PA 0x20362000) for VA 0xc1800000 (vm) arm32_kernel_vm_init: adding L2 pt (VA 0x80364000, PA 0x20364000) for VA 0xc2000000 (vm) arm32_kernel_vm_init: adding L2 pt (VA 0x80366000, PA 0x20366000) for VA 0xc2800000 (vm) arm32_kernel_vm_init: adding L2 pt (VA 0x80368000, PA 0x20368000) for VA 0xc3000000 (vm) arm32_kernel_vm_init: adding L2 pt (VA 0x8036a000, PA 0x2036a000) for VA 0xc3800000 (vm) Mapping kernel arm32_kernel_vm_init: adding chunk for kernel text 0x20000000..0x20267fff (VA 0x80000000) add_pages: adding pv 0x80339638 (pa 0x20000000, va 0x80000000, 308 pages) before pa 0x20356000 arm32_kernel_vm_init: adding chunk for kernel data/bss 0x20268000..0x20355fff (VA 0x80268000) add_pages: adding pv 0x80339624 (pa 0x20268000, va 0x80268000, 119 pages) before pa 0x20356000 Listing Chunks arm32_kernel_vm_init: pv 0x80339638: chunk VA 0x80000000..0x80267fff (PA 0x20000000, prot 7, cache 1) arm32_kernel_vm_init: pv 0x80339624: chunk VA 0x80268000..0x80355fff (PA 0x20268000, prot 3, cache 1) arm32_kernel_vm_init: pv 0x8033964c: chunk VA 0x80356000..0x8037bfff (PA 0x20356000, prot 3, cache 1) Mapping Chunks arm32_kernel_vm_init: mapping chunk VA 0x80000000..0x80267fff (PA 0x20000000, prot 7, cache 1) pmap_map_chunk: pa=0x20000000 va=0x80000000 size=0x268000 resid=0x268000 prot=0x7 cache=1 SSLLLLLLPPPP arm32_kernel_vm_init: mapping chunk VA 0x80268000..0x80355fff (PA 0x20268000, prot 3, cache 1) pmap_map_chunk: pa=0x20268000 va=0x80268000 size=0xee000 resid=0xee000 prot=0x3 cache=1 PPPPLLLLLLLLLLLLLLPPP arm32_kernel_vm_init: mapping last chunk VA 0x80356000..0x8037bfff (PA 0x20356000, prot 3, cache 1) pmap_map_chunk: pa=0x20356000 va=0x80356000 size=0x26000 resid=0x26000 prot=0x3 cache=1 PPPPPLPPPPPP devmap: 18000000 -> 1fffffff @ f7000000 pmap_map_chunk: pa=0x18000000 va=0xf7000000 size=0x8000000 resid=0x8000000 prot=0x3 cache=0 sSsSsSsSsSsSsSsS devmap: 3fe00000 -> 3fffffff @ ff000000 pmap_map_chunk: pa=0x3fe00000 va=0xff000000 size=0x200000 resid=0x200000 prot=0x3 cache=0 SS devmap: e8000000 -> e82fffff @ ff200000 pmap_map_chunk: pa=0xe8000000 va=0xff200000 size=0x300000 resid=0x300000 prot=0x3 cache=0 SSS devmap: fc000000 -> fc0fffff @ ff500000 pmap_map_chunk: pa=0xfc000000 va=0xff500000 size=0x100000 resid=0x100000 prot=0x3 cache=0 S devmap: fcf00000 -> fcffffff @ ff600000 pmap_map_chunk: pa=0xfcf00000 va=0xff600000 size=0x100000 resid=0x100000 prot=0x3 cache=0 S devmap: fff00000 -> ffffffff @ ff700000 pmap_map_chunk: pa=0xfff00000 va=0xff700000 size=0x100000 resid=0x100000 prot=0x3 cache=0 S devmap: f0000000 -> f00fffff @ ff800000 pmap_map_chunk: pa=0xf0000000 va=0xff800000 size=0x100000 resid=0x100000 prot=0x3 cache=0 S Physical Virtual Num Starting Ending Starting Ending Pages SDRAM: 0x20000000 0x2fffffff 0x80000000 0x8fffffff 32768 text section: 0x20000000 0x20267fff 0x80000000 0x80267fff 308 data section: 0x202c0000 0x20338f18 0x802c0000 0x80338f18 61 bss section: 0x20338f18 0x20354fe0 0x80338f18 0x80354fe0 15 L1 page directory: 0x20358000 0x2035bfff 0x80358000 0x8035bfff 2 ABT stack (CPU 0): 0x2036c000 0x2036dfff 0x8036c000 0x8036dfff 1 FIQ stack (CPU 0): 0x2036e000 0x2036ffff 0x8036e000 0x8036ffff 1 IRQ stack (CPU 0): 0x20370000 0x20371fff 0x80370000 0x80371fff 1 UND stack (CPU 0): 0x20372000 0x20373fff 0x80372000 0x80373fff 1 IDLE stack (CPU 0): 0x20374000 0x20375fff 0x80374000 0x80375fff 1 SVC stack: 0x20376000 0x20377fff 0x80376000 0x80377fff 1 Message Buffer: 0x20378000 0x2037bfff 0x80378000 0x8037bfff 2 Free Memory: 0x2037c000 0x2fffffff 32322 TTBR0=0x209fc05b TTBR1=0x209fc05b TTBCR=0x1 CONTEXTIDR=0 switching to new L1 page table @0x20358000... ttb (TTBCR=0x11 TTBR0=0x2035805b TTBR1=0x2035805b) OK nfreeblocks = 1, free_pages = 32322 (0x7e42) bootstrap done. vectors vbar=0x8000bf60 0x8000bf60 init subsystems: stacks vectors undefined page pmap_physload pmap kpm tlb0 locks l1pt cache(l1pt) specials pools [ Kernel symbol table missing! ] done. panic: pool_get: pcache: page empty Stopped in pid 0.1 (system) at 80005a80: bx r14 db>
CubieBoard2サーバが起動しなくなった問題(解決)
HDDがダメなのかなーということで安いSSDを手配してCubieBoardに接続……したけどfdiskでコケよる。ただfsckのこともあったしたぶんNetBSD/evbarmのどっかがおかしんだろーなーと母艦側でfdisk→disklabel→newfsまでお膳立てしたところ無事にインストール完了。
俺「ふむ、pkgsrcのビルドを始めたけど問題なさそうだしこの様子なら大丈夫かな」
→剥き出しで繋いでいたSSDを机の端に移動させる
SSD『CRC Error』『CRC Error』『CRC Error』『CRC Error』『CRC Error』『CRC Error』
俺「あっこれケーブルが駄目なやつだ」
SATAケーブルの根本を折るようにして筐体に無理矢理押し込んでいたという心当たりもあるので薄手のSATAケーブルに交換。これで本当に大丈夫なはず。原因がケーブルということになるとHDDは問題ないということになるんだけど、消費電力とかもあるからこのままSSDでいく予定。
ちなみにCubieBoardは基盤上のピンコネクタから+5Vを供給するため、専用のSATAケーブルが付属している。ただしこれSATAと一体化しているタイプなので、SATAだけ別のケーブルに交換するということができない。というわけで
鋸で真っ二つの刑。力技もいいところだけど電気的には問題なし。
なおSSDは結局WDのWDS240G1G0A(240GiB)にしたんだけど、 http://www.hardware-boom.com/solid-state-drive-western-digital-green-pc-ssd-240gb/ にある分解写真を見たら(スッカスカなのはまぁいいとして)基板におもいっきり『SanDisk』って書いてある。やっぱ中の人一緒じゃねーかコレ。
GR-PEACH + U-Bootでtftpboot
会社帰りにパーツ屋へ閉店時刻ぎりぎりに滑り込んでLANコネクタを買ってきた。んでボードにハンダ付けして早速動作確認。TFTPの使い方をよく知らないのでGoogle先生に聞きながら適当に実施。
=> setenv autoload no => dhcp sh_eth Waiting for PHY auto negotiation to complete.. done sh_eth: 100Base/Full BOOTP broadcast 1 BOOTP broadcast 2 DHCP client bound to address 192.168.0.7 (577 ms)
お、取れた。ということはU-Bootで通信はできているということなので一安心。
次に接続先のIPとファイル名を指定。
=> setenv serverip 192.168.0.5 => setenv bootfile netbsd.bin
tftpbootコマンドで先ほど指定したIPアドレスからファイルをダウンロードして0x20000000に展開。
=> tftpboot sh_eth:0 is connected to sh_eth. Reconnecting to sh_eth sh_eth Waiting for PHY auto negotiation to complete.. done sh_eth: 100Base/Full Using sh_eth device TFTP from server 192.168.0.5; our IP address is 192.168.0.7 Filename 'netbsd.bin'. Load address: 0x20000000 Loading: ################################################################# ################################################################# ################################################################# ################################### 2.8 MiB/s done Bytes transferred = 3376148 (338414 hex)
ダウンロードは1〜2秒で終わるので後々トライ&エラーする羽目になってもストレスが溜まることは無さそう。
で実行。
=> go 0x20000000 ## Starting application at 0x20000000 ... hey, favstar! ban stop me premiamu! -- @toshi_a
よし動いた。
というわけでなんとか目処は着いたので移植に専念できそう。よかったよかった。
GR-PEACHでxputc
GR-PEACHにNetBSD載せらんねーかなという実験の手始めとしてブートローダのところを見ていると、どうもシリアルコンソールにデバッグ出力としてxputcというサブルーチンで行っているものがある。実態はおそらくsrc/sys/arch/arm/cortex/a9_mpsubr.SっぽいけどどうもRZ/A1Hでそのまま使えるかというとなんか微妙な気がする…ということでRZ/A1H向けのxputcを実装してみた。xputc以外はビルドを通すために用意しただけので空関数だったりと超適当。
なおRZ/A1Hのシリアル出力は最大16文字分のバッファがあるので、正しくシリアル出力ができているかを確認したい場合は16文字以上の文字列を出す必要がある。それと文字化けや欠けが発生してもわかるよう、それなりの意味のある文字列が望ましい。…ということで10秒くらい考えた結果こうなった。
.section .start,"ax",%progbits .global _C_LABEL(grpeach_start) _C_LABEL(grpeach_start): PRINT("hey, favstar! ban stop me premiamu! -- @toshi_a") loop: b loop
と、こんなておくれプログラムでとりあえずxputcでシリアル出力ができることは確認できた。
ただこれでできたnetbsd.binをGR-PEACHに読ませようとしたときに気がついたんだけど、今のところ3MBはあるnetbsd.binをGR-PEACHのメモリに配置する方法がない。というのも、
- シリアル(xmodem等) → なぜか600KiBほど転送した段階で固まる
- USB → microUSB端子に刺さるものを持っていない
- Ethernet → u-bootで対応しているようだけどコネクタを付けていない、ついでにHUBのポートも足りない
- microSD → まさかのu-boot未対応
という状況。ちなみにxputcの確認はどうせコードは手前の領域だろうということで、xmodem転送中にフリーズしたらリセットして何食わぬ顔で実行、という手段で良かったんだけども。ぐぬぬ。