- PetaLinux, Zynq/ZynqMP üzerinde özelleştirmeye hazır bir çekirdek, aygıt ağacı ve kök dosya sistemi sağlar.
- Gerçek iş akışı Vivado (XSA), PetaLinux (görüntü) ve Vitis/SDK'yı (uygulama) birleştiriyor.
- Aygıt Ağacı, Vivado'da tanımlanan adresi ve kesme haritasını yansıtır.
- UIO/sürücüler IP'ye erişimi kolaylaştırır; FPGA Yöneticisi PL yinelemelerini kolaylaştırır.
Eğer PetaLinux ile ilgili sorun yaşıyorsanız endişelenmeyin: yalnız değilsiniz. dik öğrenme eğrisiAncak Vivado, PetaLinux ve Vitis'in birlikte nasıl çalıştığını ve her bir bileşenin hangi rolü oynadığını anlamak için net bir yol var. Burada, Vivado tasarımından Vitis'te ilk uygulamanızı çalıştırmaya geçmenize yardımcı olacak pratik ve düzenli bir açıklama bulacaksınız. Linux Zynq veya Zynq UltraScale+ üzerinden denemede ölmeden.
Birçok kişi Vitis'in içinde tek başına "yaşamanın" mümkün olup olmadığını merak ediyor. Çekirdek, aygıt ağacı ve kök dosya sistemi için PetaLinux'a ihtiyacınız var.Gerçek dünya sistemlerinde göreceğiniz tipik iş akışı şöyledir: Vivado'da .xsa dosyasını oluşturun, PetaLinux projesini oluşturun ve yapılandırın (bazen bir BSP'den), görüntüyü derleyip paketleyin (SD için WIC) ve ardından sysroot'u dışa aktararak uygulamayı Vitis'te veya harici bir araç zinciriyle geliştirin. Daha sonra alternatifleri, sonsuz yeniden derlemelerden kaçınmak için ipuçlarını ve FPGA Yöneticisi veya TCF Aracısı gibi öğelerle neler yapılabileceğini açıklayacağım.
PetaLinux nedir ve varsayılan olarak neleri içerir?
PetaLinux, AMD'nin SoC'leri ve MPSoC'leri için tasarlanmış bir referans dağıtımıdır ve size özelleştirmeye hazır bir Linux ortamı sağlar. şarj cihazları çizme ve optimize edilmiş çekirdekKütüphaneler ve yardımcı programlar, C/C++ desteği ve hata ayıklama araçları içerir. Ayrıca, iş parçacığı seçenekleri, FPU desteği ve kolay ağ ve aygıt yazılımı yapılandırması için web tabanlı bir yönetim sunucusuyla birlikte gelir.
Resmi BSP'ler genellikle önceden hazırlanmış önyükleme ve yapılandırma görüntüleriyle birlikte gelir. ikili dosyaları dağıtın ve başlatın donanım gerçek veya QEMU'daPetaLinux ile birlikte gelen eksiksiz sistem emülatörü, ilk testleri hızlandırır ve detaylara dalmadan önce projenin başladığını doğrulamak için idealdir. uygulamalar o sürücüler.
Önerilen donanım-yazılım iş akışları
Profesyonel ortamlarda, Linux iş akışının iki çeşidi kullanılır: biri, komutlar PetaLinux'tan ve uygulama geliştirme için Vitis'i entegre eden bir diğeri. .xsa dosyası oluşturuluyor ve eğer varsa, bit akışı.
Vitis'te her şeyi yapabilir miyim? Linux için hayır. Vitis, platformlar oluşturmak için harikadır Özel bir çekirdeğe, aygıt ağacına ve kök dosya sistemine ihtiyaç duyduğunuzda, olağan yaklaşım şudur: Sistemi derlemek ve SDK/sysroot'u dışa aktarmak için PetaLinux; uygulamanızı derlemek ve hata ayıklamak için Vitis veya harici bir araç zinciri.
XSA'dan önyükleme sistemine
Uygulanabilir asgari güzergah genellikle şu şekildedir: .xsa dosyasını Vivado'da oluşturursunuz.Projeyi petalinux-create ile (veya bir BSP'den başlayarak) oluşturuyorsunuz, PetaLinux'taki donanımı bu .xsa dosyasıyla güncelliyorsunuz ve yapılandırmayı (çekirdek, aygıt ağacı ve kök dosya sistemi) ayarlıyorsunuz. Ardından derleyip .wic biçiminde paketliyor ve SD kartınıza yüklüyorsunuz.
Sistemin açılmasıyla birlikte başvuru zamanı geldi. sysroot/SDK'yı PetaLinux'tan dışa aktarın Vitis'te ise .xsa dosyasından bir platform oluşturursunuz. Buradan, kök dosya sistemi kütüphaneleriyle düzgün bir şekilde bağlantı kurmak için sysroot'a işaret eden C/C++ uygulama projenizi oluşturur ve uygulamayı hedefte tcf-agent, gdbserver veya tercih ettiğiniz yöntemle çalıştırırsınız.
Gerçek hayattan küçük bir uyarı: Vivado/Vitis/PetaLinux versiyonları Bunların da kendine has tuhaflıkları var. Örneğin, Vitis Unified 2023.2 sürümünde tcf-agent'a bağlanmayı engelleyen bir sorun bildirildi ve hızlı çözüm olarak 2024.1 sürümüne yükseltme yapıldı. Her zaman sürüm notlarını kontrol edin ve mümkünse bir proje sırasında araç yığınını dondurun.
Vivado'da donanım tasarımı (Zynq-7000 ve Zynq UltraScale+)
Teknolojik temeliniz Vivado'nun Blok Tasarımındadır. “ZYNQ7 İşleme Sistemi” bloğunu ekleyin (veya ZynqMP eşdeğeri) ve DRAM ve saat ayarlarını yapmak için Run Block Automation'ı başlatın. Buradan ihtiyacınız olanı ayarlayın.
- Harici kesmeleri etkinleştirin: PS özelleştirmesinde, PL çevre birimleri arasında IRQ hatlarını paylaşmayı planlıyorsanız PS-PL Kesmeleri ve Paylaşılan Kesmeleri etkinleştirin.
- Saatleri senkronize edin: Yaygın bir uygulama, AXI veri yolu saatinin PS saatiyle tutarlı olması için FCLK_CLK0'ı M_AXI_GP0_ACLK portuna bağlamaktır.
PL IP'lerde otomasyona güvenin. Bağlantı Otomasyonunu Çalıştır AXI bağlantıları ve tahkim sağlar, ancak unutmayın: kesmeleri veya tüm saat ağaçlarını bağlamaz. IRQ'lar için bir concat bloğu kullanır ve çıktısını PS'ye yönlendirir.
- Çevresel IP'lerinizin her bir IRQ hattını Concat bloğuna bağlayın.
- Concat çıkışını PS kesme girişine bağlayın.
PL'de hızlı belleğe ihtiyacınız varsa BRAM ekleyin. BRAM Denetleyicisi ve Blok Bellek Üreticisi Eklenir, port sayısını, genişliğini ve kapasitesini tanımlar ve en önemlisi Adres Düzenleyicisi'nde eşlemesini kontrol eder.
- Adres haritasını kontrol edin ve ayarlayın: herhangi bir aralık çakışması olamaz; eğer varsa, Vivado çakışmayı kırmızı renkle boyar.
- Diğer ana bileşenleri (örneğin, PL'deki bir yardımcı işlemci) göz önünde bulundurun. Sentezin başarısız olmasını önlemek için adres atamak zorunludur.
Tasarımı tamamlamak için .bd dosyası için HDL sarmalayıcıyı oluşturun, sentezleyin ve uygulayın. Bit akışı oluşturma Biraz zaman alabilir ve tamamlandığında, PL'yi başlangıçtan itibaren programlamak istiyorsanız bit dahil olmak üzere donanımı dışa aktarır.
Bazı yararlı açıklamalar: PS sinyallerini EMIO ile PL'ye maruz bırakın GPIO veya I2C için, örneğin bir PYNQ kalkanı kullanacaksanız, bu oldukça pratiktir. Entegre çevre birimlerine dikkat edin: genellikle cihazdaki sabit pinlere bağlanırlar ve bağlantıları değiştirmeden bunları kumaş IP'leriyle değiştirmek her zaman mümkün değildir. Uygulama başarısız olursa, kısıtlamaları (XDC) ve atamaları kontrol edin.
Cihaz ağacı ve donanım eşlemesi
Milyon dolarlık soru: Linux sizi ne kadar soyutluyor? Cihaz Ağacı Bu, aygıt adreslerini, IRQ'ları ve uyumlulukları açıklar. Bu eşleme, katmanlar kullanmadığınız sürece önyükleme sırasında "dinamik" değildir; normalde statiktir ve Vivado'nun Adres Düzenleyicisi ile PetaLinux tarafından oluşturulan DTS'den türetilir.
Kontrol kısmı (kayıtlar) ve veri kısmı (örneğin DMA erişimleri) kavramsal ve fiziksel olarak ayrılmalıdır. "reg" aralıkları ve kesme satırlarıSürücü (veya UIO), bu bilgileri belleği eşlemek ve mantığı kesmek için kullanacaktır. Aralıkların boyutu ve hizalaması, Vivado'da tanımladığınız değerlerle eşleşmelidir.
Eğer PetaLinux ile derlerseniz, DTS parçaları genellikle .xsa dosyasından otomatik olarak oluşturulur. .xsa'yı güncelle Donanımı değiştirdiğinizde (yeni IP'ler veya adresler), en azından cihaz ağacını ve çekirdeği yeniden oluşturmanız gerekir. Rootfs dosyasında her zaman değişiklik gerekmez ve bu nedenle, kullanıcı kitaplıkları değiştirilmemiş olsa bile sysroot dosyası kullanılabilir.
C/C++'dan donanıma erişim seçenekleri
Tek bir yol yok; projenizin durumuna ve sürücülere ayırmak istediğiniz emeğe göre seçim yapın. / dev / mem MMIO eşlemesi için uygundur, ancak güvenlik, taşınabilirlik ve kesintiler nedeniyle üretimde önerilmez.
Ara alternatif: UIO (Kullanıcı Alanı G/Ç) Kullanıcı alanındaki IP bölgelerini eşlemenize ve select/poll ile kesmeleri yönetmenize olanak tanır. UIO düğümlerinin Cihaz Ağacına eklenmesini gerektirir, ancak eksiksiz bir sürücü yazmaktan kaçınır.
Profesyonel seçenek, IP'niz için bir karakter sürücüsü veya bir platform sürücüsü oluşturmaktır. karakter sürücüsü DMA, IRQ, güç ve /dev'de kararlı bir arayüz üzerinde ayrıntılı kontrol elde edersiniz; ayrıca çekirdek ekosistemiyle gelişmiş entegrasyona sahip olursunuz. IP'niz AXI-DMA veya standart çerçeveler kullanıyorsa, mevcut sürücülere güvenin.
Araç zincirine gelince: Vitis'i kullanabilir veya PetaLinux tarafından dışarı aktarılan SDK ile derleyebilirsiniz. petalinux-build –sdk ve projenizi o sysroot'a bağlayarak hedefin kök dosya sistemindekiyle aynı kütüphanelere bağlandığınızdan emin olun. Vitis, .xsa dosyasından teçhizatı oluşturmayı ve uzaktan hata ayıklamayı başlatmayı basitleştirir.
Hata ayıklama ve uzaktan yürütme
Uygulamayı hedefte çalıştırmak için birkaç seçeneğiniz var. tcf-ajanı Vitis'i başlatmak ve hata ayıklamak için iyi çalışır, ancak bunun için ajanın rootfs'ye kurulu olması (petalinux-config -c rootfs komutuyla eklemeniz gerekir) ve sürüm çakışmanız olmaması gerekir.
Alternatif olarak, gdbserver Basit ve sağlamdır. İkili dosyanızı hedefe kopyalarsınız, `gdbserver :port ./yourapp` komutunu çalıştırırsınız ve çoklu mimarili gdb'yi kullanarak ana bilgisayardan bağlanırsınız. Birçok ekip, gdbserver'ı VS Code Remote veya betiklerle birleştirir. Python.
Printf'in ötesine geçmenin bir yolu olarak çekirdek profilleme ve izleme tekniklerine göz atın. çekirdek profillemesi ve izleri Zynq topluluğu, hatalar belirgin olmadığında size zaman kazandıracak etkili hata ayıklama için en iyi uygulamaları paylaştı.
Her şeyi yeniden inşa etmeden donanımı yükseltin
PL'deki bir değişimin bizi "dünyayı yeniden yapmaya" zorlayacağını düşünmek normaldir, ancak manevra alanı da vardır. çekirdek tarafından görülebilen arayüzler (adresler, IRQ'lar, uyumluluk), rootfs ve sysroot genellikle etkin kalır. Bu durumda, PL'yi yeniden programlayabilir ve kullanıma hazır hale getirebilirsiniz.
Bit akışlarını sıcak olarak yüklemek için Linux, FPGA Manager çerçevesini sunar. fpgautil veya PL'yi kullanıcı alanından programlamak için sysfs/configfs arayüzü. Bu, tüm görüntülerin yeniden oluşturulmasını önler ve mantık yinelemelerini hızlandırır.
Donanım değişikliği yeni IP'ler getiriyorsa veya aralıkları/IRQ'ları değiştiriyorsa, o zaman evet: cihaz ağacını yeniden oluşturur ve BOOT.BIN/image'i yeniden oluşturur. Yine de, derlemenin tamamlanmış görevleri tekrarlamaması için sstate önbelleğinden yararlanır.
Yapıları hızlandırmak ve istikrar kazanmak için ipuçları
"Her şeyi yeniden inşa etme" alışkanlığına karşı en iyi ilaç, saygınlık ve düzendir. Devlet aynası ve bir dizin indirme Yocto/PetaLinux için paylaşılır; bu, değişmemiş paketlerin yeniden derlenmesini önler. Bu, büyük sistemlerde ve şirket içi ortamlarda büyük fark yaratır.
Tekrarlanabilirliği sağlayın: Vivado/Vitis/PetaLinux'un bağlantı versiyonları Ve yamaları belgelendirin. Mümkünse, onaylanmış kritik bir hata olmadığı sürece proje sırasında sürüm değiştirmeyin. Yeni bir sürüme geçmeden önce, bir dalda test edin.
QEMU sizin müttefikinizdir. QEMU SD kartı flaş etmeden, kök dosya sisteminin ve çekirdeğin düzgün çalıştığını doğrulamak için görüntüyü QEMU'da başlatın. Bu, gerçek donanımı değiştirmez, ancak önyükleme döngülerinden tasarruf sağlar.
Yukarıdakilerin hepsinden sonra, resim artık bir bulmaca gibi görünmüyor. tam referans dağıtımı (önyükleyici, çekirdek, rootfs ve araçlar)Vivado fiziksel haritayı tanımlarken, Vitis uygulama ve hata ayıklama döngüsünü hızlandırır. Cihaz Ağacı, UIO veya sürücülerden yararlanmak, "Merhaba Dünya" ile donanımınızı sorunsuz bir şekilde kullanan sağlam bir uygulama arasındaki farkı yaratır.
Genel olarak bayt ve teknoloji dünyası hakkında tutkulu bir yazar. Bilgilerimi yazarak paylaşmayı seviyorum ve bu blogda da bunu yapacağım; size gadget'lar, yazılım, donanım, teknolojik trendler ve daha fazlasıyla ilgili en ilginç şeyleri göstereceğim. Amacım dijital dünyada basit ve eğlenceli bir şekilde gezinmenize yardımcı olmaktır.