ASUS MeMO Pad 7 (ME176C(X))

From ArchWiki

This article or section does not follow the Laptop page guidelines.

Reason: Hardware table needs IDs (Discuss in Talk:ASUS MeMO Pad 7 (ME176C(X)))
Hardware PCI/USB ID Working?
SD card Yes
GPU Yes
Touchscreen Yes
Battery Yes
Audio Yes
Wireless Yes
Bluetooth Yes
USB-OTG Yes
Sensors Yes
Backlight Yes
Camera No
GPS No

The ASUS MeMO Pad 7 (ME176C) is an x86_64-based Android tablet. With Android 5.0 (Lollipop) it was updated with UEFI boot, which makes it possible to boot any Linux distribution on it. In general, Arch Linux works as-is, but there are additional (custom) packages available for full functionality.

Warning: This packages mentioned in this article are currently no longer updated. If you want to run Linux on this tablet, also take a look at postmarketOS as an alternative.

Overview

archlinux-me176c contains a few additional packages that simplify installation and provide additional functionality.

Installation

Warning: This article relies on third-party scripts and modifications, and may irreparably damage your hardware or data.

Requirements

  • USB-OTG hub with external power supply (or USB-OTG adapter and USB hub with external power supply?)
  • USB keyboard
  • USB flash drive
  • Consider testing Arch Linux installation using UEFI and systemd-boot on a desktop PC or VM first.

Boot loader

The tablet can boot using UEFI from the internal storage and USB(-OTG). It does not seem to be able to boot directly from an external SD card. However, it is possible to keep only the boot partition on the internal storage and have the root partition on an external SD card for dual/multi boot.

  1. To boot from internal storage you need an UEFI boot loader. me176c-boot is a fork of systemd-boot with extra features for this tablet. See me176c-boot - Installation.
  2. There is not enough space on the EFI system partition to use it as a boot partition. Follow me176c-boot - Setting up an additional ESP partition to set up a supplemental ESP on the APD (ASUS Product Demo) partition.

Boot the live environment

The default Arch Linux ISO does not contain the packages from archlinux-me176c. Therefore, WiFi is not working out of the box. For convenience there are custom ISO provided in the archlinux-me176c releases. They do not differ from the default except that they run with linux-me176c and have all me176c packages installed. Look for the latest "archiso" release and download it, then follow USB flash installation media to flash it to your USB flash drive.

Connect the USB keyboard and the USB flash drive to the USB hub, enable the external power supply and connect it to the tablet while it is powered off. Keep pressing F2 to enter the UEFI setup. There is no need to change anything. Navigate to the Save & Exit tab and use Boot Override to boot from the USB flash drive.

Installation instructions are provided in the Installation guide. A few device-specific recommendations and instructions are listed here.

Partitioning

Warning: Do not wipe or re-partition the internal storage! It may prevent the tablet from booting and makes it difficult to return to Android later.

The internal storage is usually available as /dev/mmcblk2, the external SD card as /dev/mmcblk0. Check carefully. The internal storage has 16 partitions.

me176c-boot - Example: Dual/multi boot provides an overview about possible partitioning for dual/multi boot setups.

At the very least, you need a single root partition, and /boot on the ASUS Product Demo (APD) partition. If you have not changed the APD file system to FAT32 yet, do it first:

# mkfs.fat -F32 /dev/disk/by-partlabel/APD
# mount ... /mnt
# mkdir /mnt/boot
# mount /dev/disk/by-partlabel/APD /mnt/boot

Additional packages

Enable upi_ug31xx.service (from me176c-batteryAUR) if you have chosen to install it.

Boot loader configuration

There is no need to install any boot loader when using me176c-boot. However, you need to create a loader configuration for your Arch Linux installation. The configuration needs to reside on the main EFI system partition. While in the chroot, mount the ESP at /mnt:

# mount /dev/disk/by-partlabel/ESP /mnt

Then create a new loader configuration in /mnt/loader/entries. Make sure to reference the APD partition, correct kernel and additional initrds:

title    Arch Linux
volume   80868086-8086-8086-8086-000000000007
linux    /vmlinuz-linux-me176c
initrd   /acpi-me176c.img
initrd   /initramfs-linux-me176c.img
options  root=PARTUUID=... rw

Consider setting up Intel Microcode updates.

Packages

  • me176c-acpiAUR contains a patched ACPI DSDT that is necessary for Touchscreen, Bluetooth, Battery/Charging and other functionality. Installs additional initrd /acpi-me176c.img.
  • me176c-firmwareAUR contains additional WiFi/Bluetooth firmware from the stock ROM.
  • me176c-factoryAUR loads the WiFi/Bluetooth MAC address from the factory partition and provides udev rules/systemd units to automatically apply them while booting.
  • me176c-batteryAUR provides systemd units for the battery daemon upi_ug31xx used on the stock ROM. It may be needed for the battery driver to work correctly. Start/enable upi_ug31xx.service.
  • thermald-me176cAUR provides a custom configuration for thermald based on values from the stock ROM. Start/enable thermald-me176c.service instead of thermald.service.

These packages are maintained on GitHub and are available through the AUR. Older versions are available on GitHub Releases.

me176c-factory

With me176c-factoryAUR installed, the WiFi/Bluetooth MAC address is loaded from the factory partition during the boot process and applied to the controllers. This is necessary for Bluetooth to work, because it does not have a unique MAC address otherwise. If you would like to use MAC address spoofing you may need to disable this feature by masking me176c-factory-wifiaddr@wlan0.service and/or me176c-factory-bdaddr@hci0.service. The MAC addresses are loaded using me176c-factory.service and are available in /run/me176c. See me176c-factory.

Tips and tricks

Swap

The tablet has only very little RAM, so you almost certainly want to set up some kind of swap space. However, keep in mind SD cards are slow and flash storage in general has only a limited amount of write cycles. Using it as swap space may kill it quickly. An alternative is zram, which compresses parts of the RAM to provide additional space at the cost of higher CPU usage.

Audio

Warning: The speaker volume can be set higher than supported by the hardware. Setting it to very high values may damage the speakers or cause distortions.

Unless you are using PulseAudio, you need to configure a few ALSA mixers to make audio working. This is done using alsaucm:

# alsaucm -i -c bytcr-rt5640
alsaucm>> reset
alsaucm>> set _verb HiFi
alsaucm>> set _enadev Speaker

Using ALSA some audio files (especially MP3/AAC) are not played correctly when converted to float format instead of s16. This does not happen when using PulseAudio.

WiFi/Bluetooth

This article or section is being considered for removal.

Reason: Looks like a fix has landed in the package. (Discuss in Talk:ASUS MeMO Pad 7 (ME176C(X)))

WiFi and Bluetooth share the same antenna, so the chip switches between WiFi and Bluetooth when they are both active at the same time. This appears to be broken in newer firmware versions included in linux-firmware. WiFi may stop working entirely while Bluetooth is active. In this case, the only known workaround is to manually downgrade the WiFi firmware. Download the old version and place it in /lib/firmware/brcm/brcmfmac43362-sdio.bin.

Note: To avoid having to repeat these steps manually after each update, use the NoExtract array in pacman.conf with a wildcard to block their installation.

Screen rotation

See Automatic Rotation. To rotate the Linux console, add the kernel parameter fbcon=rotate:<direction>, e.g. fbcon=rotate:1 to rotate 90° (see fbcon.html).

Hall sensor

If you have a case that closes magnetically and automatically wakes/puts the device to sleep, it may trigger too early/often and suspend your device unexpectedly. To disable this, edit /etc/systemd/logind.conf with HandleLidSwitch=ignore.

See also

See also