KV260 Kria Starter Kit Series: 3 - Petalinux Install and Boot

Blog serimizin ilk iki paylaşımında KV260 Kria Board'u ayaga kaldırma ve Ubuntu OS calıstırma işlemini gerçekleştirmiştik. Uygulama olarak da Smartcam isimli Xilinx tarafınadan hazır şekilde saglanan bir uygulamayı Ubuntu OS üzerinde başarılı bir şekilde çalıştırmıştık. Bu çalışmalar board'un yeteneklerini keifetmek için giriş adımlarımızdı. Şimdi ise esas konuya gelelim. Yani bir Embedded System geliştiricisinin veya HW/SW sistem geliştiricisinin ilgisini daha çok çekecek bir konu var. K26 SOM kartında bulunan MPSoC'nin yeteneklerinden maksimum ölçüde faydalanabilmek için PL tarafını ayrı PS tarafını ayrı kendi tasarımlarımızla şekillendirelim. Bunu yaparken Xilinx'in sunduğu Linux kernel kullanarak Xilinx'in hazırladığı BSP'lerle derlenen bir işletim sistemi: PETALINUX. Xilinx kendisi bu işletim sisteminin yapısından şu şekilde bahsediyor:

  • Device tree
  • First stage boot loader (optional)
  • U-Boot
  • Linux kernel
  • The root file system is composed of the following components:
    • Prebuilt packages
    • Linux user applications (optional)
    • User modules (optional)

Petalinux, Yocto eSDK'i build için baz alip boot.bin yani imaje olarak yazilabilecek bi çikti elde edilmesini saglayan bir araç. Gün sonunda elde ettigimiz derlenmiş sistemi Linux işletim sistemi olarak biliyoruz. Aslinda Yocto tabanli bir sistem. Xilinx tarafindan Yocto yu baz alip sistem gelistiren özellestirilmiş bir build tool tıpkı Buildroot aracı gibi. Yani yukarıda sıralanan Linux işletim sistemi bileşenlerini bir arada derleyip derleme sonucunda bize .BIN uzantılı bir imaj dosyası verir. Bu da flash tabanlı bir bellek elemanına işlenerek rootfs yani dosya sistemini donanım üzerinde çalıştırmamızı sağlar. Petalinux'un yapısının ve Buildroot ile kıyaslandığı güzel bir yazıyı [3]'te bulabiliriz.

Bu yapıyı derleme sırasında kendi PL tasarımımızı ve istediğimiz gibi oluşturacağımız gömülü Linux sistemimizi kendimiz konfigüre edebileceğiz. Bu pek kolay olmayacak ancak bu süreçte kazanılacak yetenekler:

  • Ubuntu , Petalinux ortamlarının farklarını anlama
  • Custom PL tasarımı yapma ve bunu platform olarak dışa aktarma
  • Vitis kullanarak uygulama geliştirmek ve Embedded Linux ile derlemek
  • BSP , kernel ve rootfs yani Gömülü Linux komponentlerini derlemek ve bu ortamı SoC donanımında çalıştırmak

Tüm bu işleri anlamaya çalışırken Xilinx'in kaynaklarından maksimum ölçüde faydalanmaya çalışacağız. O zaman öncelikle yine Xilinx'in bize sunduğu hazır Petalinux imajını hemen bir SD karta yükleyelim ve geliştirme kartımızda çalıştıralım. Bunu yaparken yaralandığım kaynak belirtilmiştir [1].

Ben burada QSPI flash'ta yer alan bootloader/firmware yazılımını güncelleme adımı atladım. Çünkü board üzerinde çalıştırmayı hedeflediğimiz Petalinux 2022.1 sistemi için zorunlu olan 2022.1 K26 Boot FW bootloader yazılımı zaten Ubuntu 22.04 çalıştırma sürecninde board üzerinde güncelleme yapılarak kurulmuştur. Dolayısıyla Petalinux 2022.1'i direkt olarak SD kart'a yazıp board'a taktığımızda doğrudan düzgün bir şekilde çalışacağını varsayıyoruz. Boot FW ve Petalinux versiyonları arasındaki ilişkiyi de [2] den bulabilirsiniz.

Embedded Linux ve Petalinux Bileşenleri

U-boot:
Linux Kernel:
RootFS:
FSBL:

Device Tree (Xilinx + Linux) :  In general the device tree provides a description/abstraction of what hardware interfaces/peripherals are available so that the Linux OS knows how to manage/use them.

PMU FW (Only Xilinx): Platform Managment Unit Firmware olarak bilinir ve power states, clock ve power domain ve diğer türlü low-level task bu Microblaze yapısı tarafından halledilir. Standard PMU FW diye birşey yoktur , her board ve uygulamaya göre custom olarak üretilmelidir. Detaylı bilgi için link.

