Apakah mungkin untuk mendapatkan informasi untuk pohon perangkat menggunakan / sys dari kernel yang berjalan?


20

Umumnya untuk sistem lengan, pohon perangkat memasok informasi perangkat keras ke kernel (Linux). Pohon perangkat ini ada sebagai file dts (sumber pohon perangkat) yang dikompilasi dan dimuat ke kernel. Masalahnya adalah saya tidak memiliki akses ke dtsfile seperti itu , bahkan tidak ke dtbfile.

Saya memiliki akses ke /sysdan /procpada mesin dan saya ingin bertanya apakah itu akan memungkinkan saya untuk "menebak nilai yang benar" untuk digunakan dalam dts?

Juga jawaban potensial dapat menyoroti aspek tambahan jika jawaban untuk pertanyaan ini juga tergantung pada apakah antarmuka pohon perangkat digunakan di tempat pertama (yaitu a dtbdibuat dan disediakan ke kernel) daripada beberapa peretasan lagi "kita cukup mengalihkan dari vanilla dan menambal kernel untuk menyelesaikan masalah informasi perangkat hanya untuk kernel kami "-solusi?


Apakah Anda memiliki akses ke gambar boot? Anda dapat mengekstrak pohon perangkat dari sana. Saya dapat membantu.
phk

Jawaban:


27

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

Saya pikir keduanya alias, /sys/firmware/devicetree/basekemungkinan menjadi pilihan yang lebih baik setelah penjinakan /proc.

Anda kemudian dapat mengakses properti dts dari file:

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

Format output untuk bilangan bulat adalah biner, jadi hexdumpdiperlukan.

dtc -I fs

Dapatkan pohon perangkat lengkap dari sistem file:

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

output dts ke stdout.

Lihat juga: Cara membuat daftar Tree Device kernel | Unix & Linux Stack Exchange

dtc di Buildroot

Buildroot memiliki BR2_PACKAGE_DTC=ykonfigurasi untuk diletakkan dtcdi dalam sistem file root.

QEMU -machine dumpdtb

Jika Anda menjalankan Linux di dalam QEMU, QEMU secara otomatis menghasilkan DTB jika Anda tidak memberikannya secara eksplisit -dtb, dan juga dapat membuangnya langsung dengan:

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

sebagaimana disebutkan di: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

Diuji dengan pengaturan QEMU + Buildroot ini pada kernel Linux v4.19 arm64.


4

Saya tidak yakin apakah saya mengerti Anda dengan benar.

Jika Anda menggunakan sistem yang melakukan boot menggunakan dtb, bagan perangkat Anda harus dapat diakses di dalam debugfs.

Anda juga dapat mencoba alat-alat dtc oleh Pantelis Antoniou, mereka termasuk fdtdump dan fdtget yang mencetak dts dari gumpalan.

Jika Anda tidak memiliki hierarki perangkat sama sekali dan tidak mem-boot dari dtb, maka Anda harus melihat sendiri kode mesin dan menambahkan semua atribut dan node khusus perangkat ke dts Anda. Tidak ada pohon perangkat "sintetis" yang dihasilkan untuk boot semacam itu. Titik awal akan menjadi mesin atau orang tua yang serupa dan kemudian bekerja dengan sistem Anda dengan sistem.


Terima kasih, untuk memperjelas. Ada kemungkinan bahwa dtbmungkin dapat diakses melalui melalui debugfs belum bahwa akan mengandalkan CONFIG_DEBUG_FSdalam .configdan bahkan jika set masih pada kemauan belaka bahwa mereka benar-benar menggunakan dtbuntuk memulai dengan, saya membaca hak ini? Jadi dengan "nasib buruk" mereka tidak melakukan keduanya dan menggunakan semacam patch kernel langsung yang dipasang pada antarmuka pohon perangkat, juga kan? Jadi ini berarti jalan terakhir adalah kode mesin, mengingat mereka melanggar GPLv2 dan menutup sumber kernel, kan?
humanityANDpeace

Ya dan ya untuk dua yang pertama. Terakhir, IANAL, tetapi lengkungan mesin / ??? / mach - ??? / board - ???. C akan berisi perangkat khusus yang ada untuk mesin di kernel yang lebih tua. Ini harus dicakup oleh GPL dan harus tersedia dengan biaya. Driver perangkat individu mungkin merupakan sumber tertutup, tidak ada pelanggaran di sana.
FRob
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.