Çalışan bir çekirdeğin / sys komutunu kullanarak bir aygıt ağacı hakkında bilgi almak mümkün müdür?


20

Genellikle kol sistemleri için, aygıt ağaçları çekirdeğe (Linux) donanım bilgisi sağlar. Bu aygıt ağaçları, derlenip çekirdeğe yüklenen dts (aygıt ağacı kaynağı) dosyaları olarak bulunur. Sorun şu ki, böyle bir dtsdosyaya erişimim yok , bir dosyaya bile dtb.

Ben erişebilir /sysve /procmakinede ve ben bu beni DTS kullanılmak üzere "doğru değerleri tahmin" olanak sağlayacak diye soracaktım?

Ayrıca, bu sorunun yanıtı, cihaz ağacı arayüzünün ilk etapta kullanılıp kullanılmadığına (yani bir dtboluşturulmuş ve çekirdeğe sağlanmışsa) biraz daha hacklemek yerine, potansiyel yanıtı da vurgulayabilir. ve çekirdeği sadece "çözüm" için cihaz bilgi problemini çözmek için yama?


Önyükleme görüntüsüne erişiminiz var mı? Cihaz ağacını oradan çıkarabilirsiniz. Yardım edebilirim.
phk

Yanıtlar:


27

/proc/device-tree veya /sys/firmware/devicetree/base

Bence her ikisi de takma adlar, /sys/firmware/devicetree/basemuhtemelen ehlileştirmeden sonra daha iyi bir seçim /proc.

Daha sonra dosyalardan dts özelliklerine erişebilirsiniz:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

Tamsayılar için çıktı formatı ikiliktir, bu yüzden hexdumpgereklidir.

dtc -I fs

Dosya sisteminden tam bir cihaz ağacı alın:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

dts'yi stdout'a verir.

Ayrıca bkz: Çekirdek Aygıt Ağacı nasıl listelenir | Unix ve Linux Yığın Değişimi

dtc Buildroot'ta

Buildroot kök dosya sisteminin içine BR2_PACKAGE_DTC=ykonacak bir yapılandırmaya sahiptir dtc.

QEMU -machine dumpdtb

QEMU içinde Linux çalıştırıyorsanız, açıkça vermediğiniz takdirde QEMU otomatik olarak DTB'leri oluşturur -dtbve böylece doğrudan aşağıdakileri de dökebilir:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

belirtildiği gibi: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

Linux çekirdeği v4.19 arm64'teki bu QEMU + Buildroot kurulumu ile test edilmiştir .


4

Seni doğru anladığımdan emin değilim.

Bir dtb kullanarak önyüklenen bir sistemdeyseniz, cihaz ağacınıza debugfs içinden erişilebilmelidir.

Pantelis Antoniou'nun dtc araçlarını da deneyebilirsiniz, ddb'yi bir damladan basan fdtdump ve fdtget'i içerir.

Bir aygıt ağacınız yoksa ve bir dtb'den önyükleme yapmadıysanız, makine kodunu kendiniz gözden geçirmeniz ve cihaza özgü tüm özellikleri ve düğümleri dts'nize eklemeniz gerekir. Böyle bir önyükleme için "sentetik" aygıt ağacı oluşturulmaz. Bir başlangıç ​​noktası benzer bir makine veya ebeveyn olabilir ve daha sonra yol sisteminizi sisteme göre çalışır.


Açıklamak için teşekkürler. Bu bir şans var dtbdebugfs yoluyla erişilebilir olabilir henüz o güvenme CONFIG_DEBUG_FSiçinde .configve hatta aslında bir kullanılana hala seti sadece heves eğer dtbbaşlamak, bunu doğru okunur? Yani bazı "kötü şans" ile onlar da yaptı ve cihaz ağacı arabirimi instaed bir tür doğrudan çekirdek yaması kullandı, değil mi? Yani bu, GPLv2'yi ihlal ettikleri ve çekirdeği kapattıkça son çare woult'un makine kodu olduğu anlamına gelir, değil mi?
humanityANDpeace

İlk ikisi için evet ve evet. Son olarak, IANAL, ancak makine kemeri / ??? / mach - ??? / board - ???. C daha eski çekirdeklerdeki bir makine için mevcut olan özel cihazları içerecektir. Bu GPL kapsamına girmeli ve bir ücret karşılığında sunulmalıdır. Bireysel aygıt sürücüleri kapalı kaynak olabilir, orada ihlal yoktur.
FRob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.