Device Tree Overlay - .dtbo (Xilinx + Linux): Embedded Linux kullanan bazı cihazlar özellikle FPGA içeren SoC'lerde Linux boot olduktan sonra da PL 'i yükleyebilmek lazım. Bunu yapmayı sağlayan ve device tree'lerin üzerinde bir yapıdır. Bir nevi device tree'ler için patch görevi görür. Donanıma dair nitelikler değiştiğine device tree'nin sıfırdan derlenmesini önler ve patch olarak (.dtbo ile) güncelleme işini hallederek base'deki mevcut device treenin genişlemesini ve güncellenmesini sağlar.

Vivado Kurulumu

Ubuntu'da Vivado kurulumu yaparken dikkat edilmesi gereken konu bazı paketlerin kurulumdan önce düzgünce OS'e yüklenmiş olmasıdır . Aksi takdirde kurulum tamamlansa da hanging durumu olacaktır. Linkteki adımları takip ederek gerekli paketleri kurmak ve sonrasında Vivado'yu kurmak gerekiyor.
Ayrıca Vivado önce download sonra install modunda kurulacak şekilde çalıştırılıyorsa Download edilen klasör ile kurulum yapılan klasör farklı olmalı. Aksi takdirde kurulum esnasında Download dosyalarını silmek üzere bir hareket yapıyor.
Proje olarak [1]'deki projenin aynısı gerçeklenecek. Vivado projesinde  Zynq MPSoC kullanacağından bu ürün modelinin platform mantığını ve yapısını anlamak için Xilinx'in şuradaki eğitim dökümanı faydalı olacaktır. 

Petalinux Kurulumu ve KV260 BSP ile Derleme

Önce Xilinx'in sitesinden derlemek istediğimiz Petalinux versiyonunu seçip indiririz. Bunu yaparken dikkat edeceğimiz nokta derleyeceğimiz Petalinux versiyonu ile üreteceğimiz platformun Vivado versionu ve geliştireceğimiz uygulama yazılımlarının Vitis versiyonları aynı olmalıdır. Bu makalede tüm bu araçlar için 2023.2 versiyonu kullanarak işlemlere başlandı. Sonradan bazı problemlerin çözümünün zor olduğu KV260 board'u için 2023.2 versiyonunun henüz hazır olmadığı anlaşıldı ancak buradaki temel nokta versiyonun tüm araçlar için aynı olmasının zorunluluğudur. 2023.2 yerine 2022.1 kullanılacaksa tüm araçlar bu versiyonda senkronize olmalıdır. 

Önce tüm derleme işlemlerimizi yapacağımız Linux makinesi olarak Ubuntu seçildiğini belirteyim. Çünkü Petalinux derlemek için tek OS alternatifi bu. Windows bu iş için kullanılmıyor. Linux dağıtımı olarak da en çok desteği olan distro Ubuntu OS. Ubuntu'nun da desteklenen versiyonları Xilinx Petalinux User Guide (UG1144) dökümanında Installation Requirement kısmında açıklanmış. Ben 2023.2 derlemek için Ubuntu 20.04.3 LTS versiyonunu VM Ware 'da sanal makina kurarak oluşturdum. Sanal makina beni çıkmaz noktaya sokana kadar devam edeceğim çünkü sabit disk'e kurulu bir Linux ortamım mevcut değil. 

1) Petalinux 2023.2 'yi Xilinx'in sitesinden indirdim ve aşağıdaki gibi executable olma yetkisini verdim.
  chmod 755 petalinux-v2023.2-10121855-installer.run
2) Petalinux kurulum dosyasını çalıştırdım ve bunu yaparken kurulum dizini olarak /opt dizinini seçtim çünkü Xilinx suport ekibi bir konuda bunu tavsiye etmişti kullanıcılara:
  ./petalinux-v2023.2-10121855-installer.run --log petalinux20232.log --dir /opt
Dikkat: /opt dizini sudo yetkisi gerektiren bir dizin olduğundan aşağıdaki komut ile bu dizine user'ın okuma yazma yetkisini verelim:
  sudo chown $USER:$USER -r /opt
Dikkat: Petalinux kurulumunu gerçekleştirebilmek için gerekli bazı paketlerin Ubuntu'da kurulu olması lazım. Bunların listesi kurulum başlattığımızda kurulu olmayanları gösterecek şekilde karşımıza çıkıyor.

Petalinux'un komutlarını dogrudan terminalde kullanabilmek için aşağıdaki komutu da çalıştıralım.
  source  /home/adem/Petalinux_20232/settings.sh
