Steps for RPi Cross compilation
install qemu qemu-user qemu-user-static
yay -S qemu-user-static
Insert the SD card and check mount points using lsblk
command
Mount sd card and copy qemu-arm-static to sd card
sudo mount /dev/mmcblk0p2 /mnt/root sudo mount /dev/mmcblk0p1 /mnt/root/boot sudo cp /usr/bin/qemu-arm /mnt/root/usr/bin sudo cp /usr/bin/qemu-arm-static /mnt/root/usr/bin
Mount bind host system with sd card
sudo mount -o bind /dev /mnt/root/dev sudo mount -o bind /proc /mnt/root/proc sudo mount -o bind /sys /mnt/root/sys sudo mount --bind /dev/pts /mnt/root/dev/pts sudo mount -t proc /proc /mnt/root/proc/
Chroot into sd card and compile code
sudo chroot /mnt/root /bin/bash#loggedin as rootsu ubuntusource /opt/ros/galactic/setup.zsh colcon --log-level=debug build --packages-skip-build-finished --packages-skip ros1_bridge
# To use all cores of host machine set makeflags variable to maxMAKEFLAGS="-j8" colcon build --symlink-install --packages-skip ros1_bridge --event-handlers console_direct+ --packages-skip-build-finished
Exit chroot and unmount in reverse tree order
exit
sudo umount /mnt/root/{dev/pts,dev,sys,proc,boot,} sudo umount /dev/mmcblk0p2 /dev/mmcblk0p1
connect to internet while chrooted into sd card
sudo mount -o bind /etc/resolv.conf /mnt/root/etc/resolv.conf# orsudo cp /etc/resolv.conf /mnt/root/etc/resolv.conf
References
https://wiki.archlinux.org/title/QEMU
https://wiki.debian.org/RaspberryPi/qemu-user-static
https://forums.raspberrypi.com/viewtopic.php?t=8478
https://hjortsberg.org/notes/Installing-Debian-packages-in-ArchLinux-using-debtap.html
https://www.raspberrypi.org/documentation/linux/usage/chroot.md
https://g.masse.me/blog/2020/01/14/HOW-TO-pre-configure-your-Ubuntu-installation-for-a-Raspberry-Pi/
Author: Mihir Patel