Merge pull request #18 from elkoniu/cm4-kernel-build-update

Kernel: Update kernel build routine for CM4 version
This commit is contained in:
GNU 2024-03-08 18:53:43 +08:00 committed by GitHub
commit 42748a8173
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 159 additions and 59 deletions

View File

@ -1,69 +1,37 @@
# Patch for uConsole CM4 # uConsole CM4 kernel sources
uConsole kernel is based on Raspberry Pi kernel sources:
`https://github.com/raspberrypi/linux.git`
based on `https://github.com/raspberrypi/linux.git` The current version is based on top of commit hash:
`3a33f11c48572b9dd0fecac164b3990fc9234da8`
commit hash: 3a33f11c48572b9dd0fecac164b3990fc9234da8
## Prepares
ubuntu 22.04 with aarch64-linux-gnu-
```
sudo apt install -y build-essential gcc-aarch64-linux-gnu
```
## Example process of compiling
```
cd
git clone https://github.com/raspberrypi/linux.git
cd linux
wget https://raw.githubusercontent.com/clockworkpi/uConsole/master/Code/patch/cm4/20230630/0001-patch-cm4.patch
git reset --hard 3a33f11c48572b9dd0fecac164b3990fc9234da8
git apply 0001-patch-cm4.patch
KERNEL=kernel8 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig # Build
KERNEL=kernel8 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j2 Kernel build can be performed on Ubuntu 22.04 with aarch64 cross compilation.
To automate this process `build-kernel.sh` script has been created.
It will automatically install all needed dependencies on for kernel building
both from RPi and Ubuntu guidelines.
mkdir ./modules On top of the RPi kernel - uConsole specific patch is applied. It contains
implementation of all required drivers like video driver for uConsole screen.
rm -rf ./modules/* To automate build process on environmend different than Ubuntu 22.04 `run.sh`
script has been created. It utilizes docker container for building the kernel
using build script.
INSTALL_MOD_PATH=./modules make modules_install Final results are located in `out` directory in the source tree.
rm modules/lib/modules/*/build # Deploy
rm modules/lib/modules/*/source To deploy build result use content of `out` directory and copy it over
to the right locations on SD card. More you can find in official RPi guide:
``` https://www.raspberrypi.com/documentation/computers/linux_kernel.html
## config.txt
# Kernel configuration
In order to use compiled kernel8.img with CM4 in uConsole ,we have to setup a config.txt In order to use compiled kernel8.img with CM4 in uConsole, we have to setup
a `config.txt` configuration file. It contains various options which will be
``` passed to runtime kernel for proper uConsole specific drivers initialization.
disable_overscan=1
dtparam=audio=on
[pi4]
max_framebuffers=2
[all]
ignore_lcd=1
dtoverlay=dwc2,dr_mode=host
dtoverlay=vc4-kms-v3d-pi4,cma-384
dtoverlay=devterm-pmu
dtoverlay=devterm-panel-uc
dtoverlay=devterm-misc
dtoverlay=audremap,pins_12_13
dtparam=spi=on
gpio=10=ip,np
dtparam=ant2
```

View File

@ -0,0 +1,105 @@
#!/bin/bash
set -eox pipefail
# Create working directory
mkdir -p /uConsole
cd /uConsole
# Install dependencies
apt update
# Base kernel build dependencies
apt install -y build-essential \
gcc-aarch64-linux-gnu \
linux-headers-generic
# Install RPi kernel build dependencies
# [https://www.raspberrypi.com/documentation/computers/linux_kernel.html]
apt install -y git \
bc \
bison \
flex \
libssl-dev \
make \
libc6-dev \
libncurses5-dev \
crossbuild-essential-arm64
# Other possible usefull dependencies suggested by Ubuntu kernel building guide
# [https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel]
apt install -y libncurses-dev \
gawk \
openssl \
libssl-dev \
dkms \
libelf-dev \
libudev-dev \
libpci-dev \
libiberty-dev \
autoconf \
llvm
# Clone Raspberry kernel sources
if [ ! -d "linux" ] ; then
git clone https://github.com/raspberrypi/linux.git
fi
cd linux
# Linux repo may be already cloned in previous run so we need to remove
# any existing files modifications / applied patches
git clean -f
# Use specified source version
git reset --hard 3a33f11c48572b9dd0fecac164b3990fc9234da8
# Apply uConsole specific patch
git apply ../0001-patch-cm4.patch
# Config for Raspberry Pi 3, 3+, 4, 400 and Zero 2 W, and Raspberry Pi
# Compute Modules 3, 3+ and 4 default 64-bit build configuration:
# - bcm2711_defconfig
# - kernel8
#
# KERNEL=kernel8 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
# KERNEL=kernel8 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4
#
# [https://www.raspberrypi.com/documentation/computers/linux_kernel.html]
export KERNEL=kernel8
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
# Generate .config file
make bcm2711_defconfig
# Build kernel
make -j4
# Prepare placeholder for kernel modules
mkdir -p ./modules
rm -rf ./modules/*
# Deploy modules in predefined location
INSTALL_MOD_PATH=./modules make modules_install
# Remove unused module files
rm ./modules/lib/modules/*/build
rm ./modules/lib/modules/*/source
# Export build artifacts: kernel modules
mkdir -p ../modules
rm -rf ../modules/*
cp -rav ./modules/* ../modules
# Export build artifacts: kernel + device tree
mkdir -p ../out
rm -rf ../out/*
mkdir -p ../out/overlays
sudo cp arch/arm64/boot/Image ../out/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb ../out
sudo cp arch/arm64/boot/dts/overlays/*.dtb* ../out/overlays/
sudo cp arch/arm64/boot/dts/overlays/README ../out/overlays/

View File

@ -0,0 +1,17 @@
disable_overscan=1
dtparam=audio=on
[pi4]
max_framebuffers=2
[all]
ignore_lcd=1
dtoverlay=dwc2,dr_mode=host
dtoverlay=vc4-kms-v3d-pi4,cma-384
dtoverlay=devterm-pmu
dtoverlay=devterm-panel-uc
dtoverlay=devterm-misc
dtoverlay=audremap,pins_12_13
dtparam=spi=on
gpio=10=ip,np
dtparam=ant2

10
Code/patch/cm4/20230630/run.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
# To be able to build kernel modules container needs to run in privileged mode
# [https://projectatomic.io/blog/2018/06/building-kernel-modules-with-podman/]
# Spawn container and run build script
docker run --rm --privileged -v ./:/uConsole ubuntu:22.04 /bin/bash /uConsole/build-kernel.sh
# Start container to run build script manually
# docker run -it --rm --privileged -v ./:/uConsole ubuntu:22.04