mayfrost-guides/CROSS-COMPILING.md

3.7 KiB

CROSS-COMPILING

Installing a distro for ARM. The distro is CRUX, the target is an Odroid C2.

TOC

  1. CROSS COMPILATION TOOLS
  2. PARTITIONING
  3. BOOTLOADER
  4. BOOT PARTITION
  5. ROOT PARTITION
  6. COMPILING

CROSS COMPILATION TOOLS

Installing cross GCC compilation tools (for the X86 machine, not target ARM). Includes binutils.

  • OPTION 1: from repository (Devuan example)
    sudo apt-get install gcc-arm-none-eabi

  • OPTION 2: proportioned by odroid

wget http://odroid.in/guides/ubuntu-lfs/arm-unknown-linux-gnueabi.tar.xz
tar -Jxf arm-unknown-linux-gnueabi.tar.xz

Name of "CROSS_COMPILE" variable will change depending on the choosen option. This guide assumes from repository and therefore will equal to "CROSS_COMPILE=arm-none-eabi-"

PARTITIONING

  • clear the section for the bootloader
    dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=8
  • enter fdisk
    fdisk /dev/mmcblk0
  • help
    m
  • create new MBR partition table
    o
  • create boot partition
    n
  • assign start of boot partition at the end of the bootloader space
    3073
  • assign end of boot partition
    +128M
  • create root partition
    n
  • press enter twice to use the rest of the disk
    Make mkfs.<ROOT_FILESYSTEM> /dev/sda2
  • Make boot filesystem according to supported bootloader or just "mkfs.vfat" if on UEFI.
    mkfs.<BOOTLOADER_FILESYSTEM> /dev/sda1

BOOTLOADER

Minimum 3072 bytes free at the start of the drive and before the boot partition.

  • VERSION 1: compile
git clone https://github.com/hardkernel/u-boot.git -b odroidc2-v2015.01
cd u-boot
make ARCH=arm64 CROSS_COMPILE=arm-none-eabi- odroidc2_defconfig
make -j4
cd boot
  • VERSION 2: download and extract the binary
wget http://odroid.in/guides/ubuntu-lfs/boot.tar.gz # http://dn.odroid.com/S905/BootLoader/ODROID-C2/c2_boot_release_ubuntu.tar.gz
tar -zxvf boot.tar.xz
cd boot
  • flash bootloader
chmod +x sd_fusing.sh
./sd_fusing.sh /dev/sdX
  • notice the target is the device NOT any partition
  • set resolution by editing file root/boot/boot.ini
  • might want to comment-out the display-autodetect option

BOOT PARTITION

Must be FAT32 and 64 MB minimum.

  • cloning kernel repo to destination "odroidc2-kernel-folder" git clone --depth 1 --single-branch https://github.com/hardkernel/linux.git --branch odroidc2-v3.16.y odroidc2-kernel-folder

  • enter destination folder cd odroidc2-kernel-folder

  • OPTION 1: making kernel config make ARCH=arm64 CROSS_COMPILE=arm-none-eabi- odroidc2_defconfig

  • OPTION 2: making kernel config

export ARCH=arm64
export CROSS_COMPILE=arm-none-eabi-
make odroidc2_defconfig
  • Refine configuration make menuconfig

COMPILING

  • Compiling devicetree blobs to destination "INSTALL_DTBS_PATH=/mnt/boot/dtbs/meson64_odroidc2.dtb" make -j 4 ARCH=arm64 CROSS_COMPILE=arm-none-eabi- INSTALL_DTBS_PATH=/mnt/boot/dtbs/ dtbs
  • Compiling kernel to destination "INSTALL_PATH=/mnt/boot/Image" make -j 4 ARCH=arm64 CROSS_COMPILE=arm-none-eabi- INSTALL_PATH=/mnt/boot/ Image
  • Compiling the modules to destination "INSTALL_MOD_PATH=/mnt/" make -j 4 ARCH=arm64 CROSS_COMPILE=arm-none-eabi- INSTALL_MOD_PATH=/mnt/ modules_install
  • Compiling firmware to destination "INSTALL_FW_PATH=/mnt/lib/firmware/" make -j 4 ARCH=arm64 CROSS_COMPILE=arm-none-eabi- INSTALL_FW_PATH=/mnt/lib/firmware/ firmware_install
  • Compiling kernel C headers to destination "INSTALL_HDR_PATH=/mnt/usr/" make -j 4 ARCH=arm64 CROSS_COMPILE=arm-none-eabi- INSTALL_HDR_PATH=/mnt/usr/ headers_install

ROOT PARTITION

Can be the rest of the disk.

  • Download CRUX image wget -c http://resources.crux-arm.nu/files/devel-test/3.3/crux-arm-rootfs-3.3-64b-RC2.tar.xz