Hangi aygıt ağacı blobunu (dtb dosyası) kullandığımı nasıl anlarım?


9

Yocto Linux çalıştıran bir süpürgeye takılı gömülü 'Modülde Bilgisayar' olan TS-4900 ile çalışıyorum. Başlamak için U-Boot kullanır ve sözde süpürgenin modeline dayanarak başlatmak için doğru dtb dosyasını seçer ve muhtemelen doğru olanı bulamazsa modülüm için 'genel' bir dosyaya geri döner.

Peki doğru olanı nasıl / nerede belirler? Hangi .dtb'nin kullanıldığını veya hangisinin kullanılması gerektiğini nasıl ayarlayabilirim?

U-Boot'un önyükleme mesajları aşağıdadır.

U-Boot 2014.10-g3ac6ec3 (Jan 29 2015 - 17:20:15)

CPU:   Freescale i.MX6SOLO rev1.1 at 792 MHz
Reset cause: POR
Board: TS-4900
Revision: C
       Watchdog enabled
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected N25Q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   using phy at 7
FEC [PRIME]
Press Ctrl+C to abort autoboot in 1 second(s)
(Re)start USB...
USB0:   Port not available.
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
No storage devices, perhaps not 'usb start'ed..?
Booting from the eMMC ...
** File not found /boot/boot.ub **
** File not found /boot/imx6dl-ts4900-13.dtb **
Booting default device tree
42507 bytes read in 196 ms (210.9 KiB/s)
118642 bytes read in 172 ms (672.9 KiB/s)
ICE40 FPGA reloaded successfully
4609784 bytes read in 337 ms (13 MiB/s)
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.10.17-1.0.0-technologic+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4609720 Bytes = 4.4 MiB
   Load Address: 10008000
   Entry Point:  10008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 18000000
   Booting using the fdt blob at 0x18000000
EHCI failed to shut down host controller.
   Loading Kernel Image ... OK
   Using Device Tree in place at 18000000, end 1800d60a

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0

(Kernel startup commences...)

Yanıtlar:


7

Bu konuda geç kaldım, ama bu komut dosyasını uyguladım ve bunu bir internet arama motoru kullanarak bulan herkes için ele alacağım.

Modül üzerindeki bu bilgisayar rafın hemen hemen her yerine yerleştirilebilir TS veya özel süpürgelik ve kullanılan cihaz ağacını ayarlamak zorunda kalmadan otomatik olarak çalışmasını istedik. Süpürgelik için benzersiz bir kimliğe sahip herhangi bir taşıyıcı kartında 8 girişli bir kayma kaydımız var. TS-8550'de bu 0x13'tür. http://wiki.embeddedarm.com/wiki/TS-4900#Baseboard_ID

Bu yüzden U- bbdetectBoot'da eklediğimiz komut, bu kaydırma yazmacına bağlı GPIO'yu okur ve bir $ baseboardid ortam değişkeni ayarlar. U-Boot, önce bir süpürgeye özgü aygıt ağacı yüklemeye çalışır /boot/imx6${cpu}-ts4900-${baseboardid}.dtb. Birini bulamazsa, adresindeki yedek cihaz ağacını kullanır /boot/imx6${cpu}-ts4900.dtb. Bu son dosya, herhangi bir taşıyıcı kartında çalışacak olan akıllı varsayılanlara sahiptir. TS-8550, süpürgeye özgü bir taşıyıcı panosuna ihtiyaç duymaz, bu nedenle standart cihaz ağacına geri döner ve önyüklemeye devam eder.

Orijinal sorunuzu cevaplamak için,

cat /proc/device-tree/model

Tüm cihaz ağaçlarımız, cihaz ağacında biraz farklı bir modele sahip olacaktır.
Örneğin, güvenli geri dönüş:

  • "Teknolojik Sistemler i.MX6 Quad TS-4900 (Varsayılan Cihaz Ağacı)"

Veya belirli bir cihaz ağacına sahip TS-TPC-8390 taşıyıcı kartı:

  • "Teknolojik Sistemler i.MX6 Quad TS-4900 (TS-TPC-8390)"

8

U-Boot önyükleme komutunu çalıştırdığında, çekirdek için bir bellek adresi ve aygıt ağacı blob için bir bellek adresi sağlar. Bu nedenle, bu komuttan önce bu dosyaları belleğe yüklemelidir. Verdiğiniz mesajlara dayanarak, eMMC / SD karttan iki dosyanın yüklenemediğini görüyoruz:

/boot/boot.ub
/boot/imx6dl-ts4900-13.dtb

Bu dosyaların bulunmaması, yollarının yanlış olması veya yanlış aygıt olması mümkündür: bölüm, U-Boot load komutuna verilmiştir. Her durumda, komut başarısız olur. Bu noktada, önyükleyicinin, muhtemelen önyükleyicinin kendisiyle aynı ortamda depolanan "varsayılan" bir aygıt ağacı yüklemeye çalıştığı anlaşılmaktadır.

Neler olduğunu tam olarak öğrenmek için, önyükleyicide önyükleme işlemini durdurmak ve U-Boot komut istemine erişmek isteyeceksiniz. Buradan şunları girebilirsiniz:

printenv

Bu, U önyükleme ortamı değişkenlerini yazdırır. Bu değişkenlerin çoğu diğer değişkenleri ifade eder. Bu değişkenlerin bazıları genellikle komut dosyaları gibi yürütülür, bu nedenle önyükleme komut dosyaları, çekirdek ve fdt yük komut dosyaları vb. Görebilirsiniz. Önyükleme sırasını bulmak için bootcmd (veya benzer bir şey) adlı bir değişken arayın . Bu genellikle önyükleme sırasında çalıştırılan şeydir. Önyükleme sırasını birden çok değişken aracılığıyla bu noktadan itibaren izlemeniz gerekir, ancak FDT'yi belleğe yüklemek için load komutlarının nerede kullanıldığını görmelisiniz. Printenv çıktısını göndermek istiyorsanız , burada kullanılan tam mantığı belirleyebiliriz.


1
Teşekkürler. bootcmd , ilk başlatma komut dosyasını içeren bir env değişkeni olmak, ihtiyacım olan şeydi.
SF.
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.