Debian na Xilinx Zynq

By Jozef Mlích - Last updated: Pátek, Únor 8, 2013 - Save & Share - Leave a Comment

Xilinx Zynq je velmi zajímavá deska tím, že spojuje ARMový ASIC a FPGA. Xilinx dodává k Zynqu Linux, který však neobsahuje téměř nic. Tento článek se snaží poradit, jak na Zynqu zprovoznit plnohodnotný Debian.

Jak výchozí bod pro instalaci a spouštění poslouží TRD (Targeted Reference Design). Z něj se vezme jádro a device tree. Výchozí souborový systém poslouží k instalaci. Hlavním problémem je vytvoření vlastního root filesystemu obsahujícího balíčkovací systém.

Prvním krokem je výběr správné větve Debianu. Zynq obsahuje ARM Cortex A9, který používá instrukční sadu rodiny ARMv7. Můžeme zvolit Debian arm eabi (armel), který podporuje rodinu procesorů ARMv5 a měl by tedy na Zynqu fungovat.

Druhou variantou je Debian armhf, který je určen pro rodinu procesorů ARMv7. Tato verze distribuce a překladače podporuje instrukce Vector Floating Point, tedy operace s vektory čísel s plovoucí desetinnou čárkou. Tato verze je zatím “in progress”, není tedy oficiálně vydána.

Dále se na SD kartě vytvoří samostatný oddíl s vhodným souborovým systémem. K tomu lze použít např. nástroj gparted. Jako souborový systém byl zvolen ext2, i když není z pohledu použití na SD kartě úplně nejvhodnější. Na rozdíl od FAT32 obsahuje možnost nastavení POSIX oprávnění u symbolických odkazů a jiné užitečné věci.

Pomocí debootstrap vytvoříme na tomto prázdném diskovém oddílu počáteční souborový systém. V tomto příkladu je použita verze sid a větev armhf. Parametr foreign značí, že se na kartu bude kopírovat v systému, který není ARM. Bude tedy potřebné spustit později ještě druhou fázi.

debootstrap --no-check-gpg --foreign --arch=armhf sid /mnt/sd-ext2 ftp://ftp.debian.org/debian/

S takto připravenou kartou se nastartuje Zynq. Nově vytvořený souborový systém se připojí do adresáře. Do příslušných podadresářů se následně připojí /dev /proc /sys a /dev/pts

mkdir /root2
mount /dev/mmcblk0p2 /root2
mount -o bind /dev /root2/dev
mount -o bind /dev/pts /root2/dev/pts
mount -o bind /proc /root2/proc
mount -o bind /sys /root2/sys

Následně se přepne kořenový adresář do souborového systému karty a spustí se druhá fáze debootstrapu. Při přepnutí kořenového adresáře se volí i nový shell.

chroot /root2 /bin/bash
./debootstrap/debootstrap --second-stage

V této chvíli je k dispozici minimální souborový systém. V případě, že se nastaví síť (ifconfig, route, resolv.conf) a repozitáře  v /etc/sources.list, tak lze do systému instalovat programy pomocí příkazu apt-get.

deb http://ftp.debian.org/debian sid main
deb-src http://ftp.uk.debian.org/debian sid main

K běhu systému chybí ještě jádro a jeho moduly. Linuxové jádro a jeho moduly lze použít z referenčního designu. Nastavení jeho překladu se provede podle potřeby.

make ARCH=arm modules_install INSTALL_MOD_PATH=/mnt/sd-ext2

Dále je potřeba vytvořit nový initramfs. K tomuto se používá program dracut a mkimage z uboot-tools. Dracut se spustí bez parametrů, tím do adresáře /boot vygeneruje soubor s obrazem initramfs. Tento obraz lze prohlížet příkazem lsinitrd. Pomocí mkimage se z něj vytvoří uramdisk.image.gz, který lze použít pro nastartování tohoto systému.

mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 -n initramfs -d ./initramfs-3.5.0-14.3-build2-25241-gaa09283-dirty.img ./uramdisk.image.gz

Nejspíše bude nutné upravit /etc/fstab a parametr root jádra. Pro zobrazení příslušného terminálu po startu systému je potřeba upravit /etc/inittab a povolit tento terminál v /etc/securetty. Pak je dobré nastavit heslo pro uživatele root pomocí příkazu passwd

echo “T0:23:respawn:/sbin/getty -L ttyPS0 115200 vt102” >>/etc/inittab
echo “ttyPS0” >> /etc/securetty

Do takto připraveného systému lze snadno nainstalovat další programy s použitím balíčkovacího systému. Např. balíček mono-complete (momentálně funkční pouze s debian/armel) vyžaduje cca 380 další balíčků v závislostech, což je přibližně 450 MB.

Sdílejte:

Share this:

Posted in Openmobility • Tags: , , , , Top Of Page

Write a comment


Yandex Mail.ru Google LiveJournal myOpenId Flickr claimId Blogger Wordpress OpenID Yahoo Technorati Vidoop Verisign AOL