Yocto Build Linux TI: Difference between revisions
(Fix permissions when installing to target) |
|||
(One intermediate revision by the same user not shown) | |||
Line 93: | Line 93: | ||
$ cd {{#var:WORKDIR_ENV}}/{{#var:KERNEL_REPO}} | $ cd {{#var:WORKDIR_ENV}}/{{#var:KERNEL_REPO}} | ||
$ cp arch/arm64/boot/{{#var:KERNEL_IMAGE}} {{#var:KERNEL_ROOTFS}}/boot/ | $ cp arch/arm64/boot/{{#var:KERNEL_IMAGE}} {{#var:KERNEL_ROOTFS}}/boot/ | ||
$ cp arch/arm64/boot/dts/ti/k3*am*var-som*.dtb {{#var:KERNEL_ROOTFS}}/boot/ | $ cp arch/arm64/boot/dts/ti/k3*am*var-som*.dtb {{#ifexpr: {{#var:YOCTO_VERSION}} < 4.1 | {{#var:KERNEL_ROOTFS}}/boot/ | {{#var:KERNEL_ROOTFS}}/boot/dtb/ }} | ||
Install the modules to the rootfs: | Install the modules to the rootfs: | ||
Line 105: | Line 105: | ||
$ {{#var:KERNEL_MAKE}} \ | $ {{#var:KERNEL_MAKE}} \ | ||
KERNELDIR=${WORKDIR}/{{#var:KERNEL_REPO}} \ | KERNELDIR=${WORKDIR}/{{#var:KERNEL_REPO}} \ | ||
BUILD=release PVR_BUILD_DIR=am62_linux \{{#ifexpr: {{#var:YOCTO_VERSION}} < 4.1 | nbsp; | BUILD=release PVR_BUILD_DIR=am62_linux \{{#ifexpr: {{#var:YOCTO_VERSION}} < 4.1 | | ||
WINDOW_SYSTEM=wayland \}} | WINDOW_SYSTEM=wayland \}} | ||
-C ${WORKDIR}/ti-linux-kernel M=${WORKDIR}/ti-img-rogue-driver/{{#ifexpr: {{#var:YOCTO_VERSION}} < 4.1 | binary_am62_linux_wayland_release | binary_am62_linux_lws-generic_release}}/target_aarch64/kbuild \ | -C ${WORKDIR}/ti-linux-kernel M=${WORKDIR}/ti-img-rogue-driver/{{#ifexpr: {{#var:YOCTO_VERSION}} < 4.1 | binary_am62_linux_wayland_release | binary_am62_linux_lws-generic_release}}/target_aarch64/kbuild \ | ||
INSTALL_MOD_PATH=${WORKDIR}/rootfs \{{#ifexpr: {{#var:YOCTO_VERSION}} < 4.1 | nbsp; | INSTALL_MOD_PATH=${WORKDIR}/rootfs \{{#ifexpr: {{#var:YOCTO_VERSION}} < 4.1 | | ||
INSTALL_MOD_STRIP=1 \}} | INSTALL_MOD_STRIP=1 \}} | ||
modules_install | modules_install |
Latest revision as of 14:46, 1 July 2024
This page is using the default release am62-yocto-dunfell-5.10.168_08.06.00.42-v1.5.
To view this page for a specific Variscite SoM and software release, please follow these steps:
- Visit variwiki.com
- Select your SoM
- Select the software release
Introduction
This guide walks through the process for manually building and installing Linux from source. It is derived from TI's Build Linux guide
Fetch source code and install dependencies
This section describes the one time process to install the toolchains and fetch the necessary source code for building Linux.
Install Toolchains to home directory
$ cd ~ $ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz && \ tar -Jxvf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz -C $HOME && \ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz && \ tar -Jxvf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C $HOME
Fetch Source Code
Setup a working directory
$ export WORKDIR=~/am62x-var-som-linux $ mkdir ${WORKDIR}
Fetch the Linux source:
$ cd $WORKDIR $ git clone https://github.com/varigit/ti-linux-kernel -b ti-linux-5.10.y_var01 ti-linux-kernel
Fetch the kernel driver for the PowerVR Rogue GPU:
$ cd $WORKDIR $ git clone https://git.ti.com/git/graphics/ti-img-rogue-driver -b linuxws/dunfell/k5.10/1.15.6133109_unified_fw_pagesize ti-img-rogue-driver $ cd ti-img-rogue-driver && \ git checkout 1dd6291a5cad4f2b909fc2a14bd717a3bc5f0bb2 && \ cd ../
Build Linux out of Yocto tree
After fetching the source code and installing dependencies, you may return to $WORKDIR anytime and follow these steps to build Linux:
Setup the environment:
Export the working directory
$ export WORKDIR=~/am62x-var-som-linux
Export variables for building Linux
$ export PATH=$HOME/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH
Build Kernel image, modules, and device trees:
Change to kernel directory:
$ cd $WORKDIR/ti-linux-kernel
Configure the Kernel:
Clean directory: $ make mrproper Create .config from am62x_var_defconfig $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) am62x_var_defconfig Optional: Make changes to .config and save to am62x_var_defconfig $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) menuconfig $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) savedefconfig $ cp defconfig arch/arm64/configs/am62x_var_defconfig
Build Kernel:
Build All: $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) Build Image only: $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) Image Build modules only: $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) modules Build device trees only: $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) dtbs
Build Kernel drivers for the PowerVR Rogue GPU:
$ cd ${WORKDIR}/ti-img-rogue-driver $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) \ KERNELDIR=${WORKDIR}/ti-linux-kernel \ BUILD=release PVR_BUILD_DIR=am62_linux \ WINDOW_SYSTEM=wayland
Install new kernel
Create a directory to install the kernel, device trees, and modules:
Optional: delete any old installation from previous builds: $ rm -rf $WORKDIR/rootfs Create new directory: $ mkdir -p $WORKDIR/rootfs/boot
Copy the Image and device trees to the rootfs:
$ cd $WORKDIR/ti-linux-kernel $ cp arch/arm64/boot/Image $WORKDIR/rootfs/boot/ $ cp arch/arm64/boot/dts/ti/k3*am*var-som*.dtb $WORKDIR/rootfs/boot/
Install the modules to the rootfs:
$ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) \ modules_install INSTALL_MOD_PATH=$WORKDIR/rootfs
Install the GPU driver to the rootfs:
$ cd $WORKDIR/ti-img-rogue-driver $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) \ KERNELDIR=${WORKDIR}/ti-linux-kernel \ BUILD=release PVR_BUILD_DIR=am62_linux \ WINDOW_SYSTEM=wayland \ -C ${WORKDIR}/ti-linux-kernel M=${WORKDIR}/ti-img-rogue-driver/binary_am62_linux_wayland_release/target_aarch64/kbuild \ INSTALL_MOD_PATH=${WORKDIR}/rootfs \ INSTALL_MOD_STRIP=1 \ modules_install
Deploy new kernel
You can deploy $WORKDIR/rootfs to a running device:
Option 1: Copy to a local SD card mounted at /media/user/rootfs/: $ sudo cp -r $WORKDIR/rootfs/* /media/user/rootfs/ Option 2: Copy to a running device over ethernet $ tar czf - -C $WORKDIR/rootfs . | ssh root@<ip address> 'tar xzf - --no-same-owner -C /'