ComcertoでFreeBSD その弐

[arm.arm](http://dmesgd.nycbug.org/index.cgi?do=view&id=5133)や[arm.armv7](http://dmesgd.nycbug.org/index.cgi?do=view&id=5130)をビルドしてみて、[arm.armv6なターゲット](https://qiita.com/yamori813/items/b803ba5c80df600931e1)も試してみたくなり、久しぶりにビルドしてみました。

おうちのarm箱にはHardOffで入手したcns11xxやxilinxもありますが、消されてしまったのでCURRENTは試せません。armv6(arm11)はまだあるので試せます。

clangでのクロスビルドは8時間くらいかかるので、ビルドで一日つぶれます。microserverの消費電力はだいたい0.1kWhくらいなので8時間で0.8kWhで1kWhが20円とすると16円になります。

前回ビルドしたのは

```
FreeBSD 12.0-CURRENT #0 7db3774(zrouter)-dirty: Sun Dec  4 20:12:57 JST 2016
    hiroki@microserver:/storage/home/hiroki/obj/storage/home/hiroki/zrouter/tmp/arm.armv6/storage/home/hiroki/freebsd/sys/Softbank_E-WMTA22 arm
FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on LLVM 3.8.0)
```

でした。

arm.armやarm.armv7を通した最近のCURRENTでビルドは通りましたが、起動しません。:(

いつものようにデバッグライトをもりもり入れて確認します。

まずinitarm()のfdt_get_mem_regions()でdtsからmemoryが拾えていません。

これはdtsに以下が無いためでした。

```diff
 / {
        compatible = "E-WMTA22", "mindspeed,m831xx-soc";
        model = "E-WMTA22";
+       #address-cells = <1>;
+       #size-cells = <1>;
```

前回ビルドした時とdtsのパスが変わっていて、includeしているものが古いパスで、ビルドしているdtsが新しいパスにありました。

なんとdtsでincludeしているファイルがなくてもビルドが通っています。調べて直さないとダメですね。

これを直したら、fdt_get_mem_regions()より前のOF_init()がエラーになります。これは

```diff
                intc: intc@A0000 {
-                       compatible = "comcerto,intc";
                        interrupt-controller;
                        #address-cells = <0>;
                        #interrupt-cells = <1>;
                        reg = <0xa0000 0x10000>;
+                       compatible = "comcerto,intc";
                };
```

が原因でした。

とりあえずブートしましたがハングします。

```
---<<BOOT>>---
ARM Debug Architecture not supported
KDB: debugger backends: ddb
KDB: current backend: ddb
Copyright (c) 1992-2019 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 13.0-CURRENT #57 c8e8262a047-c263685(zrouter)-dirty: Mon Oct  7 10:46:35 JST 2019
    hiroki@zrouter:/usr/home/hiroki/zobj/usr/home/hiroki/ZRouter/tmp/usr/home/hiroki/freebsd/arm.armv6/sys/Softbank_E-WMTA22 arm
FreeBSD clang version 8.0.1 (tags/RELEASE_801/final 366581) (based on LLVM 8.0.1)
unknown CPU (ID = 0x4117b365)
CPU Features: 
Optional instructions: 
  64KB/32B 4-way instruction cache
  64KB/32B 4-way WB data cache
real memory  = 134217728 (128 MB)
avail memory = 126062592 (120 MB)
arc4random: WARNING: initial seeding bypassed the cryptographic random device because it was not yet seeded and the knob 'bypass_before_seeding' was enabled.
random: entropy device external interface
ofwbus0: <Open Firmware Device Tree>
simplebus0: <Flattened device tree simple bus> on ofwbus0
simplebus1: <Flattened device tree simple bus> on ofwbus0
pic0: <Comcerto Interrupt Controller> mem 0xa0000-0xaffff on simplebus1
timer0: <Comcerto Timer> mem 0x50000-0x5ffff irq 2,3,4,5,6,7 on simplebus1
Event timer "Comcerto Timer0" frequency 125000000 Hz quality 1000
Timecounter "Comcerto Timer1" frequency 125000000 Hz quality 1000
cpulist0: <Open Firmware CPU Group> on ofwbus0
cpu0: <Open Firmware CPU> on cpulist0
cpu1: <Open Firmware CPU> on cpulist0
uart0: <16550 or compatible> mem 0x90000-0x93fff irq 8 on simplebus1
uart0: console (115200,n,8,1)
cfi0: <AMD/Fujitsu - 32MB> mem 0x20000000-0x21ffffff on ofwbus0
cfi0: Manufacturer ID:c2 Device ID:227e
cfid0 on cfi0
Timecounters tick every 10.000 msec
Trying to mount root from cd9660:/dev/cfid0s.rootfs.uzip []...
Warning: no time-of-day clock registered, system time will not be set accurately
Enter full pathname of shell or RETURN for /bin/sh: 
pid 16 (sh), jid 0, uid 0: exited on signal 4
random: unblocking device.
```

cninit()より前のデバッグは結構骨がおれます。

今から考えればFreescaleのMindspeedの買収は、そもそもFreescaleはarmなショリューション(i.MX31)を持っていて、買収して潰して競合を減らすための施策だったように思われます。半導体ビジネスは厳しいですね。

最初あんまり興味がなかったのですが、やることもなくなってきたので、ちょっと手をつけてみようかとも思っています。