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
config
source build/envsetup.sh
add_lunch_combo lineage_deb-userdebug
lunch lineage_deb-userdebug
patches
common porting errors
test and debug
fastboot -c "$(abootimg -i hybris-boot.img | sed -ne '/cmdline/s/. cmdline . //p' ) bootmode=debug" boot hybris-boot.img
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
- reboot the device and wait for usb networking to come up as above
- configure usb network on your desktop in a similar way as above for telnet, but now for ssh
sudo ip address add 10.15.19.1 dev enp0s20f0u7
sudo ip route add 10.15.19.82 dev enp0s20f0u7
ssh root@10.15.19.82
echo $PATH
/usr/bin:/bin
export PATH=/usr/sbin:/sbin:$PATH
echo 'export PATH=/usr/sbin:/sbin:$PATH' >> /root/.bashrc
what works
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
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!
library "libcamera_compat_layer.so" not found
Segmentation fault
test_egl
segfaults
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....
library "libis_compat_layer.so" not found
Segmentation fault
wget http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi
wget http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_60fps_normal.mp4
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
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
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.
- To be able to use the ssh server, you need to generate ssh server keys:
dpkg-reconfigure openssh-server
- 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?
- reboot, setup usbnet and then reboot and login as
ssh phablet@10.15.19.82
- 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
Haven't tried yet.
https://archive.org/download/halium-debian-rootfs/
https://github.com/JBBgameich/rootfs-builder/tree/debian
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?
- Get ubports to run
- Get PM to run on halium-boot
- Check out LuneOS
- Check out SailfishOS
- Build a .zip file, only makes sense if some OS is remotely usable, PM is close but still not there
- get lxc-attach to work
- patch out the noise dmesg logging of the battery
Any tips or feedback appreciated!