Linksys EA9350 V3 / MR5500 (linksys-jamaica)
pmOS can't run on its internal storage.However, it's possible to boot pmOS from USB Stick. |
gnome running on it with USB GPU and mainline | |
Manufacturer | Linksys |
---|---|
Name |
EA9350 V3 / MR5500 |
Codename | linksys-jamaica |
Released | 20XX |
Type | router |
Hardware | |
Chipset | Qualcomm IPQ5018 |
CPU | Dual-core Cortex-53 |
Storage | 256MB Raw NAND |
Memory | 512MB |
Architecture | armv7 |
Software | |
Original software | Linux |
postmarketOS | |
Category | testing |
Pre-built images | no |
Flashing |
Broken |
---|---|
Internal storage |
Broken |
SD card | |
Multimedia | |
Camera Flash | |
Connectivity | |
WiFi |
Broken |
Bluetooth |
Broken |
Ethernet |
Broken |
NFC | |
Miscellaneous | |
FDE | |
USB-A |
Partial |
SATA/eSATA | |
HDMI/DP | |
Sensors | |
Magnetometer | |
Ambient Light | |
Proximity | |
Hall Effect | |
Haptics | |
Barometer | |
This port is only tested on the EA9350 V3 variant. If you get it working on the MR5500 variant then please let us know. Thanks! |
There are 2 variants:
- EA9350 V3 : According to linksys , It is a isp rotuer of PCCW isp in HK.Also this port is made for EA9350 V3.
- MR5500 : Seem to be identical to EA9350 V3 but with different bootloader.
Note that these instructions are only expected to work on the EA9350 V3 variant.
Also Linksys MX5500 (linksys-dominica) and Linksys EA9350 V3 / MR5500 (linksys-jamaica) are based on Reference Board mp03.1.dts.
Aarch64
Linksys MX5500/MX2000 are also based the ipq5018 Soc.They seem to has better bootloader then EA9350 V3.MX5500/MX2000's bootloader seem able to boot Aarch64 kernel but EA9350 V3's bootloader cant. Also MR5500 seem to be identical to EA9350 V3 but with 64 bit bootloader.
Installation
WARNING: DO NOT PLUG multiple USB stick into the router during boot.If you do have multiple USB stick pluged in druing boot , please make sure the usb 0 in u boot is the pm os usb stick. |
Currently, only installing pmOS to a USB drive is supported.
Use pmbootstrap to build your own image, like so:
$ pmbootstrap init
$ pmbootstrap install --sdcard=/dev/sdX # change 'sdX' with the path of your USB drive
After creating your pmOS image, connect to your device via UART.
Next, intercept U-Boot when it's booting. You should get a shell.
U-Boot will run commands that are saved in the bootcmd environment variable. By default bootcmd contains commands to load the stock os. |
Run these commands to modify the default boot behavior for making pmOS automatically boot when the device is powered on and a pmOS USB stick is plugged in:
IPQ5018# setenv bootstockos "${bootcmd}"
IPQ5018# setenv bootcmd "usb start;fatload usb 0 ${loadaddr} boot-image.itb;bootm ${loadaddr};run bootstockos"
IPQ5018# saveenv
Run the following commands to reboot after you have modified the default boot behavior:
IPQ5018# reset
You can still boot into the stock firmware by unplugging the pmOS USB stick even after you have modified the default boot behavior or you can manually boot pmOS if you don't want to modify the default boot behavior.
Run these commands to manually boot pmOS:
IPQ5018# usb start
IPQ5018# fatload usb 0 ${loadaddr} boot-image.itb
IPQ5018# bootm ${loadaddr}
Functionality
UART
You can find a UART header on the front of the PCB.
Colour | Pin | |
---|---|---|
Purple | Rx | |
Yellow | Tx | |
Black | GND |
USB
Mainline lacks of usb3 phy driver. It currently only has usb 2 phy driver. Therefore some usb3 device dont work. However it is possible to get those device to work by plugging them via a usb 2 hub.
USB Power
GPIO pin 17 needs to be active low in order to turn USB power on. The kernel will not set the GPIO pin to active low when it boots, so there is a initramfs hook for setting that up every time pmOS boots.
How to manually turn off USB power:
# "base" (512) + 17 = 529
echo 1 > /sys/class/gpio/gpio529/value
How to manually turn on USB power:
# "base" (512) + 17 = 529
echo 0 > /sys/class/gpio/gpio529/value
Ethernet
Mainline lacks of ethernet driver.
Internal Storage
Mainline lacks of the driver.
WiFi
Mainline lacks of wifi driver.
LEDs
USB LED
There are a right led under the USB port.It work.
Front PWM LED
PWM LED driver currently rely on PWM driver which the Mainline lacks.Therefore,it currently configed as gpio led in the kernel thus the brightness dont work.
# Activate LED and set the brightness to 1 (Max Brightness : 1)
echo 1 > /sys/class/leds/$COLOR/brightness
# Deactivate LED
echo 0 > /sys/class/leds/$COLOR/brightness
Color :
Color | LED |
---|---|
white:usb | USB light |
blue:power | Power Light (blue) |
green:power | Power Light (red) |
red:power | Power Light (green) |
Downstream LED Quirk
USB LED
In the downsteam kernel from linksys, the usb led is setted to active low in the device tree.It is believed to be a mistake due to setting it to active low caused the issue below.
1. Setting the brightness of the led to 0 in the kernel should turn off the led but it make led to be lighted up.
1. Setting the brightness of the led to 1 in the kernel should turn on the led but it make led to be powered off.
Front PWM LED
One of the pin of the led is setted to active low in the device tree but the PWD LED driver seem to setted it to active high.
Also it used a quirk for hardcodeing the color of the led in the kernel.
Gallery
Partition Layout
~ # cat /proc/mtd dev: size erasesize name mtd0: 00080000 00020000 "0:SBL1" mtd1: 00080000 00020000 "0:MIBIB" mtd2: 00100000 00020000 "0:QSEE" mtd3: 00040000 00020000 "0:DEVCFG" mtd4: 00040000 00020000 "0:CDT" mtd5: 00080000 00020000 "0:APPSBLENV" mtd6: 00140000 00020000 "0:APPSBL" mtd7: 00100000 00020000 "0:ART" mtd8: 00080000 00020000 "0:TRAINING" mtd9: 00080000 00020000 "u_env" mtd10: 00040000 00020000 "s_env" mtd11: 00040000 00020000 "devinfo" mtd12: 05200000 00020000 "kernel" mtd13: 04a00000 00020000 "rootfs" mtd14: 05200000 00020000 "alt_kernel" mtd15: 04a00000 00020000 "alt_rootfs" mtd16: 00200000 00020000 "sysdiag" mtd17: 04400000 00020000 "syscfg" mtd18: 04316000 0001f000 "squashfs" mtd19: 03c8c000 0001f000 "syscfg"
Firmware Analyst
it seem the SBL firmware is based on Qualcomm_Snapdragon_410/412_(MSM8916) firmware thus it's Booting Procedure should be smaller to 410.However there are no aboot partition on this device.
~ # cat /dev/mtd0 | grep MDM MDM9240 MDM9340 MDM9640 MDM9245 MDM9645 MDM9209 MDM9309 MDM9609 ~ # cat /dev/mtd0 | grep APQ APQ8052 APQ8053 APQ8016 APQ8036 APQ8056 APQ8076 APQ8017 APQ8037 APQ8009 APQ8039 ~ # cat /dev/mtd0 | grep MSM MSM8940 MSM8952 MSM8953 MSM8116 MSM8216 MSM8616 MSM8916 MSM8236 MSM8636 MSM8936 MSM8956 MSM8976 MSM8217 MSM8617 MSM8917 MSM8937 MSM8208 MSM8209 MSM8609 MSM8909 MSM8939 ~ # cat /dev/mtd0 | grep IPQ IPQ5000 IPQ5010 IPQ8070 IPQ8071 IPQ8072 IPQ8172 IPQ8173 IPQ8074 IPQ8174 IPQ5016 IPQ8076 IPQ5018 IPQ0518 IPQ5028 IPQ8078 IPQ0509 IPQ8070A IPQ8071A IPQ8072A IPQ8074A IPQ8076A IPQ8078A ~ #
Secure Boot
The stock uboot has is_sec_boot_enabled command which seem to for checking secure boot is enabled or not.
IPQ5018# is_sec_boot_enabled secure boot fuse is not enabled
According to that , EA9350 V3 secure boot is off thus it is possible to replace the stock bootloader by flashing unsigned bootloader/SBL that support aarch64 to it.
Maintainer
- exkc(Hacking their Navigator(PCCW) isp router...)