rasberry piのdevicetreeを読む、memory

 まあお仕事なので、ちょっとrasberry pi2のDeviceTree調べてみますしおすし。


 まず最初にDevieTreeとは?詳細はググってくださいw−。


 基本としてARMボード系はHW仕様等がまちまちなので、その記述が必要なのですが、
最初ボードメーカーがコードにオレオレHW仕様を突っ込んでいたらリーナスぶちぎれ
DeviceTreeって共通HW仕様フォーマットに分離したって経緯だったかと^^;

debの逆コンパイル

rpのdtbは/boot以下にあるので、試しに逆コンパイルしてみると、なんか警告出てるんですけど><

pi@raspberrypi:~$ dtc -Idtb /boot/bcm2709-rpi-2-b.dtb -Odts > /home/pi/rp2.dts
Warning (unit_address_vs_reg): Node /memory has a reg or ranges property, but no unit name
Warning (unit_address_vs_reg): Node /soc has a reg or ranges property, but no unit name
Warning (unit_address_vs_reg): Node /soc/vchiq has a reg or ranges property, but no unit name
Warning (unit_address_vs_reg): Node /soc/local_intc has a reg or ranges property, but no unit name
Warning (unit_address_vs_reg): Node /soc/gpiomem has a reg or ranges property, but no unit name
memory属性

で、警告でてたmemoryのついて確認んぅ。

memory {
device_type = "memory";
reg = <0x0 0x0>;
};

上記ドキュメントを参考にすると、reg=の順のはずだが、baseaddressはともかくmemoryのsizeが0x0って><

Qiita記事をみると、直接procfsに展開されているそうなので、そちら確認してみると、

pi@raspberrypi:/proc/device-tree/memory$ hexdump -C reg
00000000 00 00 00 00 37 00 00 00 |....7...|
00000008

ん、0x3700_0000で、1GB未満。ってrp2ってメモリ1GB近くもそんな積んでたっけ?(って、積んでましたw−

pi@raspberrypi:/boot$ cat config.txt |grep gpu
gpu_mem=128

ん、GPUに128MB割り当ててる(0x0800_0000)ので、合計で0x3e00_0000か。

P.S. LPAEによる40bitアドレス

CA15くらいからarmv7でも40bitの物理メモリアドレスを持っています。ので、上記dtsのbaseaddrは40bit記載されてるのもちらほらw−