PineNote Development/Building Kernel
Building the Kernel
Hello geniuses. You've bought a pinenote (told you you were a genius!), followed Dorian's directions to get Arch installed, but then you've seen someone playing DOOM (TODO link) and you want to learn how to do that too. 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 (did I forget anyone?). 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!
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. 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
I assume 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 (TODO link).
What do you need to know?
If you followed Dorian's guide to get here and felt semi-comfortable, you'll be fine. This is no more complicated than that. If you are intimidated, that's okay! I'll still encourage you to try :) you will learn a lot, just be patient and don't put any data on your PineNote that you wouldn't be okay losing. If you run into trouble, ask for help in the Discord/Matrix (TODO link). Please try to solve problems on your own first, and if nobody replies, please be patient and ask again soon. You can reach me at @aarondabomb on Matrix. Please edit this document if you think something could be clearer or you see a great opportunity for a joke! Have fun :)
Getting Started
- Clone Maximilian's scripts:
- 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: - Compile the kernel:
- Next we want to perform the work captured in
install_to_pn.sh
, but the work may vary slightly from person to person. For example, I believe Maximilian is running Arch Sid, and I am running Manjaro -- because of this, and personal preference, some of our files live at different places. As long as you put them somewhere and configure yourextlinux.conf
to point at it, things will be okay. Looking atinstall_to_pn.sh
, we can see that there are three pieces to installing the kernel: the kernel image (calledImage
), the device tree (rk3566-pinenote-v1.2.dtb
), and the modules. All of these files have been compiled and placed into thelinux/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.- If it helps, I installed my dtb like this:
$ scp rk3566-pinenote-v1.2.dtb root@pinenote:/boot/dtbs/rockchip/
- After installing the dtb as above, I updated my
/boot/extlinux/extlinux.conf
to point to this new file (previously, my dtb did not have the-v1.2
on the end). - 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 (and I imagine more as well), you may need to change
/lib/firmware/pinenote.bin
to/lib/firmware/pinenote-v1.2.bin
- For display, you may need to change
- Next, we need to install a patched version of Mesa. occam_razor was kind enough to provide
That should be it! Now are equipped with the freshest kernel + patches
However, to keep parity with Maximilian and enable the GPU, I completed a few other steps as well which involve generating a new . I'm not sure if these are necessary -- if someone wants to update this to indicate what is necessary, what is not, and maybe even why that is the case, that would be helpful :)
WIP!!!
What I'm Doing
- If it helps, I installed my dtb like this:
- compile mesa
- get mesa from here: https://github.com/0cc4m/pinenote-misc/releases (I can't install since I am deving on debian, not arch).
- Try to run dpkg-buildpackage gives me an error saying it can't open debian/changelog. This is because I don't have the debian package, which can be obtained here (I think) : https://salsa.debian.org/xorg-team/lib/mesa/-/tree/mesa-22.1.3-1.
- Install devscripts, run `mk-build-deps --install --root-cmd sudo --remove` to install build dependencies, then run dpkg-buildpackage.
- This spat out a ton of files into ../ (but not libmutter-9-0_41.4-1_arm64.deb as indicated in the install script. Worse, I didn't cross compile, it's all amd64 deb!
- I'm so dumb because it comes prebuilt in 0cc4m's stuff: https://github.com/0cc4m/pinenote-misc/releases lol
- Send that stuff over to the pinenote!!
- Untar it and install the packages like this: https://wiki.archlinux.org/title/offline_installation_of_packages
- compile mesa
- At this point everything should be installed. Let's restart and see what happens.
- Kernel panic: https://pastebin.com/4Z0aJgHz
- Looking back to see if I missed anything. Mutter? Similar to mesa, but I actually have to build it. Build script has commands needed. Ah shit but I'm on debian, meaning I can only build for debian. I could do a chroot thing...but it's probably not mutter.
- But now networking is busted. Looking trhough `journalctl` for hints.
- https://matrix.to/#/!QtTzSRYMuozjbOQkzJ:matrix.org/$HdLaPUKxQr3F690EFNa0Qk0tm_k-72p8cX6ngObk_XQ?via=matrix.org&via=kde.org&via=tchncs.de
- Just rename those files and we'll boot, but still not display -- do I need modified mutter? It's X that's failing to start
- Display doesn't work either
- Need to change lib/firmware/waveform.bin to lib/firmware/rockchip/ebc.wbf. This whole conversation is a lot of the same stuff i ran into: https://matrix.to/#/!QtTzSRYMuozjbOQkzJ:matrix.org/$hnt-F-5YkDfb5I4Ky_ENI7s2jqq4O5Aeo-y4dFCsp_0?via=matrix.org&via=kde.org&via=tchncs.de
- yea looks like display server isn't starting. I tried running the x command from tty: https://pastebin.com/yP3A9cde "no screens found"
- Going to try switching to gnome?
- Try switching to wayland? Idk the other guy was getting this error with wayland and sway, I'm getting with X and kde. Maybe something else.
- Look for sddm logs
$ git clone https://github.com/m-weigand/mw_pinenote_misc.git
$ cd ../ $ sh mw_pinenote_misc/custom_kernel/clone_and_prepare_git.sh
$ sh ../mw-pinenote_misc/custom_kernel/compile.sh