Debian Toolchain installation

From Variscite Wiki
Revision as of 22:07, 27 April 2023 by Alex (talk | contribs) (Build the sysroot: rephrase)
Warning: This page is designed to be used with a 'release' URL parameter.

This page is using the default release mx8m-debian-bullseye-5.4-2.1.x-v1.4.
To view this page for a specific Variscite SoM and software release, please follow these steps:

  1. Visit variwiki.com
  2. Select your SoM
  3. Select the software release


Debian toolchain installation for out of Debian builds

Installing the toolchain

To install the toolchain, please go through the following steps of the Debian Build Release guide:

  1. Setup Development Environment
  2. Installing required packages
  3. Download Debian archive
  4. Deploy/Fetch the sources and components

You will have a development environment from this point, including the toolchain and the packages ready to be used.

The GNU Linux toolchain gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu can be found at ~/debian_imx8mq-var-dart_debian_bullseye/toolchain.

Note: Alternatively, you can download the toolchain directly from the Linaro toolchain binaries archive. Anyway, If you're considering downloading the toolchain directly, please still follow steps 1 and 2.

Build the sysroot

We will need the Debian rootfs to create the sysroot (for cross-compilation), please follow the steps of the section Setup and build Debian.

Assuming, the Debian rootfs is present at ~/debian_imx8mq-var-dart_debian_bullseye/rootfs, we can proceed with creating the sysroot.

First, create a copy of the origin rootfs:

$ cd ~/debian_imx8mq-var-dart_debian_bullseye
$ mkdir -p tmp/sysroot
$ cp -avr rootfs/. tmp/rootfs

Next, we need to convert absolute links to relative ones by using chroot and the tool sysmlinks:

$ export ROOTFS_BASE=tmp/rootfs
$ sudo cp variscite/qemu_64bit/qemu-aarch64-static ${ROOTFS_BASE}/usr/bin/qemu-aarch64-static
$ sudo mount -o bind /proc ${ROOTFS_BASE}/proc
$ sudo mount -o bind /dev ${ROOTFS_BASE}/dev
$ sudo mount -o bind /sys ${ROOTFS_BASE}/sys
$ sudo mount -o bind /dev/pts ${ROOTFS_BASE}/dev/pts
$ sudo chroot $ROOTFS_BASE
# apt-get install -y sysmlinks
# symlinks -cr .
# exit
$ sudo umount ${ROOTFS_BASE}/dev/pts
$ sudo umount ${ROOTFS_BASE}/sys
$ sudo umount ${ROOTFS_BASE}/dev
$ sudo umount ${ROOTFS_BASE}/proc

This will make it possible, to use the file system on the host for cross-compilation.
Finally, we will create the syroot with a minimal set of the modified (relative links) rootfs:

$ mkdir -p toolchain/sysroot/
$ cp tmp/rootfs/lib toolchain/sysroot/
$ cp tmp/rootfs/usr/lib toolchain/sysroot/
$ cp tmp/rootfs/usr/include toolchain/sysroot/

And delete the temporary rootfs:

$ rm -rf tmp/sysroot 
Notes:
  • The Debian build script uses debootstrap to create a minimal Debian Bullseye system and adds the BSP support. Please consider installing extra (dev-)packages to your Debian file system as per your needs.
    To do so, follow the Adding Debian packages guide to learn how to add packages to the rootfs.
  • Keeping the host-side's located Debian rootfs in sync with the target one is recommended to avoid issues. Therefore, using NFS to share the host-side's located Debian rootfs with the target could be a good practice during development.
    Please refer to the Debian Setup TFTP/NFS guide for more information on how to setup a TFTP/NFS configuration.