User Tools

Site Tools


pinephone

This is an old revision of the document!


PinePhone

UB Ports Build process

UB ports update servers

The settings for update servers etc.. is stored:

/etc/system-image/config.d/01_channel.ini

This points to the update server.

system-image.ubports.com

This uses the following file to define the update channels:

http://system-image.ubports.com/channels.json

so for pinephone:

http://system-image.ubports.com/16.04/arm64/mainline/stable/pinephone/index.json

There are 3 channels for Pine phone: rc, stable and devel

Kernel

The kernel currently used is:

https://gitlab.com/pine64-org/linux/-/tree/pine64-kernel-ubports

To compile:

NOTE: this assumes OpenSuse with addition of cross-aarch64-gcc7

Also note: set CONFIG_LOCALVERSION_AUTO to “n”

# Configure
make ARCH=arm64 CROSS_COMPILE=aarch64-suse-linux- pine64_defconfig

# Clean
make ARCH=arm64 CROSS_COMPILE=aarch64-suse-linux- LOCALVERSION="-pine64" clean

# Compile image
make ARCH=arm64 CROSS_COMPILE=aarch64-suse-linux- -j4 LOCALVERSION="-pine64" Image

# Compile modules
make ARCH=arm64 CROSS_COMPILE=aarch64-suse-linux- -j4 LOCALVERSION="-pine64" modules

Crust

The Pinephone uses CRUST to do the power management.

https://github.com/crust-firmware/crust

Current State

The following is not working:

  • Camera
  • Phone (no signal)
  • Vibration motor

Some interesting info here: https://xnux.eu/devices/pine64-pinephone.html

Vibration motor

From https://xnux.eu/devices/feature/vibrator.html#toc-example-program-to-control-the-vibration-motor there is a test app (assuming its using the force feedback input).

Initial run return:

ERROR: Can't open vibrator event device: No such file or directory

Adding additional debug:

name: axp20x-pek
name: Goodix Capacitive TouchScreen
name: gpio-keys
name: 1c21800.lradc
ERROR: Can't open vibrator event device: No such file or directory

So, there is no vibrator driver :( this is hopefully because the kernel has not been configured to do this yet.

On the https://megous.com/git/linux/tree/arch/arm64/configs/pinephone_defconfig?h=orange-pi-5.7 kernel (not sure if this is a PinePhone kernel) sets CONFIG_INPUT_GPIO_VIBRA, However https://gitlab.com/pine64-org/linux/-/blob/pine64-kernel-ubports/arch/arm64/configs/pine64_defconfig also sets this :(

However there is also:

CONFIG_INPUT_GPIO_VIBRA=y
CONFIG_INPUT_PWM_VIBRA=m

However the pwm_vibra module does not help.

Camera

The camera is a OV6540 and is connected via the sun6i csi interface. This is how to enable it

So First we need to enable a number of modules in the kernel tree

CONFIG_V4L2_FLASH_LED_CLASS=m
CONFIG_LEDS_CLASS_FLASH=m
CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y
CONFIG_LEDS_SGM3140=m

Then compile up the kernel modules, this generates three new modules led-class-flash.ko, v4l2-flash-led-class.ko, leds-sgm3140.ko.

Copy these over the PinePhone and install them into the running kernel:

sudo insmod led-class-flash.ko
sudo insmod v4l2-flash-led-class.ko
sudo insmod leds-sgm3140.ko

You should now have the /dev/media1 device.

Next, UT does not have media-ctl, we could use the apt version, however that one is too old. Instead I used: https://archlinuxarm.org/packages/aarch64/v4l-utils

Download this package and copy just the media-ctl over to the PinePhone. Then setup the media device:

sudo ./media-ctl -d /dev/media1 --set-v4l2 '"ov5640 3-004c":0[fmt:UYVY8_2X8/1280x720]'

Now we need to check that it all works

Ok, by using fswebcam, we can install this from apt (Note this may be unsafe and could brick the PinePhone……)

sudo mount /dev/loop0 / -o remount,rw
sudo apt-get install fswebcam
sudo mount /dev/loop0 / -o remount,ro

And now we are ready to capture:

fswebcam --device /dev/video1 --resolution 1280x720  -p UYVY --verbose --save bob.jpeg

Cross Compile

pinephone.1593692934.txt.gz · Last modified: 2020/07/02 12:28 by mark