Porting Halium to Nexus 7 deb
I'm trying to get Halium running on the Nexus 7 2013 gsm variant "deb".
I've made a few steps already, but so far no user interface on the screen yet. I'm going to summarize where I am, so:
- I don't forget what steps I took
- Others can help to move this further
- Follow the steps here https://github.com/Halium/docs/blob/master/porting/index.md for halium-7.1
- write local_manifest as explained here https://wiki.ubports.com/wiki/Setting-up-Your-Tree-for-CM12.1-Devices
- lineageos kernel sources: https://github.com/LineageOS/android_kernel_google_msm
- my local_manifest : https://gist.github.com/doniks/7ee302c7792450761332d8f8712f29f6
- binaries : https://developers.google.com/android/nexus/drivers MOB30X
source build/envsetup.sh add_lunch_combo lineage_deb-userdebug lunch lineage_deb-userdebug mka mkbootimg mka hybris-boot
test and debug
- Follow steps here https://github.com/Halium/docs/blob/master/porting/index.md#debugging
- if you want to force init into telnet, add kernel parameter
fastboot -c "$(abootimg -i hybris-boot.img | sed -ne '/cmdline/s/. cmdline . //p' ) bootmode=debug" boot hybris-boot.img
- the kernel config is this: kernel/google/msm/arch/arm/configs/lineageos_flo_defconfig
- Primary source to check for wrong configs: https://github.com/lbt/mer-kernel-check
- Secondary source: https://github.com/janimo/phablet-porting-scripts/blob/master/kernel/check-config
- (maybe also:
CONFIG=out/target/product/deb/obj/KERNEL_OBJ/.config lxc-checkconfig? )
- my kernel config: https://gist.github.com/doniks/7406a87e5f15e1eab5a64aa90ad8f633
cd halium mka systemimage ls -l out/target/product/deb/system.img
- Should be this: https://github.com/Halium/rootfs-builder/ but I couldn't get it to work, so
- I use this: http://bshah.in/halium/halium-rootfs-20170630-151006.tar.gz
- to install the rootfs you need working adb on the N7. I use this twrp recovery: https://eu.dl.twrp.me/deb/twrp-3.0.2-0-deb.img.html (had some problems with 3.1.1-0)
- boot into twrp recovery
git clone https://github.com/Halium/halium-scripts ./halium-scripts/halium-install halium-rootfs-20170630-151006.tar.gz halium/out/target/product/deb/system.img
- The N7 should reboot and get to the point where it announces usb networking:
lsusb -vd 0fce: | grep -i serial iSerial 3 GNU/Linux Device on usb0 10.15.19.82
- reboot into twrp recovery to set the root password
adb shell cd /data mkdir mnt mount rootfs.img mnt/ chroot mnt /bin/bash export PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH passwd
connect to it
- reboot the device and wait for usb networking on the N7 to come up as above
- configure usb network on your desktop similar to before : https://github.com/Halium/docs/blob/master/porting/index.md#debugging-via-telnet
sudo ip address add 10.15.19.1 dev enp0s20f0u7 sudo ip route add 10.15.19.82 dev enp0s20f0u7
- login via ssh
- fix path variable
echo $PATH /usr/bin:/bin export PATH=/usr/sbin:/sbin:$PATH
That's how far I got.
test_lightsmakes the led breathe
EGL_PLATFORM=hwcomposer test_hwcomposershows rotating spiral! I need
echo 200 > /sys/class/leds/lcd-backlight/brightnessto turn up the display brightness, so I can actually see the spiral :)
- wifi: http://docs.halium.org/en/latest/porting/wifi.html
nmcli d # no wlan0 echo 1 > /dev/wcnss_wlan echo sta > /sys/module/wlan/parameters/fwpath nmcli d # shows wlan0 nmcli dev wifi # list wifis nmcli dev wifi connect <SOMEOPENWIFI> ping -c 2 184.108.40.206 ping -c 2 debian.org # install some missing packages apt update apt install openssh-client bash-completion nano
what doesn't work
test_audionothing to hear
ACDB init open file failed [ACDB Init]->File is not found on the system [ACDB Init]->ACDB init success!
library "libcamera_compat_layer.so" not found Segmentation fault
Starting test (EGL_PLATFORM=(null))and then it sits there forever and cannot be killed
test_gps, honestly I don't know whether that output below constitutes success of failure ... since I can't recognise any coordinates, I think it failed. I've waited 5 minutes or so. There are more
*** trackinglines but no coordinates
*** setup signal handler *** get gps interface *** device info id = gps name = loc_api GPS Module author = Qualcomm USA, Inc. *** init gps interface *** set capabilities capability is 00000007 ** Creating thread: 'Loc_hal_worker' (start=0xb69f23b5, arg=0x1d02080) ** After thread_create: 'Loc_hal_worker', error=0 (start=0xb69f23b5, arg=0x1d02080) **** Thread wrapper start (start=0xb69f23b5, arg=0x1d02080) **** *** setting positioning mode *** start gps track *** gps tracking started *** tracking....
library "libis_compat_layer.so" not found Segmentation fault
test_media, get a video from http://bbb3d.renderfarming.net/download.html
scp bbb_sunflower_1080p_60fps_normal.mp4 firstname.lastname@example.org: ssh email@example.com test_media bbb_sunflower_1080p_60fps_normal.mp4 library "libmedia_compat_layer.so" not found Segmentation fault
Starting test_nfc. Finding NFC hardware module. test_nfc: test_nfc.c:156: testNfc: Assertion `hwModule != NULL' failed. Aborted
Test application for video recording using the camera Recording start with volume up button. And stops with volume down. The result is stored to /root/test_video.avi library "libcamera_compat_layer.so" not found Segmentation fault
library "/system/lib/hw/sensors.oem.so" not found libsensor_add_waiting_client adding cb 0 Hardware module ID: sensors Hardware module Name: Qualcomm Sensors Module Hardware module Author: Qualcomm Inc. Hardware module API version: 0x1 Hardware HAL API version: 0x100 Poll device version: 0x1000001 API VERSION 0.1 (legacy): 0x1 API VERSION 0.1: 0x65537 API VERSION 1.0: 0x16777217 API VERSION 1.1: 0x16842753 API VERSION 1.2: 0x16908289 API VERSION 1.3: 0x16973825 API VERSION 1.4: 0x17039361 libsensor_add_waiting_client adding cb 1 Got 0 sensors
test_wifi 1says :
Cannot load driver (err -1)
test_vibrator, segfaults, but anyway the N7 doesn't have a haptic motor to vibrate
Honestly, I'm not sure how to proceed now :) I guess trying to get further test_XYZ's to work and maybe figure out how I could try a ubports rootfs?!
Any tips or feedback appreciated!
update: got hwcomposer working with some help from bshah, updating first post
Hey Doniks, nice to see you still working on Ubuntu Touch (It's ShadowEO from XDA). The Nexus 7 does actually have NFC, but you are correct, it does not have a haptic motor for vibration.
Sad to see the Flo isn't supported, but you can bet I'll be trying your deb port on my flo the moment you have a working test release :D
@Tonoxis Well, hallo there! Pleasure to meet again :)
I was actually thinking the other day to ping you on xda whether you would be interested to help :)
As for "releasing", I hadn't actually intended to upload the kernel image itself anywhere ... you know it's not in any way in a consumer ready state. The screen is black you can talk to it with commandline stuff over a usb cable. It is exciting :) but only for a certain audience. People should be able to build it with the instructions above and then have all the sources and infrastructure such that they can also actually improve upon the current state. Or do you think it would make sense to upload the images?
As for supporting flo - Well, it might "just work", right?! Similar with how we did it back in the day the other way around where your TonoKrnl "just worked" on my deb.
PS: updated first post for NFC & vibration. thx!
Unfortunately, I haven't had time for much of anything lately, if that were different I'd be happy to help with the project. For release, I'd recommend images and source tree, so anyone who wishes to contribute/debug can download your image as it currently is without needing to completely rebuild from source.
And I hadn't thought of that, you're right, it's possible the Deb version may just work on the Flo. I think the only hardware difference is the cellular modem afaik.