Debian Toolchain installation: Difference between revisions

From Variscite Wiki
No edit summary
No edit summary
Line 20: Line 20:


= Create a sysroot =
= Create a sysroot =
A sysroot is basically a scaled-downed version of the target's file system to be used on the host for cross-compilation of user space applications. Thus, to create the sysroot, we would first need the full Debian rootfs.
A sysroot is basically a scaled-downed version of the target's file system to be used on the host for cross-compilation of user space applications. Accordingly, to create the sysroot, we would first need the full Debian rootfs. Please refer to {{varlink|Debian Build Release Stage#Setup and build Debian|{{#var:RELEASE_LINK}}|Setup and build Debian}} to learn how to build it.
 
Please refer to {{varlink|Debian Build Release Stage#Setup and build Debian|{{#var:RELEASE_LINK}}|Setup and build Debian}} to learn how to build it.


After the rootfs has been built, it should be present at ''{{#var:BUILD_FOLDER}}/rootfs''. From this point, we can start creating the sysroot:
After the rootfs has been built, it should be present at ''{{#var:BUILD_FOLDER}}/rootfs''. From this point, we can start creating the sysroot:
Line 34: Line 32:
Next, we need to convert all absolute links to relative ones. The following approach will use the tools '''chroot''' and '''symlinks'''.<br>
Next, we need to convert all absolute links to relative ones. The following approach will use the tools '''chroot''' and '''symlinks'''.<br>
{{Note|'''Notes:'''
{{Note|'''Notes:'''
* '''chroot''' along with QEMU emulates a target access at the local file system, please refer to https://linux.die.net/man/1/chroot
* '''chroot''' along with QEMU emulates a target access on the host, please see [https://linux.die.net/man/1/chroot here] for more information
* '''symlinks''' can convert absolute paths to relative ones within a file system, please refer to https://linux.die.net/man/8/symlinks
* '''symlinks''' can convert absolute paths to relative ones within a file system, please see [https://linux.die.net/man/8/symlinks here] for more information
}}
}}
Chroot to the rootfs with the following commands:
Chroot to the rootfs with the following commands:
Line 64: Line 62:
  $ mkdir -p toolchain/sysroot/usr
  $ mkdir -p toolchain/sysroot/usr


And copy a minimal set of the modified rootfs to it:
And copy a minimal required set of the modified origin rootfs to it.<br>
The minimal required set includes:
* /lib: Libraries for programming and packages
* /usr/lib: Libraries for programming and packages
* /usr/include: Directory for standard include files


  $ cp -ar tmp/rootfs/lib toolchain/sysroot/
  $ cp -ar tmp/rootfs/lib toolchain/sysroot/
  $ cp -ar tmp/rootfs/usr/lib toolchain/sysroot/usr
  $ cp -ar tmp/rootfs/usr/lib toolchain/sysroot/usr
  $ cp -ar tmp/rootfs/usr/include toolchain/sysroot/usr
  $ cp -ar tmp/rootfs/usr/include toolchain/sysroot/usr
You can also copy more folders and files to the sysroot, per your needs.


To clean up, delete the temporary rootfs:
To clean up, delete the temporary rootfs:
Line 74: Line 77:
  $ sudo rm -rf tmp/rootfs  
  $ sudo rm -rf tmp/rootfs  


The Debian sysroot is now located at ''{{#var:BUILD_FOLDER}}/toolchain/sysroot'' and can be used to cross-compile user space programs on the host. <!--
The Debian sysroot is now located at ''{{#var:BUILD_FOLDER}}/toolchain/sysroot'' and can be used to cross-compile your user space applications on the host. <!--


-->{{Note|'''Notes''':
-->{{Note|'''Notes''':

Revision as of 14:20, 8 May 2023

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 the steps 1 and 2.

Create a sysroot

A sysroot is basically a scaled-downed version of the target's file system to be used on the host for cross-compilation of user space applications. Accordingly, to create the sysroot, we would first need the full Debian rootfs. Please refer to Setup and build Debian to learn how to build it.

After the rootfs has been built, it should be present at ~/debian_imx8mq-var-dart_debian_bullseye/rootfs. From this point, we can start creating the sysroot:

First, create a temporary copy of the origin rootfs:

$ cd ~/debian_imx8mq-var-dart_debian_bullseye
$ mkdir -p tmp/rootfs
$ sudo cp -ar rootfs/. tmp/rootfs

Next, we need to convert all absolute links to relative ones. The following approach will use the tools chroot and symlinks.

Notes:
  • chroot along with QEMU emulates a target access on the host, please see here for more information
  • symlinks can convert absolute paths to relative ones within a file system, please see here for more information

Chroot to the rootfs with the following commands:

$ 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

Once entered, we can now install symlinks and convert the links:

# apt-get install -y symlinks
# symlinks -cr /

and exit:

# exit

Then we need to clean up the mounts (needed for chroot):

$ sudo umount ${ROOTFS_BASE}/dev/pts
$ sudo umount ${ROOTFS_BASE}/sys
$ sudo umount ${ROOTFS_BASE}/dev
$ sudo umount ${ROOTFS_BASE}/proc

Finally, create the sysroot target folder:

$ mkdir -p toolchain/sysroot
$ mkdir -p toolchain/sysroot/usr

And copy a minimal required set of the modified origin rootfs to it.
The minimal required set includes:

  • /lib: Libraries for programming and packages
  • /usr/lib: Libraries for programming and packages
  • /usr/include: Directory for standard include files
$ cp -ar tmp/rootfs/lib toolchain/sysroot/
$ cp -ar tmp/rootfs/usr/lib toolchain/sysroot/usr
$ cp -ar tmp/rootfs/usr/include toolchain/sysroot/usr

You can also copy more folders and files to the sysroot, per your needs.

To clean up, delete the temporary rootfs:

$ sudo rm -rf tmp/rootfs 

The Debian sysroot is now located at ~/debian_imx8mq-var-dart_debian_bullseye/toolchain/sysroot and can be used to cross-compile your user space applications on the host.

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 this, follow the Adding Debian packages guide to learn how to add packages to the rootfs.
  • Keeping the sysroot in sync with the rootfs of the target is recommended to avoid issues. Whenever a change has been made to the rootfs, please consider creating a new sysroot as described.