Motorola Droid 4
Motorola Droid 4 | |
---|---|
Manufacturer | Motorola |
Codename | Maserati XT894 |
Dimensions | 127x67.3x12.7mm |
Release Date | 2012-02-10 |
Category | Supported |
Specifications | |
SoC | TI OMAP4430 |
DRAM | 1024MB DDR2 |
Hardware Features | |
LCD | 960x540 4" |
Video | PowerVR SGX540 |
Storage | 16GB flash |
Sensors | AK8975 compass, LIS3DH accelerometer, ISL29030 proximity and illuminance, TMP105 temperature sensor |
Software Features | |
Kernel | 5.11.0 |
Serial | Yes, special cable |
Charging | Yes |
USB Slave | Yes |
USB Host | Yes |
Touchscreen | Yes |
Keyboard | Yes |
Screen | Yes |
HDMI-out | Yes |
3D acceleration | Yes [1] (closed) |
Vibration motor | Yes |
Audio | Yes |
Phone calls | WIP |
SMS | Yes, no UI |
Wifi | Yes |
2G/3G data | Yes |
Bluetooth | Yes, see notes |
FM transmitter | No, but apparently exists, needs serdev kernel modules/drivers |
Accelerometer | Yes |
Compass | Yes, no integration |
Proximity Sensor | Yes |
Ambient Light Sensor | Yes |
GPS | Yes |
A-GPS | No |
Front Camera | No |
Back Camera(s) | No |
Idle Power Consumption | 120mW |
Installation
Hardware requirements:
- Droid4 with fully charged battery
- MicroUSB cable
- MicroSD card
Software requirements:
- Host Linux or Windows system
- Android Tools: fastboot
- Flashing tools:
- XZ Utils and coreutils for Linux
- Etcher[2] for Windows
Download from https://maedevu.maemo.org/images/droid4/
- VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml.zip
- flash-droid-4-fw.sh
- Latest maemo-leste-1.0-armhf-droid4-*.img.xz
Download from https://github.com/tmlind/droid4-kexecboot.git
- utags-mmcblk1p13.bin
- droid4-kexecboot.img
Check what kernel version your Android OS runs. For this go to Settings -> About phone. Slide to the bottom, where you can see "Kernel version". If you have at least 3.0.8, you may skip "Updating Android" step below.
Installation:
- Create a working directory with above mentioned files in it
- unzip VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml.zip
- Power off Droid4 and connect it to the host machine with MicroUSB cable
- Start the device in fastboot mode. For this press power button and bottom volume key simultaneously and release them after a second.
Updating Android
This will reinstall the Android OS on your device, deleting all user data. Do a backup, if you want to save something. When everything is ready, go to the working directory mentioned above and run:
pushd VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml sudo bash ../flash-droid-4-fw.sh popd
Setting up kexecboot
Now, assuming you are in the working directory, install kexecboot:
sudo fastboot flash mbm VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml/allow-mbmloader-flashing-mbm.bin sudo fastboot reboot-bootloader sudo fastboot flash bpsw droid4-kexecboot.img sudo fastboot flash utags utags-mmcblk1p13.bin sudo fastboot reboot
If you did "Updating Android" the device should run the firstboot steps. If you didn't, the device should reboot and show kexecboot menu for a few seconds before it boots to Android.
Install Maemo Leste to the sdcard
Now, flash the Maemo Leste image to your sdcard:
On Linux:
xzcat maemo-leste-1.0-armhf-droid4-20190227.img.xz | sudo dd status=progress bs=1M of=/dev/MICROSDCARD-DEVICE sync
On Windows: Use Etcher
Wait for sync to complete and insert MicroSD card into Droid4. Reboot the device and select Maemo Leste from the kexecboot menu.
You should now see Maemo Leste booting up, and it will show you hildon-desktop after a minute.
Updating
Normally you can just apt update && apt dist-upgrade to update to the latest version. If for some reason this fails:
- Poweroff device, grab the SD card
- Backup any important files
- Grab the latest image from https://phoenix.maemo.org/view/Images/
- Write it as before : xzcat maemo-leste-1.0-armhf-droid4-20190227.img.xz | sudo dd status=progress bs=1M of=/dev/MICROSDCARD-DEVICE
Notes
The battery in Droid4 is not easily removable. If you got the device stuck, use this combo: power button + bottom volume key. You should hold them for about 7 seconds. Droid4 will then reboot.
If Maemo is still running, you can also hold just the power button for ~10 seconds, and the device will run poweroff.
Some users reported that Bluetooth kernel module interfere badly with the WiFi driver on their devices. Blacklisting the module may help if you have such problems:
echo "blacklist hci_uart" >> /etc/modprobe.d/blacklist.conf
Also see Motorola_Droid_4/Modem Motorola_Droid_4/PowerVR
Also see: http://elektranox.org/droid4/ and http://muru.com/linux/d4/
Serial Cable
As explained at http://muru.com/linux/d4 , the Droid 4 exposes a serial console on the USB port. You can construct the required cable easily by following the instructions there. If you have old Nokia CA-42 or DKU-5 cables, then you can use them with the Droid 4, using instructions at https://jethomson.wordpress.com/2010/02/21/diy-usb-to-serial-cable-for-3usd/
While using the serial cable, if you lose the connection, the following may help:
18:43 < tmlind> sicelo: hmm the uart debug cable multiplexing still has issues, if the uart disappears during boot it should come back with the console login propt later 18:45 < tmlind> try plugging in a pc usb cable then back to uart cable in case that might help
Bluetooth
Needs firmware - install latest firmware-ti-connectivity - See also https://github.com/maemo-leste/bugtracker/issues/290. Due to interference with WiFi, load driver manually, AFTER wifi module loaded
Stuff to try
Blinkenlights
Adding this in rc.local above the exit 0 gets you some blinkenlights to watschen und relaxen.
echo cpu > /sys/class/leds/lm3532::kbd_backlight/trigger # gets you a cpu activity monitor on the keyboard backlight echo mmc0 > /sys/class/leds/shift-key-light/trigger # gets you a 'hdd led' of the SD card on the capslock light
Wifi
The WL1285C Wifi chip in the droid 4 has no onboard nvmem to save its calibration parameters or its MAC address. Instead it gets these parameters from a configuration file provided by the kernel. By default a generic file is provided but for optimal range and a correct persistent MAC address a calibration procedure must be performed.
Install necessary tools:
apt-get install ti-utils-wilink6 droid4-wlanconfig
Run calibration:
sudo maserati-calibrate
Phone Call
Make sure there is a SIM in the phone.
Run this:
Read modem output:
cat /dev/motmdm1 &
Online modem:
printf "AT+CFUN=1\r" > /dev/motmdm1
Connect to network:
printf "AT+COPS=1\r" > /dev/motmdm1
Print connected network:
printf "AT+COPS?\r" > /dev/motmdm1
Turn off signal reporting:
# printf "AT+SCRN=0\r" > /dev/motmdm1
Dial a number:
printf "ATD+1234567890\r" > /dev/motmdm1
Hang up:
printf "ATH\r" > /dev/motmdm1
Answer incoming call:
printf "ATA\r" > /dev/motmdm1
Audio wise, in a pulsaudio of you choice switch to the make a phone call profile, and set the output device as desired.
3G Internet
Using qmicli:
qmicli -d /dev/cdc-wdm0 --wds-follow-network --wds-start-network=apn=internet.t-mobile.cz route del default sudo ifconfig wwan0 up dhclient wwan0
Alternatively if updated to devel icd2 and the maemo gui should allow 3g data connection, if the sim is unlocked and the relevant packages are installed.
GPS
modprobe gnss-motmdm and point gpsd to use /dev/gnss0
22:30 < tmlind> hmm there's a probably kernel gnss bug for gsp access fyi, you can currently only open one connection before you have to restart gpsd :)
Can try to
mkfifo /tmp/gps cat /dev/gnss0 > /tmp/gps Then point gpsd to use /tmp/gps
USSD
22:45 < tmlind> fyi, here's how to send USSD to query balance for example: printf "AT+CUSD=1,#999#,0\r" > /dev/motmdm1 22:47 < tmlind> fyi, for parsing incoming USSD, this web interface works if set to utf-8: https://www.mobilefish.com/services/latin_utf_base64_to_hex/latin_utf_base64_to_hex.php#text_hex_output
HDMI
Move output to external 1080p monitor. Disabling DSI-1 output gets xorg pointer displayed on HDMI, for use with a mouse or barrier.
xrandr --output HDMI-1 --mode 1920x1080 --output DSI-1 --off
Return to internal touchscreen display.
xrandr --output DSI-1 --auto --rotate right --output HDMI-1 --off
Keyboard / Mouse sharing with PC
To use droid4 while working at desktop it can be convenient to share mouse and keyboard of the host pc with droid4.
[https://github.com/debauchee/barrier Barrier software-KVM switch]
Developers and testers may wish to disable the googley bits before compiling.
BT Audio headset
sudo apt install pulseaudio-module-bluetooth blueman bluez sudo modprobe hci_uart pactl load-module module-bluetooth-discover blueman-manager
Pair & trust your device in blueman, connect audiosink. You can close blueman now. The quality seems a bit better in 'offline mode'.
Using a configured Leste sdcard in a different Droid4
A configured Droid4 Leste installation is unique to the device that it was calibrated on. Particularly the wlan firmware calibration will be incorrect if an existing Leste installation is transferred to a different device.
The wifi calibration script requires a system set to stock settings to calibrate-from. It cannot just be re-run on an already calibrated system.
To recalibrate the wifi firmware on a different Droid4, you must reset the FEM parameters to stock settings on the new device, then recalibrate. If you can get the device online (usb networking or moving close to the WLAN AP) this can be done with.
apt reinstall firmware-ti-connectivity
If not, you can download the firmware-ti-connectivity_[version]_all.deb on another Leste device
apt download firmware-ti-connectivity
Then copy the .deb to your new device and install that (as root) with
dpkg -i firmware-ti-connectivity_[version]_all.deb
Then (as root) re-calibrate the wifi chip by running
/usr/bin/maserati-calibrate
Then reboot.
Gallery
Old status overview
Feature | Leste supported | Notes |
---|---|---|
Kernel version | 5.9.0 | Mainline + some patches not yet in mainline - see https://github.com/maemo-leste/droid4-linux |
Serial | Yes | On MicroUSB port, requires special cable |
Charging | Yes | |
Wireless | Yes | |
Ethernet | N/A | |
Micro USB | Yes | OTG and USB network |
Keyboard | Yes | Slightly modified keyboard layout, see https://www.spinics.net/lists/linux-omap/msg135137.html (TLDR; Shift key produces CTRL, SYM produces ALT, and Caps lock produces SHIFT) |
Screen | Yes | |
3D Acceleration | Yes | PowerVR SGX540 (closed driver) - https://github.com/maemo-leste/pvr-omap4/ |
Touchscreen | Yes | Capacitive |
Audio | Yes | Implemented with Pulseaudio and UCM files |
2G/3G data | Yes | Works with ofono, no UI yet - see https://github.com/maemo-leste/connui-cellular/ |
4G data | No | Needs kernel work |
SMS | Yes | Works with ofono. Needs Leste UI |
Phone calls | Yes | Works with ofono (good call quality, too), needs Leste UI |
Bluetooth | Yes | Needs firmware - install latest firmware-ti-connectivity - See also https://github.com/maemo-leste/bugtracker/issues/290. Due to interference with WiFi, load driver manually, AFTER wifi module loaded |
FM Transmitter | No | Apparently exists, and will need serdev kernel modules/drivers |
FM Receiver | Not yet | |
Accelerometer | Yes | Available in /sys, and as input device via iio-uinput |
Compass | Yes | Available in /sys (after loading ak8975 module. No Leste integration applications using it yet) |
Gyro | N/A | |
Proximity sensor | Yes | |
Ambient Light Sensor | Yes | |
Vibration Motor | Yes | |
HDMI-out | Yes | No UI integration |
TV-out | N/A | |
GPS | Yes | Works with gpsd but is not integrated yet, see GPS |
Infrared | N/A | Missing in hardware |
Camera | No | See https://elektranox.org/2018/02/0025-droid-camera/ |
Idle power consumption | ~120mW | Needs sim inserted |