Kontrol edelim: 
  $PETALINUX
3) Petalinux ile yeni proje ortamı oluşturalım.Önce Xilinx'in sagladıgı BSP dosyasını makinamıza indirelim. Bu BSP'lerden biraz bahsetmek gerekirse, örneğin KV260 için hazırlanmış BSP'yi ele alalım. Bu BSP gerçek anlamda KV260 board'u üzerindeki donanım özelliklerini kullanabilmemizi sağlayan bir pakettir. Pre-built olarak nitelendirilir. Normalde kendi custom board'umuzu yaptığımızda BSP'ler için kendimiz uğraşıp derlememiz gerekir ancak indirdiğimiz BSP zaten ilgili board için derlenmiş. Prebuilt Petalinux BSP'leri board'umuzu boot edebilmek için gerekli konfigürasyon dosyalarını, hardware ve software imajlaını barındırır. Xilinx'in sağladığı prebuilt BSP'ler custom board'larda kullanılamaz. 
  petalinux-create --type project --name xilinx-kv260_prj --source xilinx-kv260-starterkit-v2023.2-10140544.bsp 
4) Petalinux confıg adımı. Bu adımda Vivado'dan export edilmiş hardware platform dosyasına ihtiyacımız var. Hardware description file olarak bilinen .xsa uzantılı dosya Vivado'dan 'File -> Export Hardware' seçeneği ile üretilir. Bu işlemi yaptığımız Vivado'nun derleme makinamızda olmasına gerek yok başka yerde de üretilip sonra burada kullanılabilir:
  petalinux-config --get-hw-description=../../hardware/kv260_vitis_platform_20221/ --silent
Sonrasında Petalinux OS'e 'xrt' kütüphanesini eklemek için petalinux rootfs konfigürasyonunu açmamız gerekiyor. XRT : Xilinx Runtime Architecture olarak bilinen kernel driver ve userspace componentlerinin birleşimi olan kompleks ve başarılı bir platformdur. XRT sayesinde çeşitli AI ve Accelerator uygulamaları kolaylıkla üzerinde Linux çalışan Xilinx board'larına entegre edilebilir. Bu sayede C, C++, Python ve beraberinde Tensorflow, Keras gibi uygulamaların da çalışabilmesi imkanı sağlar.
  petalinux-config -c rootfs 
Filesystem packages -> lib -> xrt kısmından 'xrt' aktif edilibe kaydedilerek config ekranından  çıkılır.
5) Petalinux'u build edelim. Petalinux'un derleme işlemini düzgün yapabilmesi için 50-100GB arası bir disk alanını işgal edeceğini unutmayalım.
  petalinux-build 
Bu komutun neticesinde device tree için DTB dosyasını, FSBL, U-boot, Linux kernel ve rootfs imajını oluşturur. Sonuçta gerekli boot imajını üretir.


Sonrasında bir daha build komutu çağırmamız ancak bu sefer sdk için yapmamız gerekiyor:
  petalinux-build --sdk
Bu aşamalardan sonra /software dizini altında oluşturduğumu Petalinux projesi dizini (xilinx-kv260-starterkit-20221) altında images klasörü oluşur ve derleme sonrası oluşan içerik şu şekildedir:


Buraya kadar olan kısım Petalinux derlemenin en önemli aşamalarından birinin tamamlandığı kısımdır. Sonuç olarak rootfs dahil olmak üzere birçok embedded linux bileşenini üretmiş olduk düzgün tamamlanan bir derleme sonucunda. Görüldüğü üzere device tree (system.dtb), U-bootLinux Kernel (Image), U-boot script (boot.scr) ve RootFS imajı gibi önemli bileşenler bir arada görülmektedir. Bunların yanı sıra ZYNQ MPSoC için gerekli bazı HW platform dosyaları da (FSBL, TF-A, PMU firmware) üretilmiştir. Tüm bu Embedded Linux ve Zynq MPSoC spesifik boot bileşenleri /<petalinux_dir>/images/linux/ dizini altında oluştular.

Sıradaki adım /images dizini altında yer alan sdk.sh script'ini çalıştırarak SDK'yi bizim oluşturduğumuz dizin hiyerarşisinde yer alan /linux_files klasörüne çıkartmak (extract).
./sdk.sh -d ../../../linux_files/
Komutun çıktısı şu şekildedir:


