Nexus 7 LTE General Issues, Fixes and Workarounds
HUGE UPDATE, Please see the issue list for update
Why?
Because I have recently picked up a 'deb' and after using the Nexus 7 WiFi (flo) I was expecting a very similar experience, seeing as they're effectively the exact same device with a cellular modem and a sim slot added (all the way down to the baseband and bootloader, the deb uses Flo images and is even just an add-on to the flo device tree when compiling Android).
Unfortunately, that was not meant to be, immediately after installing ubPorts, I noticed the following issues and set out to either workaround them or fix them. It's been a very long process and I am a newbie to compiling an Android system image (i've done many a kernel, and application, but never the full Android), so progress is slow. This post will serve as a chronicle of the issues found, and any applicable fixes.
Issues:
1. Bluetooth doesn't function on the 'deb' image
UPDATE: This is indeed caused by the kernel image in use.
This issue is caused by two things, the kernel image that's shipped with the 'deb' installation, and a missing upstart unit in /etc/init
for our device. This is easily fixed by compiling a kernel (or using a pre-built kernel) image for the 'flo' (Nexus 7 WiFi). Doing so actually appears to improve the stability and functionality of the device as a nice addition.
4. Camera is completely non-functional
UPDATE: I have finally been able to get logs, I'll upload them when I get a chance!
When I say non-functional, I mean anything that even requests access to the Camera crashes. I created a Nextcloud webapp on my device and it would only open if I deselected the Camera permission. This issue is the most perplexing out of all of these, second only to the external pointer rotation issue, as there are absolutely NO logs generated regarding the camera, or any application that attempts to access it.
5. Device does not power down or otherwise appear to reboot.
[NOTE]: I have invalidated this issue as it appears there are some slight minute differences between the Flo and Deb defconfigs that aren't represented in the current kernel trees, as building with the kernel configuration found in the ubPorts deb image's android rootfs yielded a kernel in which auto-rotation, slimport and reboot/power-down appear to function properly.
Observations
- Both me and @doniks feel that it's extremely bizarre that the Flo runs perfectly, but it's sister device the Deb (LTE) runs so poorly. As they're the exact same device and system image with an added RIL, it should run exactly the same right?!
- [4/27/2021]: so there are some differences between the Flo and Deb in terms of kernel configuration, I am still attempting to figure out what the difference exactly is though. For now I have patched my own deb/flo configs with the config that I found, and things are working almost as great as on the Flo (no camera though )
Now, onto the fixes and good stuff!
Kernel Modifications
NOTE: Please note that you can use this kernel image in both a Flo and a Deb, however it may not boot on the Flo due to initramfs differences. If you install the kernel image on a Flo, I recommend extracting the kernel itself using abootimg and using the initramfs you already have.
What works
- Bluetooth
- WiFi
- Mobile Connectivity (I do not have a SIM to test voice with, only data)
- Auto-Rotation
- Anbox (needs some extra work to get networking working properly on each reboot at this stage though)
What's been added
- Anbox backported drivers
- zRAM Kernel Module for creating a compressed swap space (this requires some extra effort to enable at this time)
- Linux 4.2 Backports repository (Bluetooth Driver, Anbox)
Download
Download Link: https://1drv.ms/u/s!AqACoL07fxpWp8gGGF_GTmO8f-tCKw?e=xe4VUt
Kernel Source Tree: https://tonoxisisle.services/git/TononixOS/ubports_kernel_google_msm
(don't mind the repository convention, I was working on making my own personal distribution using ubPorts as a base)
Please pardon my git mess, more android repositories will appear as I attempt to work through these device trees and the compilation process.
Information
This kernel is a fork of ameyagokhale's lovely Anbox enabled kernel source tree and contains a couple extra additions:
-
Working zRAM module. In my own experience, zRAM has helped make the system more reliable as I have experienced less application crashing due to low memory than previously. It also removes some strain on our NAND chips by moving swap into a compressed space in RAM instead of a swapfile on the data partition. As our device does not use zRAM under Android, this driver remains uninitialized at startup. You can either create an upstart unit to set up zRAM which then triggers the zram-touch
unit, or you can do the following in a terminal:
sudo zramctl -s <size>
[Personally, I use 2G as the size]
sudo start zram-touch
which sets up ubPorts to use zRAM as it's swap, and dumps the SWAP.img image in /userdata, saving our NAND some write cycles.
-
OverlayFS v13, this module is disabled and not compiled into my kernel images by default, if you want to play with this module, compile it yourself. I had originally pulled it in to provide rootfs overlay support for Anbox (allowing the installation of Google Apps and other System utilities), however Anbox crashed when creating the overlay. I find this extremely odd as I could create the same overlay by hand as root.
-
Obviously Anbox support! YES! We have Anbox support now (courtesy of ameyagokhale)! To use it, install the kernel image and then open terminal, then run the following commands:
anbox-tool install
anbox-tool enable
Anbox should start running and you should start seeing Android applications in the app drawer. Do note that applications do not rotate their orientation and thus must be used in their portrait orientation (as I understand it from reading issue tickets and the like, that is currently a limitation on the Mir port of Anbox that ubPorts is using). This is all very experimental.
FAQ and Notes
-
Anbox support on the Flo/Deb is still very experimental, you may run into the following:
- Applications do not rotate, and appear stretched and distorted when forced
- No networking on startup, this is due to anbox-bridge failing to create the bridge and enable it via iptables inside the container.
- Sometimes the container just plain out refuses to start.
-
We have Anbox which uses LXC, does this mean we can use the LXC-type Libertine Containers?
No. For whatever reason, despite running Anbox's LXC container, and the Halium Android LXC container, Libertine runs into a namespace issue while creating it's container. Unfortunately, we are still very much a chroot-only device for the sake of Libertine.
-
I've downloaded your TonoKernel before for ubPorts 15.04, where are all the extra features like DoubleTap2Wake?
I opted to leave those out of this kernel tree, as I'm working to stabilize and improve the device support as much as possible, I'd prefer to keep extra features out of it while that work progresses. I have given thought to re-introducing those features in the future as a separate download, but I hope to eventually get this modified kernel adopted by ubPorts for the deb as it fixes a couple issues (mainly bluetooth).
Wanna Help?
I'm not so great with the actual Android development side of things, it would be an immense help to try to get a Halium 7.1 system image (that boots into ubPorts mind you) made for the Deb/Flo devices. My efforts keep ending up with a broken system that refuses to boot.
Lastly! Keep an eye on this post, I will be updating it as I continue my research and development!
Changelog:
4/24/2021: Reformatted entire post to clean up the issue list and observations. As well as provide a clear structure for keeping this information on track.
4/27/2021: Removed kernel download link, it's getting replaced here in a couple hours.
Current Status
4/24/2021: Attempting to build Halium-7.1 based system image for the Flo as research, my Deb image refused to boot the container. I'm curious if the Flo image will fare the same.
4/25/2021: Installed a easily compiled deb image, Halium got to starting the init process and then... nothing, no screen change, no logs, just nothing.
4/27/2021: I didn't even NEED to recompile Android, I just needed a good kernel configuration file for the deb. Turns out the flo_defconfig is missing some options, merging /system/boot/config-3.4.0-4-flo
with my normal defconfig file has yielded a kernel with a vastly superior experience to the previous one in use (either by ubPorts installer or my own link here). I am recompiling the kernel using the new kernel configuration and it should be available soon after I test it.
4/27/2021: Kernel problem fixed! Bluetooth works, Auto-rotation works, Slimport works properly! Updated post with new download link and removed old invalid issues.