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. Most notably: Plasma Mobile starts!

    I'm keeping (and updating while I progress) the summary below, so that:

    • I don't forget what steps I took
    • Others can help to improve this
    • Others can use this as inspiration for their ports

    Setup sources

    Kernel image

    build

    source build/envsetup.sh 
    add_lunch_combo lineage_deb-userdebug
    lunch lineage_deb-userdebug
    mka mkbootimg
    mka hybris-boot
    

    test and debug

    fastboot -c "$(abootimg -i hybris-boot.img | sed -ne '/cmdline/s/. cmdline . //p' ) bootmode=debug" boot hybris-boot.img
    

    config

    patches

    Android image

    cd halium
    mka systemimage
    ls -l out/target/product/deb/system.img
    

    Rootfs

    Halium rootfs

    get it

    install it

    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 device 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

    sudo ip address add 10.15.19.1 dev enp0s20f0u7 
    sudo ip route add 10.15.19.82 dev enp0s20f0u7
    
    • login via ssh
    ssh root@10.15.19.82 
    
    • fix path variable
    echo $PATH
    /usr/bin:/bin
    export PATH=/usr/sbin:/sbin:$PATH
    

    what works

    • test_lights makes the led breathe
    • EGL_PLATFORM=hwcomposer test_hwcomposer shows rotating spiral! I need echo 200 > /sys/class/leds/lcd-backlight/brightness to 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>
    # or
    # sudo nmcli device wifi connect <SOMEENCRYPTEDWIFI> password <PASSWORD>
    ping -c 2 8.8.8.8
    ping -c 2 debian.org
    # install some missing packages
    apt update
    apt install openssh-client bash-completion command-not-found binutils nano
    
    • buttons: evtest /dev/input/event5
    • touchscreen: evtest /dev/input/event0
    • adb:
      • TWRP
      • chroot into rootfs
      • systemctl enable adb

    what doesn't work

    • test_audio nothing to hear
    ACDB init open file failed
    [ACDB Init]->File is not found on the system
    [ACDB Init]->ACDB init success!
    
    • test_camera
    library "libcamera_compat_layer.so" not found
    Segmentation fault
    
    • test_egl segfaults
    • test_egl_config says: Starting test (EGL_PLATFORM=(null)) and then it sits there forever and cannot be killed
    • test_glesv2 segfault
    • 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 *** tracking lines 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.... 
    
    • test_input
    library "libis_compat_layer.so" not found
    Segmentation fault
    
    scp bbb_sunflower_1080p_60fps_normal.mp4 root@10.15.19.82:
    ssh root@10.15.19.82
    test_media bbb_sunflower_1080p_60fps_normal.mp4
    library "libmedia_compat_layer.so" not found
    Segmentation fault
    
    • test_nfc
    Starting test_nfc.
    Finding NFC hardware module.
    test_nfc: test_nfc.c:156: testNfc: Assertion `hwModule != NULL' failed.
    Aborted
    
    • test_recorder
    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
    
    • test_sensors
    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 1 says :
    Cannot load driver (err -1)
    

    not supported

    • test_vibrator, segfaults, but anyway the N7 doesn't have a haptic motor to vibrate
    Segmentation fault
    

    Ubports rootfs

    Tried the rootfs from here: http://cdimage.ubports.com/rootfs/ but it doesn't do too much for me:

    • screen stays on the Google logo
    • no usb iSerial messages
    • no usb network interface seems to come up
    • last_kmsg shows that systemd does take over http://paste.ubuntu.com/25419054/ however,
    • it complains that "systemd[1]: Failed to start LXC Android Config and Container Initialization."
    • no adb interface comes up, even though in TWRP/chroot I see that android-tools-adbd.service is enabled

    Plasma mobile rootfs

    git clone https://github.com/bhush9/rootfs-builder bhush9-rootfs-builder
    cd bhush9-rootfs-builder
    # follow the instructions in README to patch lb_chroot_live-packages
    sudo ./build.sh
    # waaaaait
    # install it
    

    The reboot takes about a minute. Then you'll hear an audible greeting and afterwards you are greeted by the plasma mobile login screen. You can login and play around a bit. Not much to do though. No network connection and it's not possible to ssh in.

    Reboot back into TWRP and chroot.

    1. To be able to use the ssh server, you need to generate ssh server keys: dpkg-reconfigure openssh-server
    2. Preferably enable password less login :
    adb shell mkdir /home/phablet/.ssh
    adb push ~/.ssh/id.pub /home/phablet/.ssh/authorized_keys
    // todo : some chmod/chown needed?
    
    1. reboot, setup usbnet and then reboot and login as ssh phablet@10.15.19.82
    2. Alternatively, you can set the passwords, but I don't do this because it seems to actually break the graphical login:
    passwd 
    passwd: Authentication token manipulation error
    passwd: password unchanged
    # fix passwd
    apt remove libnss-extrausers
    pam-auth-update 
    # select everything but extrausers
    passwd # set root password 
    passwd phablet # set user password
    

    Debian

    https://github.com/JBBgameich/rootfs-builder/tree/debian
    Haven't tried yet.

    Arch

    https://github.com/Halium/rootfs-builder/tree/archlinux
    https://github.com/mickybart/rootfs-builder/tree/archlinux
    Haven't tried yet. I'm not very familiar with arch.

    What's next?

    • Try other rootfs' - There isn't too much movement wrt rootfs'.
    • Try to get further test_XYZ's to work.

    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.



  • Small update in the OP. Tried plasma mobile rootfs, but can't make it work. Ubports rootfs for Halium doesn't seem to exist.



  • 0_1502745560704_N7PMlogin.jpg

    Behold! Plasma Mobile on the N7!

    Courtesy of Mr @bshah, aka Da Man, who fixed some black magic code, so all I had to do was repo sync and reinstall :)



  • Great that you got it working, now we need to get UBports working here :)



  • Tried the rootfs from here: http://cdimage.ubports.com/rootfs/ but it doesn't do too much for me:

    OP:

    • screen stays on the Google logo
    • no usb iSerial messages
    • no usb network interface seems to come up
    • last_kmsg shows that systemd does take over http://paste.ubuntu.com/25419054/ however,
    • it complains that "systemd[1]: Failed to start LXC Android Config and Container Initialization."
    • no adb interface comes up, even though in TWRP/chroot I see that android-tools-adbd.service is enabled


  • @doniks said in Porting Halium to Nexus 7 deb:

    Alternatively, you can set the passwords, but I don't do this because it seems to actually break the graphical login:

    I actually figured this out... it seemed strange, but I gave wrong instructions it seems,

    pam-auth-update 
    # select everything but extrausers
    

    Here is the catch, last option of pam-auth-update is ... None of the above ... so it would disable standard login as well, instructions should've been select everything but extrausers and none of the above.

    Anyway, I will be publishing newer images with this things fixed soon, so you won't also need to do "hacks" for ssh..


  • Infrastructure

    @doniks Well AFAIK there is currently no ubports image booting with Halium correctly. Plus even if the xenial image would boot, it is far from usable. Lots of permission problems, no apps start etc. Its Pre-Alpha ;)

    BR



  • @doniks you could try the rootfs @ http://cdimage.ubuntu.com/ubuntu-touch/xenial/daily-preinstalled/current/ (I think xenial-preinstalled-touch-armhf.tar.gz or the -arm64.tar.gz if the nexus 7 is 64-bit should be the correct rootfs) and if this works our devs from ubports might reproduce their work step-by-step? I would be very interested whether this works if you could try :-)



  • @demokrit said in Porting Halium to Nexus 7 deb:

    @doniks you could try the rootfs @ http://cdimage.ubuntu.com/ubuntu-touch/xenial/daily-preinstalled/current/ (I think xenial-preinstalled-touch-armhf.tar.gz or the -arm64.tar.gz if the nexus 7 is 64-bit should be the correct rootfs) and if this works our devs from ubports might reproduce their work step-by-step? I would be very interested whether this works if you could try :-)

    Unfortunately, the Nexus 7 is not ARM64, it's normal ARM. So the ARM64 rootfs wouldn't work here. Glad to see progress being made and would love to test it out at some point :)



  • @Tonoxis Ah, I did not make myself clear xD i meant there are rootfs'ses for both armhf and amr64 but good to know it's armhf, thx :-)


Log in to reply
 

Looks like your connection to UBports Forum was lost, please wait while we try to reconnect.