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=
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−
ん、GPUに128MB割り当ててる(0x0800_0000)ので、合計で0x3e00_0000か。
P.S. LPAEによる40bitアドレス
CA15くらいからarmv7でも40bitの物理メモリアドレスを持っています。ので、上記dtsのbaseaddrは40bit記載されてるのもちらほらw−