Difference between revisions of "PineNote Development"
(WIP page for general development notes for the PineNote) |
(→Pages discussing the development efforts: Copy removed) Tag: Manual revert |
||
(104 intermediate revisions by 20 users not shown) | |||
Line 1: | Line 1: | ||
This article seeks to provide general development information for the [[PineNote]] | This article seeks to provide general mainline Linux development information for the [[PineNote]]. | ||
= | == Mainline development == | ||
=== Status === | |||
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) is expected, only modules relevant to the PineNote hardware should be listed here. | |||
{|class="wikitable plainrowheaders" border="1" | |||
! scope="col" | Function | |||
! scope="col" colspan="2" | Status | |||
! scope="col" | Module | |||
! scope="col" | Notes | |||
|- | |||
| Suspend mode driver | |||
| colspan="2" style="text-align:center;"|tbd | |||
| <code>rockchip-sip</code> | |||
| The rockchip-sip driver is not mainlineable; it is only needed <sup>[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48 (via a hack)]</sup> for suspend/resume to work when downstream TF-A is used. Suspend on upstream TF-A ([https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952 status]) should work without any special drivers. | |||
|- | |||
| Touchscreen | |||
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline | |||
| <code>cyttsp5</code> | |||
| As of 6.2-rc1<sup>[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]</sup> | |||
|- | |||
| Digitizer | |||
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline | |||
| <code>i2c_hid_of</code> | |||
| | |||
|- | |||
| Pen BLE Buttons | |||
| colspan="2" style="text-align:center;"|tbd | |||
| <code>ws8100-pen</code> | |||
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5 | |||
|- | |||
| EBC Display controller | |||
| colspan="2" style="text-align:center;"|tbd | |||
| <code>rockchip-ebc</code> | |||
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC ("E-Book Controller") display driver] | |||
|- | |||
| EBC PMic | |||
| colspan="2" style="text-align:center;"|tbd | |||
| <code>tps65185</code> | |||
| driver developed here: <sup>[https://github.com/smaeul/linux/tree/rk35/tps65185]</sup>, small tweaks to resume behavior added on top here: <sup>[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185] | |||
|- | |||
| LED backlight driver | |||
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline | |||
| <code>lm3630a</code> | |||
| | |||
|- | |||
| Accelerometer | |||
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline | |||
| <code>st-accel-i2c</code> (silan,sc7a20) | |||
| As of 5.18-rc1<sup>[https://git.kernel.org/linus/c7a43b089826b17e46419d93c00c0d2f4b26735f] | |||
|- | |||
| Rastergraphics unit RGA2e | |||
| colspan="2" style="text-align:center;"|tbd | |||
| <code>rga</code> (v4l2 mem2mem driver) | |||
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: <sup>[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]</sup>. | |||
Note that the rga2e in the rk3566 only works for RAM <= 4 G!). | |||
Simple demo program found here: <sup>[https://github.com/m-weigand/rga-v4l2-demo]</sup> | |||
|- | |||
| Mali GPU | |||
| style="background:LightYellow; text-align:center;"|Linux Mainline | |||
| style="background:PaleGreen; text-align:center;"|Upstream Mesa | |||
| <code>panfrost</code> | |||
| As of 5.18 <sup>[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]</sup> this got added to the <code>.dtsi</code> file, but it's status is disabled. Enabling the <code>gpu</code> node upstream needs to wait till <code>rockchip-ebc</code> is upstreamed. | |||
|- | |||
| Wifi/BT | |||
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline | |||
| <code>brcmfmac</code> | |||
| | |||
|} | |||
=== | === Mainlining notes === | ||
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver. | |||
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC. | |||
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image. | |||
== Pages discussing the development efforts == | |||
The software releases can be found here in the future: | |||
* [[PineNote Software Releases]] | |||
The following pages discuss the development efforts for the PineNote: | |||
* [[PineNote Development]] | |||
* [[PineNote Development/Flashing]] | |||
* [[PineNote Development/Booting Linux]] | |||
* [[PineNote Development/Building Kernel]] | |||
* [[PineNote Development/TODOs]] | |||
For tweaks and tricks see: | |||
* [[PineNote Development/Software Tweaks]] | |||
For app development see: | |||
* [[PineNote Development/Apps]] | |||
== How to boot mainline == | |||
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore. | |||
. | |||
''' | You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here]. | ||
=== Getting to a U-Boot prompt === | |||
You can get to a U-Boot prompt by: | |||
# Holding Ctrl-C while the display panel initializes. | |||
# Wiping the "boot" partition. | |||
=== Using sysboot === | |||
The '''extlinux.conf''' should have the following contents: | |||
timeout 10 | |||
default MAINLINE | |||
menu title boot prev kernel | |||
label MAINLINE | |||
kernel /vmlinuz | |||
fdt /rk3566-pinenote.dtb | |||
initrd /initramfs | |||
append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT | |||
At the U-Boot console, run the following command to boot your mainline kernel: | |||
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf | |||
=== Booting with individual commands === | |||
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell: | |||
load mmc 0:b ${kernel_addr_r} boot/Image | |||
load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb | |||
setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash | |||
booti ${kernel_addr_r} - ${fdt_addr_r} | |||
== Configuration == | |||
=== Firmware for WiFi & Bluetooth and Waveform data === | |||
==== Using Maximilian's Debian image ==== | |||
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run. | |||
For instance if you repartitions the userdata partition and installs the image there. | |||
==== Getting it from the Android install manually ==== | |||
Copy WiFi/BT firmware from Android: | |||
mkdir -p /cache/lib/firmware/brcm | |||
cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin | |||
cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt | |||
cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd | |||
Copy waveform partition (via previously dumped file): | |||
adb root | |||
adb push waveform.img /cache/lib/firmware/waveform.bin | |||
Or via dd within Linux: | |||
dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048 | |||
==== Getting the Wifi and Bluetooth driver blobs from "other" sources ==== | |||
===== WiFi ===== | |||
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section; in Bookworm and later it's in the non-free-firmware section) | |||
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt). The content of the upstream .txt is different than the Android configuration, but is supposed to work. | |||
As you don't have WiFi yet you need to get the ''firmware-brcm80211*.deb'' and ''brcmfmac43455-sdio.txt'' file on the PineNote by other means, for instance using an USB stick | |||
===== Bluetooth ===== | |||
Once you have WiFi working you can get BCM4345C0.hcd by installing the ''bluez-firmware'': | |||
sudo apt install bluez-firmware | |||
=== Configuring the E-ink refresh mode === | |||
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in ''/sys'' to alter the refresh mode | |||
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image | |||
=== Touchscreen and Pen In X.org === | |||
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in <code>/etc/X11/xorg.conf.d/50-touchscreen.conf</code> will fix both problems: | |||
Section "InputClass" | |||
Identifier "evdev touchscreen" | |||
MatchProduct "tt21000" | |||
MatchIsTouchscreen "on" | |||
Driver "evdev" | |||
EndSection | |||
Section "InputClass" | |||
Identifier "RotateTouch" | |||
MatchProduct "w9013" | |||
Option "TransformationMatrix" "-1 0 1 0 -1 1 0 0 1" | |||
EndSection | |||
== Further information == | |||
=== Notes Written by Some Developers === | |||
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible "notes", but very helpful repo with patches, videos, etc) | |||
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. | |||
* https://github.com/0cc4m/pinenote-misc | |||
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch | |||
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases | |||
* https://pwarren.id.au/pinenote/build_notes.txt | |||
* https://github.com/DorianRudolph/pinenotes | |||
* https://github.com/tpwrules/nixos-pinenote | |||
=== Alternative to patching of mesa === | |||
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be "repaper". To change the driver name, edit in the kernel tree the following files: | |||
* replace "rockchip-ebc" with "repaper" in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c <br> | |||
* preventive, replace "repaper" with "repaper-disabled" in the two places in the file: drivers/gpu/drm/tiny/repaper.c <br> | |||
=== Video of Factory Android OS === | |||
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)] | |||
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives. | |||
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&t=802s how to enable Android Debug Bridge ("adb") over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running <code>adb</code>. | |||
[[Category:PineNote]] |
Latest revision as of 23:34, 7 April 2023
This article seeks to provide general mainline Linux development information for the PineNote.
Mainline development
Status
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list (Quartz64_Development#Upstreaming_Status) is expected, only modules relevant to the PineNote hardware should be listed here.
Function | Status | Module | Notes | |
---|---|---|---|---|
Suspend mode driver | tbd | rockchip-sip
|
The rockchip-sip driver is not mainlineable; it is only needed (via a hack) for suspend/resume to work when downstream TF-A is used. Suspend on upstream TF-A (status) should work without any special drivers. | |
Touchscreen | Linux Mainline | cyttsp5
|
As of 6.2-rc1[1] | |
Digitizer | Linux Mainline | i2c_hid_of
|
||
Pen BLE Buttons | tbd | ws8100-pen
|
https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5 | |
EBC Display controller | tbd | rockchip-ebc
|
RFC PATCH 00/16 drm/rockchip: Rockchip EBC ("E-Book Controller") display driver | |
EBC PMic | tbd | tps65185
|
driver developed here: [2], small tweaks to resume behavior added on top here: [3] | |
LED backlight driver | Linux Mainline | lm3630a
|
||
Accelerometer | Linux Mainline | st-accel-i2c (silan,sc7a20)
|
As of 5.18-rc1[4] | |
Rastergraphics unit RGA2e | tbd | rga (v4l2 mem2mem driver)
|
WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: [5].
Note that the rga2e in the rk3566 only works for RAM <= 4 G!). Simple demo program found here: [6] | |
Mali GPU | Linux Mainline | Upstream Mesa | panfrost
|
As of 5.18 [7] this got added to the .dtsi file, but it's status is disabled. Enabling the gpu node upstream needs to wait till rockchip-ebc is upstreamed.
|
Wifi/BT | Linux Mainline | brcmfmac
|
Mainlining notes
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.
Pages discussing the development efforts
The software releases can be found here in the future:
The following pages discuss the development efforts for the PineNote:
- PineNote Development
- PineNote Development/Flashing
- PineNote Development/Booting Linux
- PineNote Development/Building Kernel
- PineNote Development/TODOs
For tweaks and tricks see:
For app development see:
How to boot mainline
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.
You can compile a u-boot that uses extlinux by default by following the instructions here.
Getting to a U-Boot prompt
You can get to a U-Boot prompt by:
- Holding Ctrl-C while the display panel initializes.
- Wiping the "boot" partition.
Using sysboot
The extlinux.conf should have the following contents:
timeout 10 default MAINLINE menu title boot prev kernel label MAINLINE kernel /vmlinuz fdt /rk3566-pinenote.dtb initrd /initramfs append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT
At the U-Boot console, run the following command to boot your mainline kernel:
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf
Booting with individual commands
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:
load mmc 0:b ${kernel_addr_r} boot/Image load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash booti ${kernel_addr_r} - ${fdt_addr_r}
Configuration
Firmware for WiFi & Bluetooth and Waveform data
Using Maximilian's Debian image
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.
For instance if you repartitions the userdata partition and installs the image there.
Getting it from the Android install manually
Copy WiFi/BT firmware from Android:
mkdir -p /cache/lib/firmware/brcm cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd
Copy waveform partition (via previously dumped file):
adb root adb push waveform.img /cache/lib/firmware/waveform.bin
Or via dd within Linux:
dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048
Getting the Wifi and Bluetooth driver blobs from "other" sources
WiFi
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section; in Bookworm and later it's in the non-free-firmware section)
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt). The content of the upstream .txt is different than the Android configuration, but is supposed to work.
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick
Bluetooth
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware:
sudo apt install bluez-firmware
Configuring the E-ink refresh mode
- https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode
- https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image
Touchscreen and Pen In X.org
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in /etc/X11/xorg.conf.d/50-touchscreen.conf
will fix both problems:
Section "InputClass" Identifier "evdev touchscreen" MatchProduct "tt21000" MatchIsTouchscreen "on" Driver "evdev" EndSection Section "InputClass" Identifier "RotateTouch" MatchProduct "w9013" Option "TransformationMatrix" "-1 0 1 0 -1 1 0 0 1" EndSection
Further information
Notes Written by Some Developers
- https://github.com/m-weigand/mw_pinenote_misc (Not super legible "notes", but very helpful repo with patches, videos, etc)
- specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling.
- https://github.com/0cc4m/pinenote-misc
- patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch
- prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases
- https://pwarren.id.au/pinenote/build_notes.txt
- https://github.com/DorianRudolph/pinenotes
- https://github.com/tpwrules/nixos-pinenote
Alternative to patching of mesa
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be "repaper". To change the driver name, edit in the kernel tree the following files:
- replace "rockchip-ebc" with "repaper" in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c
- preventive, replace "repaper" with "repaper-disabled" in the two places in the file: drivers/gpu/drm/tiny/repaper.c
Video of Factory Android OS
PineNote Developer Edition w/Tech Demo Android OS (Video Only)
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.
The video also includes a chapter at the end showing how to enable Android Debug Bridge ("adb") over USB. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running adb
.