Creating a bootable Aceruim USB stick

After installing the system, upgrade to Ubuntu version 17.10.1!

For use the latest version of the kernel WIP 4.17.*-avl- * upgrade to Ubuntu version 18.04!

standard-readme compliant Donate with Bitcoin Donate with Ethereum


Kernel 4.8.4 for Acer Aspire SW5-012/Fendi2 (Z3537F)

(based on Ubuntu 16.10 Yakkety Yak)

Before installation:

Update BIOS to version 1.20

  • tested, working

Strictly disable the BIOS option:

D2D Recovery - Disable

FTPM Support - Disable

Secure Boot - Disable

Acer Aspire SW5-012 / Fendi2, BIOS V1.20 23/03/2016

Download Aceruim Live USB image

Extract the image by running following command in your downloads directory:

$ tar xzf acerium-live-cd-16.10-kernel_4.8.4.tar.gz

Prepare a Flash Drive:

$ gdisk /dev/sdX

Where X is the letter of your connected USB drive (for example, /dev/sdb).

To find out drive name, run “dmesg | tail” after plugging it in and look for a string like:
“[2096193.109767] sd 15:0:0:0: [sdb] Attached SCSI removable disk”.

Remove all existing partitions (menu item d) and create a big bootable UEFI partition ~1.5G (“n” command).

Don't forget to use “ef00” partition type.

Write the changes (w).

Refresh partitions:

$ partprobe

Create a FAT32 file system on the Flash Drive’s EFI partition:

$ mkfs.vfat -F 32 -n Acerium /dev/sdX1

Where X is the letter of your connected USB drive.

Mount new partition:

$ mount /dev/sdX1 /mnt

Where X is the letter of your connected USB drive.

Copy to the Flash Drive the contents of the image folder:

$ rsync -av /home/user/acerium-live-cd-16.10-kernel_4.8.4/* /mnt

Unmount flash drive:

$ umount /mnt

Now you can boot your Acer Aspire Switch 10 either in Live USB or installation mode and install the system.

* disk image has been tested for installation and should work

Model: MMC HCG8e (sd/mmc)
Disk /dev/mmcblk1: 62,5GB
Sector size (logical/physical): 512B / 512B
Partition Table: gpt
disc Flags:

Number Start End Size File System Name Flags
1 1049kB 120MB 118MB fat32 boot, esp
2 120MB 58,1GB 58,0GB btrfs
3 58,1GB 58,2GB 80,7MB non-fs bios_grub
4 58,2GB 62,5GB 4344MB linux-swap (v1)

Pay attention to partition flags.

If you have wifi chipset RTL8723BS

Download rtl8723bs firmware

Extract the archive and copy all files to /lib/firmware/rtlwifi

  Use kernel module r8723bs,
  add to /etc/modules load r8723bs

  or load from console # sudo modprobe r8723bs


  Add to /etc/modules load btusb
  or load from console # sudo modprobe btusb

  Add to /etc/rc.local

rfkill unblock bluetooth
hciattach /dev/ttyS4 bcm2035 921600 flow


Download, unpack and copy the file to the /etc/acpi/


Brightness up
# /etc/acpi/ up

Brightness down
# /etc/acpi/ down

You can use keyboard shortcuts to system settings.

Screen rotation

Bonuses by Peter Nelson!

I wrote a script to rotate the screen from portrait mode to landscape and back. The tricky bit was getting the touch-screen, touch-pad and mouse axes all properly inverted. It’s really icing on the cake for this little hybrid. With the help of the Onboard keyboard (standard Ubuntu) it makes a really nice portrait-mode tablet, now.

You can grab the script and install instructions from its github page:

Download script

  • /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="acpi_osi=!! spectre_v2=auto pti=auto systemd.gpt_auto=0 ipv6.disable=1 noresume apparmor=0 intel_idle.max_cstate=0 edd=skipmbr tsc=reliable clocksource=tsc nmi_watchdog=0"
If yours update microcode CPU is supported "IBRS/IBPB"
then enable IBRS option:


IBPB will be turned on automatically.


$ dmesg | egrep microcode

[0.000000] microcode: microcode updated early to revision 0x836, date = 2018-01-10
[2.783816] microcode: sig=0x30678, pf=0x2, revision=0x836
[2.786372] microcode: Microcode Update Driver: v2.2.

$ dmesg | egrep Spectre

[0.012444] Spectre V2 : ibrs selected on command line.
[0.012445] Spectre V2 : Mitigation: Indirect Branch Restricted Speculation
[0.012446] Spectre V2 : IBPB - Enabling Indirect Branch Prediction Barrier
[0.012447] Spectre V2 : IBRS - Enabling Restricted Speculation for firmware calls

~$ grep . /sys/devices/system/cpu/vulnerabilities/*

/sys/devices/system/cpu/vulnerabilities/spectre_v1:Mitigation:__user pointer sanitization
/sys/devices/system/cpu/vulnerabilities/spectre_v2:Mitigation:Indirect Branch Restricted Speculation,IBPB
  • /boot/grub/custom.cfg

Change the UUID to your value!

menuentry "Start Ubuntu Bionic" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1897a202-d46f-4aa6-aa5b-b9a7cf9aaed2' {
                insmod gzio
                insmod xzio
                insmod part_gpt
                insmod btrfs
                set root='hd0,gpt3'
                search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 1897a202-d46f-4aa6-aa5b-b9a7cf9aaed2
                echo    'Loading Linux 4.15.14-wip-x44-atom …'
                linux   /@/boot/vmlinuz-4.15.14-wip-x44-atom root=UUID=1897a202-d46f-4aa6-aa5b-b9a7cf9aaed2 ro rootflags=subvol=@  acpi_osi=!! spectre_v2=ibrs pti=auto systemd.gpt_auto=0 ipv6.disable=1 noresume apparmor=0 intel_idle.max_cstate=0 edd=skipmbr tsc=reliable clocksource=tsc nmi_watchdog=0
                echo    'Loading initrd …'
                initrd  /@/boot/initrd.img-4.15.14-wip-x44-atom
  • /etc/initramfs-tools/modules
# Add these lines to the file
  • /etc/modprobe.d/blacklist.conf
# Add these lines to the file
blacklist mei
blacklist mei_txe
blacklist hid_generic
blacklist b43
blacklist b43legacy
blacklist ssb
blacklist bcm43xx
blacklist cm3218
blacklist cm32181
blacklist ov2722
blacklist atomisp_ov2722
blacklist v4l2_common
blacklist videodev
blacklist zfs
blacklist mac_hid
blacklist acer_wmi
# Fix bug for init Power key, view config rc.local
blacklist gpio_keys
blacklist soc_button_array
  • /etc/fstab
# / was on /dev/mmcblk1p2 during installation
UUID=your_disk_UUID / btrfs space_cache,thread_pool=2,compress=lzo,defaults,ssd,autodefrag,subvol=@ 0 1

# /home was on /dev/mmcblk1p2 during installation
UUID=your_disk_UUID /home btrfs space_cache,thread_pool=2,compress=lzo,defaults,noatime,nodiratime,ssd,autodefrag,subvol=@home 0 2
  • /etc/sysctl.conf
# Network
vm.min_free_kbytes = 32768
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_mem = 50576   64768   98152
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_syncookies = 1
net.netfilter.nf_conntrack_max = 16777216
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_congestion_control = westwood
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.route.flush = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.wlan0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.wlan0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_forward = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 1000
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
fs.inotify.max_user_watches = 16777216
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.ip_default_ttl = 63
net.ipv4.tcp_ecn = 1
net.core.default_qdisc = fq_codel
# Lowlatency Kernel Tuning
# IO shedulers
  • /etc/network/interfaces
wireless-power off
  • /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
wifi.powersave = 2
  • /etc/rc.local
#!/bin/sh -e
# rc.local
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
# In order to enable or disable this script just change the execution
# bits.
# By default this script does nothing.
rfkill unblock bluetooth
hciattach /dev/ttyS4 bcm2035 921600 flow
# Fix brcmfmac error
sleep 20
iwconfig wlan0 power off
# Fix bug for init Power key
sleep 5
modprobe gpio_keys
modprobe soc_button_array
exit 0

and run command:

sudo systemctl enable rc-local.service

Fix start X session

Just add to /etc/default/grub


and then regenerate grub cfg with:

And add this cfg file for X, /etc/X11/xorg.conf.d/20-intel.conf:

Section "Device"
Identifier  "Intel Graphics"
Driver      "modesetting"
Option      "AccelMethod"    "glamor"
If start X session fail and error from system journal :

lightdm[1182]: PAM unable to dlopen( 
/lib/security/ cannot open shared object file: No such file or directory

then turn off all the lines containing and in
all the files in this directory /etc/pam.d

Intel – Fix for Atom MMC/GPT warning.

 I had been getting a warning on boot with recent kernels on my 
Intel Atom-based UP system, and found a workaround.
The error flagged is – apparently – harmless, and is due to systemd
not being able to recognise some mmc disk partitions at that stage of the boot process.

[ 5.124250] systemd-gpt-auto-generator[416]: Failed to dissect: Input/output error

The workaround is to add systemd.gpt_auto=0 to the kernel command line.


Update kernel from my build (DEB packages):

BUILDBOX automatically builds the packages. Look at the file date and the build number.

Kernel for Ubuntu 18.04 LTS Bionic

WIP Kernel

  • Full kernel adaptation to version Ubuntu 18.04 LTS Bionic.
  • Full kernel adaptation to build GCC8.
  • Optimized to take full advantage of high-performance.
  • Supports all recent 64-bit versions of Debian and Ubuntu-based systems.

Main Features:

  • Tuned CPU for Intel i5/i7/Atom and Amd k10 platform.
  • PDS CPU Scheduler & Multi-Queue I/O Block Layer w/ BFQ-MQ for smoothness and responsiveness.
  • Caching, Virtual Memory Manager and CPU Governor Improvements.
  • General-purpose Multitasking Kernel.
  • Built on the latest GCC8
  • DRM Optimized Performance.
  • Intel CPUFreq (P-State passive mode).
  • ZFS, BFQ and Ureadahead support available.

Full support:

  • Indirect Branch Restricted Speculation (IBRS)
  • Indirect Branch Prediction Barrier (IBPB)

Add Linux Kernel Runtime Guard (LKRG)

Linux Kernel Runtime Guard (LKRG) is a loadable kernel module that performs runtime integrity checking of the Linux kernel and detection of security vulnerability exploits against the kernel.


Update Intel microcode for use IBRS/IBPB:


Download the installation packages for your CPU, only x86_64 packages:

Download Download

EOL Kernel 4.14.* for Acer Aspire SW5-012/Fendi2 ONLY!

  • Acerium is a mainline Linux kernel distribution with custom settings.
  • Optimized to take full advantage of high-performance for Acer Aspire SW5-012/Fendi2.
  • Supports all recent 64-bit versions of Debian and Ubuntu-based systems.

Main Features:

  • Tuned CPU for ATOM platform.
  • Tuned CPU Core Scheduler & I/O Block Layer for responsiveness.
  • Caching, Virtual Memory Manager and CPU Governor Improvements.
  • General-purpose Multitasking Kernel.
  • Built on the latest GCC 7.
  • DRM Optimized Performance.
  • Westwood+ TCP Congestion Control.
  • Intel CPUFreq (P-State passive mode).
  • AUFS, BFQ and Ureadahead support available.

Download packages Read this before installing GitHUB Repo

EOL kernel version:

Kernel 4.8.17-27.29-acerium+MuQSS [EOL]
In this kernel, MuQSS (Multiple Queue Skiplist Scheduler) is enabled by default.

Download packages GitHUB Repo





Donate with Bitcoin Donate with Ethereum

English version by Alexey Polevoy, updated by Peter Nelson

Written on November 5, 2016