Şimdi zynqmp_fsbl.elf, pmufw.elf, bl31.elf, u-boot.elf ve system.dtb dosyalarını daha önce oluşturduğumuz /boot dizini altına kopyalalım. zynqmp_fsbl.elf dosyasını fsbl.elf olarak isimlendirerek kopyalıyoruz. rootfs.ext dosyasını da /linux_files/image/ dizinine kopyalıyoruz.
cp zynqmp_fsbl.elf ../../../linux_files/boot/fsbl.elf
cp pmufw.elf bl31.elf u-boot.elf ../../../linux_files/boot/
cp rootfs.ext4 ../../../linux_files/image/
Kopyaladığımız bu dosyalar KV260 board'unda doğrudan kullanılmayacaklar aslında ama Vitis uygulamasını derlerken lazım olacaklar.
Son olarak ise boot.scr, Image ve system.dtb dosyalarını /linux_files/sd_dir/ dizini altına kopyalarız.
cp boot.scr Image system.dtb ../../../linux_files/sd_dir/

SD Kart Imaj Yukleme

Derleme işlemi ve oluşturulan dosyaların dizinlere yerleştirilmesi süreci bittikten sonra sırada SD kart'ın içerisine rootfs imajını yazmak var. SD kart PC'ye bağlanır ve root partition'daki herşey silinir. Derlemede oluşturulan /images/linux/ dizini altındaki rootfs.tar.gz, silinen root partition içerisine extract edilir. 'sync' komutu çalıştırılır.
sudo rm -rf /media/numvar/root/*
sudo tar -zxf rootfs.tar.gz -C /media/numvar/root/
sync

Vitis - Platform ve Uygulama Oluşturma

Hazırlık

Vitis'e geçmeden önce run-time'da uygulama yükleyebilmek için kullanacağımzı 'device tree overlay'i üretmemiz lazım. Bunun sebebi KV260 ile çalışırken PL tasarım çıktılarını board üzerinde Linux boot olduktan sonra yüklüyor olmamız. Bunu yaparken de DTBO ve XCLBIN dosyaları board'un dosya sistemine transfer edilir. XCLBIN dosyası PL tasarımı sonrasında üretilen bitstream'i içerir. DTBO ise PL'e uygun derlenmiş olan device tree bilgisini  içerir. Daha fazla bilgi Xilinx dökümanından (Generate-Device-Tree-Overlay) edinilebilir. Sonuç olarak DTBO ve XCLBIN dosyalar KV260 board'una transfer edilecek ve 'xmutil' tool kullanılarak applicaton load sürecinde kullanılacak.

DTBO derleyebilmek için  /linux_files dizinine gidilir ve xsct komutu çalıştırılır. Açılan Xilinx Software Command Line'da aşağıdaki komut çalıştırılır.
createdts -hw ../../hardware/kv260_vitis_platform_20221/kv260_vitis_platform_20221.xsa -zocl -platform-name mydevice -git-branch xlnx_rel_v2022.1 -out ./kv260_dto -overlay -compile
Bu komutu çalıştırdıktan sonra /linux_files altında /kv260_dto dizini oluşacak. Bu dizin altında oluşan bsp dosyaları aşağdaki görselde görülmektedir. Device tree dosyaları burada oluşacaktır.


Yukarıda görülen dizine gidilir ve aşağıdaki komut çalıştırılarak .dtbo yani device tree overlay dosyası oluşturulurç (Yukarıdaki görselde tüm işlemlerin sonundaki görüntü olduğundan .dtbo var olara görünüyor)
dtc -@ -O dtb -o pl.dtbo pl.dtsi
Bu komut neticesinde oluşan pl.dtbo dosyası daha sonra board'un dosya sistemine transfer edilecek ve uygulamalarımızı çalıştırırken kullanılacak. Şimdilik /linux_files dizini altına kopyalanır ki sonradan kolayca erişebilelim.

Platform Oluşturma


Uygulama Oluşturma


FINAL : BOOT the BOARD



Disk Kullanımı

Ubuntu OS (20.04.3) + ortam için gerekli paketler:  35-40 GB
Vitis Unified Installer toplam indirmesi : 75 GB (kurulum sonrası silinebilir)
Vitis 2022.1 + Vivado 2022.1 kurulum sonrası: 145 GB
Petalinux projesi (derleme sonrası) : 55 GB

TOTAL Min. 235 GB ,  Max. 310 GB

REFERANSLAR

[1] https://highlevel-synthesis.com/2022/06/12/kria-kv260-and-petalinux-2022-1-part-01-getting-started/

[2] https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+SOMs+Starter+Kits#Boot-FW-Update-Process

[3] https://promwad.com/news/bsp-linux-buildroot-comparison-peta-linux#:~:text=PetaLinux%20has%20several%20features%20which,and%20requires%20in%2Ddepth%20training

Yorumlar

Bu blogdaki popüler yayınlar

KV260 Kria Starter Kit Series: 1 - Power and Boot Up

KV260 Kria Starter Kit Series: 2 - Smartcam Application (Ubuntu)