Building Kernel
This page contains information on how to build a linux kernel for the PineNote.
Available Kernel Repositories
The following (incomplete?) PineNote-specific kernel repositories are available:
- https://github.com/m-weigand/linux/ (based mainly on the repository from smaeul, with additional patches pulled in from other sources, Debian packages available)
- https://gitlab.com/pgwipeout/linux-next/
- https://github.com/smaeul/linux/tree/rk35/pinenote-next
Building the kernel
note
These following instructions need to be cleaned up and updated, and OS-specific information and tweaks should be moved elsewhere
After following Dorianâs directions to get Arch installed youâve seen someone playing DOOM and you want to learn how to get the features that enable that kind of performance. To get your PN running this smoothly, weâll need to build our own kernel. There are two kernel efforts underway right now:
- pgwipeout: https://gitlab.com/pgwipeout/linux-next
- smaeul: https://github.com/smaeul/linux/tree/rk35/pinenote-next
Weâll be using smaeulâs kernel + some additional patches provided by DorianRudolph, pgwipeout, Maximilian Weigand, occam_razor, and hrdl. Thanks so much to them, and all the other users who have worked on piecing together drivers, twiddling configs, answering questions, and sharing their work in other ways. Brava!
Perhaps the main component of the kernel is the DRM driver. You can read more about the driver by reading Smaeulâs RFC.
A small warning
This guide is completely based off of the scripts provided by Maximilian. Weâll be cloning and running them, but he owns them and he – or others – might change them. Itâs smart to have a look at whatâs going on, check when this page was last updated vs when his scripts were last updated, etc. Be nimble!
Additionally, as Maximilian warns here, these changes are all experimental and may damage your panel.
note
If anyone reading this has recommended reading for how we can understand what may damage our panels (IE is the risk in fast updates? The types of updates? something more complicated?), please add it here!
What you should have already done
It is assumed youâve already got an operating system installed on your Pinenote other than the stock Android. Doing this isnât trivial, but it is well understood - you will be following the footsteps of many others. Dorian Rudolph made a guide for doing this, available here.
Steps to build
Clone Maximilianâs scripts:
$ git clone https://github.com/m-weigand/mw_pinenote_misc.git
Make a separate directory for patching the kernel. Then run Maximilianâs clone_and_prepare_git.sh. This will clone smaeulâs kernel and a number of patches. Read the script to see which patches it is using. Feel free to open the patches too – itâs helpful to get a slim idea of whatâs going on, if only looking at the commit messages in them:
$ cd ../ $ sh mw_pinenote_misc/custom_kernel/clone_and_prepare_git.sh
Compile the kernel:
$ sh ./mw_pinenote_misc/custom_kernel/compile.sh
Next we want to perform the work captured in install_to_pn.sh, but the work may vary slightly from person to person. As long as you put them somewhere and configure your extlinux.conf to point at it, things will be okay. Looking at install_to_pn.sh, we can see that there are three pieces to installing the kernel: the kernel image (called Image), the device tree (rk3566-pinenote-v1.2.dtb), and the modules. All of these files have been compiled and placed into the linux/pack folder. The easiest way to send these over is by using scp or rsync - read the script and decide how you would like to get your files in the correct location. You may need to install rsync on your PineNote if it doesnât already have it.
DTB was installed like this:
$ scp rk3566-pinenote-v1.2.dtb root@pinenote:/boot/dtbs/rockchip/
After installing the DTB as above, the file /boot/extlinux/extlinux.conf may be updated to point to this new file
(Perhaps not necessary?) The last step is to generate a new initrd image (see Wikipedia for an explanation about initial ramdisk). This is done on the PineNote itself. Send Maximilianâs installation script over and run it. Then place the generated image (from the last step of the shell script) into your boot partition and update extlinux.conf if needed to point at this new file.
$ scp initrd/gen_uboot_image.sh root@pinenote:/root # Do this part on local to put script on PN $ ssh root@pinenote # Or use UART, the dongle + picocom, and change to root $ cd /root $ ./gen_uboot_image.sh $ mv initrd.img /boot/initrd.img $ vim /boot/extlinux/extlinux.conf # Update this to reference this new initrd image
At this point your kernel is in place!However, there are a few more steps you may need to complete to ensure the display and networking continue to work:
- For display, you may need to change /lib/firmware/waveform.bin to /lib/firmware/rockchip/ebc.wbf (TODO: is this a difference between PG and smaeulâs kernel or a patch?)
- For networking, you may need to change /lib/firmware/pinenote.bin to /lib/firmware/pinenote-v1.2.bin
This part technically isnât kernel specific, but we need to install a patched version of Mesa. If you are running an Arch based system, youâre in luck!occam_razor provides prebuilt patched packages (say that 5 times fast) here. Simply extract these files, send them to PN, and install them using the package manager. You can also patch it yourself by looking at Maximilianâs compile_mesa.sh.
note
If you frequently update your system with pacman -Syu, you will end up updating these packages and losing the patches. Add this line to your
/etc/pacman.conf
to prevent them from being updated:IgnorePkg = libva-mesa-driver mesa mesa-debug mesa-vdpau opencl-mesa vulkan-mesa-layers vulkan-broadcom vulkan-panfrost vulkan-radeon vulkan-swrast
- To ensure the GPU stays on, we need to use Maximilianâs mweigand_eglinfo.service. The Readme.md in that same directory has instructions for how to install this, but basically we need to copy it to /etc/systemd/system/, run
sudo systemctl daemon-reload
to make sure systemd knows it exists, then executesudo systemctl enable mweigand_eglinfo.service
.
Next steps
Configuring the driver
The driver has several options that can improve performance. These can be read about here. rockchip_ebc.bw_mode=1 rockchip_ebc.default_waveform=1 rockchip_ebc.refresh_threshold=30 rockchip_ebc.auto_refresh=1
may be used to make the image lower quality, but much faster to update. The auto_refresh setting is also essential to clear ghosting which will otherwise accrue on screen. The APPEND line in the extlinux.conf might be added to make sure they are applied on boot.
Fixing suspend
If youâre using a logind system, edit your /etc/systemd/logind.conf config. More information on what to do in Archâs documentation.
Configuring your apps
See Apps.
Booting Linux instead of Android
PineNote Development/Booting Linux