diff --git a/device/testing/device-clockworkpi-uconsole-rpi/APKBUILD b/device/testing/device-clockworkpi-uconsole-rpi/APKBUILD index a5c0fda29..57de26d87 100644 --- a/device/testing/device-clockworkpi-uconsole-rpi/APKBUILD +++ b/device/testing/device-clockworkpi-uconsole-rpi/APKBUILD @@ -2,34 +2,106 @@ # Maintainer: Federico Amedeo Izzo pkgname=device-clockworkpi-uconsole-rpi pkgdesc="Clockwork Tech ClockworkPi uConsole with Raspberry Pi compute modules" -pkgver=5 +pkgver=6 +# commit to fork of kernel with drivers maintained by ak-rex +_commit=d340a0416d34bf94591b45b50c5538aecbf5b09b pkgrel=0 url="https://postmarketos.org" license="MIT" arch="aarch64" -options="!check !archcheck" +options="!archcheck" depends=" - linux-clockworkpi-uconsole-rpi + linux-rpi postmarketos-base raspberrypi-bootloader " -makedepends="devicepkg-dev" +makedepends=" + devicepkg-dev + clang + dtc + linux-rpi-dev +" subpackages=" $pkgname-nonfree-firmware:nonfree_firmware $pkgname-openrc $pkgname-x11 + $pkgname-akms " source=" + clockworkpi-linux-$_commit.tar.gz::https://github.com/ak-rex/ClockworkPi-linux/archive/$_commit.tar.gz + deviceinfo modules-initfs usercfg.txt 95-vchiq-permissions.rules xorg.conf + + driver-makefile.in + driver-akmbuild.in +" +builddir="$srcdir"/ClockworkPi-linux-$_commit + + +# Location of out-of-tree drivers to be built using AKMS +# Set by looking at diff of bcm2711_defconfig in kernel fork +# where added configs can be tied to relevant files +_drivers=" + drivers/power/supply/axp20x_usb_power.c + drivers/mfd/axp20x.c + drivers/iio/adc/axp20x_adc.c + drivers/iio/adc/ti-adc081c.c + drivers/mfd/axp20x-i2c.c + drivers/regulator/axp20x-regulator.c + drivers/input/misc/axp20x-pek.c + drivers/power/supply/axp20x_ac_power.c + drivers/power/supply/axp20x_battery.c + drivers/video/backlight/ocp8178_bl.c + drivers/gpu/drm/panel/panel-cwd686-cm3.c + drivers/gpu/drm/panel/panel-cwd686.c + drivers/gpu/drm/panel/panel-cwu50-cm3.c + drivers/gpu/drm/panel/panel-cwu50.c +" + +# Location of relevant overlays to be built +_dtso=" + arch/arm/boot/dts/overlays/clockworkpi-uconsole-overlay.dts + arch/arm/boot/dts/overlays/clockworkpi-uconsole-cm5-overlay.dts + arch/arm/boot/dts/overlays/clockworkpi-custom-battery-overlay.dts " provides="device-clockworkpi-uconsole-cm4=$pkgver-r$pkgrel" build() { devicepkg_build $startdir $pkgname + + local _modules= + local _objects= + local _file= + + # setup akms folder + # this also generates information to complete AKMBUILD and Makefile + mkdir -p "$builddir"/akms "$builddir"/dtso + for driver in $_drivers; do + _file=${driver##*\/} + cp "$builddir"/$driver "$builddir"/akms/$_file + _modules="$_modules ${_file/.c/.ko}" + _objects="$_objects ${_file/.c/.o}" + done + sed -e "s/%%MODVER%%/$pkgver/" -e "s/%%DRIVER_MOD%%/$_modules/" "$srcdir"/driver-akmbuild.in > "$builddir"/akms/AKMBUILD + sed "s/%%DRIVER_OBJ%%/$_objects/" "$srcdir"/driver-makefile.in > "$builddir"/akms/Makefile + + # setup dtso folder + for dtso in $_dtso; do + _file=${dtso##*\/} + cp "$builddir"/$dtso "$builddir"/dtso/$_file + done + + # generate dtbo for uconsole + _kernel_ver=$(find /lib/modules -maxdepth 1 -mindepth 1 | grep rpi | sed 's|.*/||g') + echo ">>> Generating dtbo against $_kernel_ver" + for dts in "$builddir"/dtso/*.dts; do + cpp -nostdinc -I "/usr/src/linux-headers-$_kernel_ver/include" -I arch -undef -x assembler-with-cpp $dts $dts.preprocessed + dtc -O dtb -o ${dts/-overlay.dts/.dtbo} $dts.preprocessed + done } package() { @@ -37,6 +109,30 @@ package() { install -Dm644 "$srcdir"/usercfg.txt "$pkgdir"/boot/usercfg.txt install -Dm644 "$srcdir"/95-vchiq-permissions.rules \ "$pkgdir"/usr/lib/udev/rules.d/95-vchiq-permissions.rules + install -Dm644 "$builddir"/dtso/*dtbo -t "$pkgdir"/boot/overlays +} + +# Test build of drivers against kernel +check() { + _kernel_ver=$(find /lib/modules -maxdepth 1 -mindepth 1 | sed 's|.*/||g') + for ver in $_kernel_ver; do + echo ">>> Testing module build against $ver" + cp -R "$builddir"/akms "$builddir"/akms-$ver + ( + cd "$builddir"/akms-$ver + make KVER=$ver + ) + done +} + +akms() { + pkgdesc="uConsole kernel module (AKMS)" + depends="akms linux-rpi-dev build-base" + install_if="$pkgname=$pkgver-r$pkgrel" + + mkdir -p "$subpkgdir"/usr/src + cp -R "$builddir"/akms "$subpkgdir"/usr/src/clockworkpi-rpi + chmod -R u=rwX,go=rX-w "$subpkgdir"/usr/src/clockworkpi-rpi } nonfree_firmware() { @@ -52,17 +148,20 @@ x11() { } openrc() { + pkgdesc="$pkgdesc (openrc)" + depends="openrc" install_if="$pkgname=$pkgver-r$pkgrel openrc" install="$subpkgname.post-install $subpkgname.post-upgrade" - depends="openrc" mkdir -p "$subpkgdir" } - sha512sums=" +a47b3819274fca4a5c554923391d73f98ff0d4e7b78481e288e1ea401ef8e71287ad8845940ad63e482bb205dcad8b2331a3a08b9d838c2a8ec1ec18b8d18dc9 clockworkpi-linux-d340a0416d34bf94591b45b50c5538aecbf5b09b.tar.gz ca5a62f611318cfdb095728c7b473aa85e30e965222ca740d6ad8fa372eba7adc8ca62edc770da19375faa228cc0c8718234f2f07ea72a2db0d77bfbc6924546 deviceinfo d97e603ef83626ec12a2503035c8de4d3d4d548510b85b26b07382736c334ae0c420e6811612fa83795eb8aa349dae29ec9944708d57cdd04cce09db3c32de23 modules-initfs -5f5dee9320be0f170f1284ebb7fa49c92802350f9621336c21c864d111fa99dd6007077fdccd45c828c2e31da1e46d29341063dcc8901a4f40935794b9486d6d usercfg.txt +a1c3fed1b525e6ebef96d2c9b626ec84e9670451c1238b3d4a532f1e15c4945d4ce8bbd56da037a6d6026307441498ed34b165d7358d30062adea4a7a7e6e43c usercfg.txt 7e5505cb07d5b4a81bd28443d508336b5c547356538f1c06f91ed93ad0d7d456d4f74f1d24df5a2e08c17e74f0a66607352ac4874e967e9a91dfec9522d2d58d 95-vchiq-permissions.rules 15cde27e41304f988009e3a1cbc4bb6a85b9d09538c727e9c22e1ec8a45d025b4be5d0064d7d7bba1988006ad291c06c8aec8bcc974f0689fbd0d187f8dc6979 xorg.conf +51a1fc5ba9336e784fe8dfb97eed8d3f51fd181a9a76c5266e227e1670aa423fdaec04b869795a2abd5afca6d472a1f107f30a0f0efd242ee16c8910773ddcc2 driver-makefile.in +d36e2b1f9187f8269d557d867ccf6d5abd5925ea34c7a5c0b97dcdc96e3b76955701946c68309240e3bb3713f7466c5756806734fab4a8c2c2d161aab7ab1b26 driver-akmbuild.in " diff --git a/device/testing/device-clockworkpi-uconsole-rpi/driver-akmbuild.in b/device/testing/device-clockworkpi-uconsole-rpi/driver-akmbuild.in new file mode 100644 index 000000000..abc5eeb36 --- /dev/null +++ b/device/testing/device-clockworkpi-uconsole-rpi/driver-akmbuild.in @@ -0,0 +1,3 @@ +modname=clockworkpi-rpi +modver=%%MODVER%% +built_modules='%%DRIVER_MOD%%' diff --git a/device/testing/device-clockworkpi-uconsole-rpi/driver-makefile.in b/device/testing/device-clockworkpi-uconsole-rpi/driver-makefile.in new file mode 100644 index 000000000..6f533fdd4 --- /dev/null +++ b/device/testing/device-clockworkpi-uconsole-rpi/driver-makefile.in @@ -0,0 +1,10 @@ +obj-m += %%DRIVER_OBJ%% +USER := $(shell whoami) +KVER ?= $(shell uname -r) +KDIR ?= /lib/modules/$(KVER)/build + +all: + make -C $(KDIR) M=$(PWD) modules + +clean: + make -C $(KDIR) M=$(PWD) clean diff --git a/device/testing/device-clockworkpi-uconsole-rpi/usercfg.txt b/device/testing/device-clockworkpi-uconsole-rpi/usercfg.txt index 51c0a9c27..9db065482 100644 --- a/device/testing/device-clockworkpi-uconsole-rpi/usercfg.txt +++ b/device/testing/device-clockworkpi-uconsole-rpi/usercfg.txt @@ -7,7 +7,6 @@ dtoverlay=spi-gpio35-39 gpio=11=op,dh enable_uart=1 - [pi4] #dtoverlay=clockworkpi-devterm dtoverlay=clockworkpi-uconsole @@ -35,6 +34,7 @@ dtparam=audio=on dtoverlay=audremap,pins_12_13 dtoverlay=dwc2,dr_mode=host dtparam=ant2 +initramfs initramfs ##only edit the section of the pi you have, other section will be ignored. ##if you have a devterm uncomment devterm and comment out entries with uconsole.