Apa itu file dtb u-Boot dan bagaimana cara menggunakannya (BeagleBoard xM)?

12

Saya mencoba membangun Linux khusus untuk BeagleBoard xM (Rev. C). Saya melakukan banyak C / C ++ tetapi saya pemula dalam membangun dan menginstal Linux dari awal.

Saya menggunakan Yocto Project build appliance ( https://www.yoctoproject.org/ ) yang sepertinya menjanjikan - ia membuat file untuk boot loader u-Boot, kernel Linux dan sistem file root.

Halaman ini memberikan instruksi untuk mengatur kartu micro SD dengan file yang dihasilkan Yocto. Namun, file gambar menyertakan file ".dtb" yang tidak disebutkan dalam instruksi pengaturan.

Apakah file ini ada hubungannya dengan perangkat keras papan? Berbagai situs menyebutkan memuat file dtd (mungkin di uEnv.txt?) Tetapi saya belum menemukan informasi terperinci.

Saya menggunakan instruksi di atas untuk mengatur partisi boot dengan MLO dan u-boot.img, dan sedikit mengacaukan dengan uEnv.txt. Saya juga mengatur partisi kedua dengan sistem file root.

Saya dapat melakukan boot dan masuk (melalui konsol port serial), tetapi sepertinya sebagian besar perangkat keras papan - misalnya video dan semua perangkat USB termasuk ethernet - tidak berfungsi. Mungkinkah ini karena saya tidak menggunakan file .dtb?

Adakah yang bisa menjelaskan dtb dan bagaimana menggunakannya di papan beagle? Terima kasih!

Jeremy
sumber
Ternyata saya salah membaca nama file - Saya awalnya mengira itu adalah file ".dtd" tetapi sebenarnya ".dtb" - itulah sebabnya saya tidak dapat menemukan informasi tentang itu. Pertanyaannya sekarang telah diperbarui.
Jeremy
Contoh minimal dengan perangkat virtual QEMU untuk lebih memahami konsep: stackoverflow.com/questions/17488320/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

12

Menjawab pertanyaan saya sendiri, setelah saya menemukan apa yang harus dicari. File "dtb" berisi Device Tree Blob (atau Binary) (deskripsi bagus di sini ). Ini adalah cara (er) baru untuk meneruskan informasi perangkat keras tentang board ke kernel Linux.

Itu dapat dimuat ke dalam memori dan diteruskan ke kernel oleh u-Boot.

Berikut adalah perintah u-Boot yang saya gunakan:

setenv bootargs 'console=tty0 console=ttyO2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw'
fatload mmc 0:1 0x80300000 zImage
fatload mmc 0:1 0x815f0000 beagle-xm.dtb
bootz 0x80300000 - 0x815f0000

zGambar menjadi kernel, dan beagle-xm.dtb menjadi gumpalan pohon perangkat. Saya mengotomatiskan proses booting dengan mengatur variabel "uenvcmd = ..." di uEnv.txt (dengan yang di atasnya), tapi agak jelek dan mungkin ada cara yang lebih baik.

Perhatikan bahwa ini boot, dan mengatakan bahwa itu memuat pohon perangkat OK. Namun, saya masih belum memiliki perangkat USB atau video (sejauh yang saya tahu). Namun, saya menduga itu mungkin masalah yang berbeda.

Jeremy
sumber
3
Ini adalah cara (er) baru untuk menyampaikan informasi perangkat keras tentang board ke kernel Linux. Tidak ada cara sebelumnya untuk meneruskan informasi perangkat keras ke kernel. Alih-alih, kernel harus menyertakan semua informasi secara statis dan karenanya akan memiliki file C khusus papan untuk mendaftar semua pemetaan itu. Ini adalah mimpi buruk pemeliharaan dari sudut pandang kernel.
BatchyX
Terima kasih! Saya menemukan cara memuat file dtb, dan Linux sekarang melakukan booting dan mengeluarkan berbagai pesan tentang memuat driver, tetapi saya tidak dapat melihat perangkat USB apa pun (termasuk modul ethernet). Lihat pertanyaan baru: tautan . Mungkin ada sesuatu yang perlu saya konfigurasi secara manual di Linux?
Jeremy
Tapi alamat apa yang digunakan untuk file dtb? Sebagai contoh, jika zImage saya menuju ke alamat 0x43000000 (sebagai pengganti contoh di atas 0x80300000), di mana seharusnya dtb pergi?
André van Schoubroeck
2

Saya menggunakan Ubuntu 14.04 pada beaglebone black, jadi pengaturan saya mungkin sedikit berbeda, tapi di sini adalah bagaimana saya memuat dtb khusus:

Di uEnv.txt, tambahkan baris dengan: dtb=name-of-desired.dtb

Lokasi yang dicari harus seperti yang ditentukan di sini . Bagi saya ini adalah di /boot/dtbs/linux-kernel/mana linux-kernel adalah nama versi yang dimuat.

Damian Manda
sumber
0

Perhatikan bahwa ada 2 dtb. U-boot dtb dan kernel dtb. Mereka adalah 2 hal yang berbeda. U-boot board dts / dtb tidak selalu digunakan, tidak wajib, btw di u-boot Anda dapat menggunakan "u-boot" dtb yang menanamkannya ke dalam u-boot atau menggabungkannya ke u-boot.

Angelo Dureghello
sumber