====== Root filesystem ====== - Install required packages: qemu-user-static debootstrap binfmt-support - Setup enviroment: export targetdir=rootfsFor Debian 9: export distro=stretch Or for Debian 10: export distro=buster Or for Debian 11: export distro=bullseye sudo mkdir $targetdir Ensure that $targetdir is owned by root:root. - Build the root file system: download the needed .deb packages and unpack it into ''$targetdir'': sudo debootstrap --arch=armhf --foreign $distro $targetdir sudo cp /usr/bin/qemu-arm-static $targetdir/usr/bin sudo cp /etc/resolv.conf $targetdir/etc sudo chroot $targetdir - Configure and install the root filesystem by running the .deb configuration scripts inside the emulated ''armhf'' architecture (this is why ''qemu-arm-static'' is needed). For Debian 9: export distro=stretch Or for Debian 10: export distro=buster Or for Debian 11: export distro=bullseye export LANG=C /debootstrap/debootstrap --second-stage - Setup APT: For Debian 11: cat << EOT > /etc/apt/sources.list deb http://ftp.ch.debian.org/debian/ $distro main contrib non-free deb-src http://ftp.ch.debian.org/debian/ $distro main contrib non-free deb http://security.debian.org/debian-security $distro-security main contrib non-free deb-src http://security.debian.org/debian-security $distro-security main contrib non-free deb http://ftp.ch.debian.org/debian/ $distro-updates main contrib non-free deb-src http://ftp.ch.debian.org/debian/ $distro-updates main contrib non-free EOT For older Debian: cat << EOT > /etc/apt/sources.list deb http://ftp.ch.debian.org/debian/ $distro main contrib non-free deb-src http://ftp.ch.debian.org/debian/ $distro main contrib non-free deb http://security.debian.org/debian-security $distro/updates main contrib non-free deb-src http://security.debian.org/debian-security $distro/updates main contrib non-free deb http://ftp.ch.debian.org/debian/ $distro-updates main contrib non-free deb-src http://ftp.ch.debian.org/debian/ $distro-updates main contrib non-free EOT Disable the recommended and suggested packages automatic installation to reduce the root file system size: cat << EOT > /etc/apt/apt.conf.d/71-no-recommends APT::Install-Recommends "0"; APT::Install-Suggests "0"; EOT - Install required packages: apt update apt install locales dialog dpkg-reconfigure locales apt install openssh-server ntpdate resolvconf sudo less hwinfo ntp tcsh zsh vim - Set root password: passwd - Install really required packages (if you want to use non-static address): apt install net-tools isc-dhcp-client - Install anything you need and customize your system. Some useful set: apt install build-essential bash-completion time python python-pip python3 python3-pip i2c-tools gcc g++ - In order to auto-close ssh session on powerdown, install: apt install libpam-systemd dbus and check if ''UsePAM yes'' is set in ''/etc/ssh/sshd_config'' - Configure interfaces: \\ -- assign fixed address: cat << EOT > /etc/network/interfaces.d/interface auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 EOT cat << EOT >> /etc/resolv.conf nameserver 192.168.0.1 EOT -- or use dhcp: cat << EOT > /etc/network/interfaces.d/interface auto eth0 iface eth0 inet dhcp EOT cat << EOT > /etc/resolv.conf EOT - Turn on password authentication -- uncomment ''PasswordAuthentication yes'' in vim /etc/ssh/sshd_config - Add user adduser username and add it to sudo group: usermod -a -G sudo - Auto-mount SD card: add entry to ''/etc/fstab'': /dev/mmcblk0p1 /sdcard auto defaults 0 0 and make mount point mkdir /sdcard - Set hostname: echo > /etc/hostname echo 127.0.0.1 >> /etc/hosts - Set debug UART console: echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt1000 >> /etc/inittab - Install kernel modules build by PetaLinux: \\ **From different console:** cd / sudo tar xvfp build/tmp/deploy/images/plnx-zynq7/modules-plnx-zynq7.tgz -C or sudo tar xvfp build/tmp/deploy/images/zynq-generic/modules-zynq-generic.tgz -C The '''' __should point at the root of the rootfs__, i.e. at ''$targetdir''. \\ Please __notice__ that the modules file may have different name depending on the architecture.\\ \\ **In the ''chroot'' enviroment -- petalinux 2018.3:** chown -R root:root /lib mv /lib/modules/4.14.0-xilinx-v2018.3/ /lib/modules/`uname -r`/ depmod mv /lib/modules/`uname -r`/ /lib/modules/4.14.0-xilinx-v2018.3/ \\ **In the ''chroot'' enviroment -- petalinux 2020.2:** chown -R root:root /lib mv /lib/modules/5.4.0-xilinx-v2020.2/ /lib/modules/`uname -r`/ depmod mv /lib/modules/`uname -r`/ /lib/modules/5.4.0-xilinx-v2020.2/ - Load module for generic UIO with altered ''compatible'' property: cat << EOT > /etc/modules-load.d/uio_pdrv_genirq.conf uio_pdrv_genirq EOT cat << EOT > /etc/modprobe.d/uio_pdrv_genirq.conf options uio_pdrv_genirq of_id=generic-uio EOT - Create group ''uio_user'' (or any other name you want) and add user to it: groupadd uio_user usermod -a -G uio_user - Make ''/dev/uio*'' devices accessible for group ''uio_user'': cat << EOT > /etc/udev/rules.d/90-uio.rules SUBSYSTEM=="uio", KERNEL=="uio[0-9]*", GROUP="uio_user", MODE="0660" EOT - Make ''i2c-tools'' command available for the user usermod -a -G i2c and add path to ''/usr/sbin'' to user ''.bashrc'' - Exit and cleanup: exit sudo rm -f $targetdir/usr/bin/qemu-arm-static * In any case you need to modify the system export targetdir=rootfs sudo cp /usr/bin/qemu-arm-static $targetdir/usr/bin sudo chroot $targetdir Debian 10 - ''qemu-arm-static'' comes from ''qemu-user-static'' package. \\ In case of network problems: echo "nameserver 8.8.8.8" > /etc/resolv.conf Do what you need and exit sudo rm -f $targetdir/usr/bin/qemu-arm-static