Skip to content

Instantly share code, notes, and snippets.

@NeroReflex
Last active September 26, 2023 00:13
Show Gist options
  • Save NeroReflex/e546ca365b86d3ef226ea4a085bfae43 to your computer and use it in GitHub Desktop.
Save NeroReflex/e546ca365b86d3ef226ea4a085bfae43 to your computer and use it in GitHub Desktop.
Install another kernel on chimera stable

Chimera v43 and v43-1 Stable on ROG Ally

This document started as a tutorial to install a custom kernel, but I enlarged it with useful stuff.

Please, if you try one of my kernel(s) provide me a benchmark of a few games before and after installing the custom kernel. Be sure to report every regressions to me directly and also give a word about personal opinion and console feeling after installation comparing to the original.

Disclaimer

I want to say three things:

The first one is that this is NOT OFFICIAL from chimera team and nobody of the team approved anything is this document and you are not officially encuraged to follow it.

The second thing is that this was put together (literally...) with good intentions but stuff breaks and/or starts from different configurations and you might end up having to reinstall chimera: I do not want any responsibility, and be ready to restore a backup, get a usb hub, a mouse, a keyboard and configure SSH access.

Third: this will only work on stable v43 and v43-1 chimera build. No unstable. No future versions. Probably previous versions, but I don't think you want to be the very first human to try that.

Edit sleep

This is for having sleep/wake working (or at least attempt to)

sudo frzr-unlock # <= by default chimera is read-only, you will have to unlock the filesystem
sudo nano /usr/lib/systemd/system/systemd-suspend.service

make sure your file is equal to:

[Unit]
Description=System Suspend
Documentation=man:systemd-suspend.service(8)
DefaultDependencies=no
Requires=sleep.target
After=sleep.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c "echo mem > /sys/power/state"

The only different line should be the last one

Unlock the filesystem

Only do this if not done already

sudo frzr-unlock # <= not necessary if you edited the sleep script before

xone-blacklist.conf

This is very important. If done wrong buttons will not work after reboot.

sudo nano /etc/modprobe.d/xone-blacklist.conf
# you but a # symbol before (at the beginning of the line) blacklist xpad
# Ctrl+O save the file (probably pressing Enter will be necessary)
# Ctrl + X to exit

Get DKMS

For dkms to work you will need base-devel as well as dkms itself.

Not using/breaking dkms will have no impact on the ally itself, but may break additional hardware for example bluetooth xbox one controller

sudo pacman -S base-devel dkms unzip git wget

Download & extract LLVM

Kernel is compiled with clang and it will be needed to properly recompile kernel modules with dkms:

cd ~ # this is very important for a later command.
wget http://neroreflex.duckdns.org/llvm.zip # this one comes from my bedroom: please be patient
unzip llvm.zip

Downloading the kernel

The kernel has to be downloaded, yes, you guessed it... from my bedroom.

Kernel 6.4.7 got more testing, has horizon zero dawn performance regression but otherwise a 10% performance boost. Contreller after resume had a different behaviour for every person. For me sometimes I lost steam and guide buttons but never native-xbox buttons!

mkdir ~/kernel_6.4.7
cd ~/kernel_6.4.7
wget http://neroreflex.duckdns.org/linux-chimeraos-6.4.7.chos4-1-x86_64.pkg.tar.zst
wget http://neroreflex.duckdns.org/linux-chimeraos-headers-6.4.7.chos4-1-x86_64.pkg.tar.zst

Kernel 6.5.0 has (at the moment) very low in-game testing: who tested it reported a visible performance gain, in games and in switch emulator, tested with a zelda title! The known total number of people that installed this version is now 5. Might also have negative impact on some -untested- games (like horizon zero dawn). Prepare for a mystical experience either way!

mkdir ~/kernel_6.5.0
cd ~/kernel_6.5.0
wget http://neroreflex.duckdns.org/linux-chimeraos-6.5.chos1-1-x86_64.pkg.tar.zst
wget http://neroreflex.duckdns.org/linux-chimeraos-headers-6.5.chos1-1-x86_64.pkg.tar.zst

Installing the kernel

In order to install the kernel you cd into the directory containing the downloaded kernel and do:

export PATH="/home/gamer/llvm-project-llvmorg-17.0.0-rc1/build/bin:$PATH"
sudo pacman -U *.tar.zst

Firmware Overrides

If you are installing 6.5.0 firmware overrides MUST be DISABLED for sound to work.

If you are installing 6.4.7 firmware overrides MUST be ENABLED for sound to work.

firmware overrides are controlled via:

sudo nano /etc/device-quirks/device-quirks.conf # 0 = disabled, 1 = enabled
# same as before.... Ctrl+O, Ctrl+X
sudo frzr-tweaks

# !!! WARNING !!! ONLY DO THIS IF YOU WANT TO DISABLE OVERRIDES, IT SHOULD HOWEVER NOT BE NEEDED
# at this point I noticed overrides were still in the bootloader config file, I just:
sudo nano /boot/loader/entries/frzr.conf # here you find the "initrd /rog_ally_0x58_acpi_override" line with ally quirks and comment it (place # in front of the correct line)

Get the kernel to boot

Here you have to options, you copy the new kernel over the old one (ugly way, just works):

cd /boot
sudo cp vmlinuz-linux-chimeraos vmlinuz-linux
sudo cp initramfs-linux-chimeraos.img initramfs-linux.img

Or you edit the bootloader configuration (this is the proper way, but you MUST be careful):

sudo nano /boot/loader/entries/frzr.conf
#change the line "initrd /initramfs-linux.img" with "initrd /initramfs-linux-chimeraos.img"
#change the line "linux /vmlinuz-linux" with "linux /vmlinuz-linux-chimeraos"
# WARNING: Triple check you spelled file correctly or IT WILL NOT BOOT AND THE CONSOLE WILL BE DEAD!!!

The number of people that resorted to the proper way, but failed at first needing to repair theirs installation is now 5.

If you do a mistake there please let me know so that I can update the counter. There's no shame in it, I was the first!

Final note about suspend

If buttons do not come back after suspend you can try the following. Results are unknown but fixed someone situation:

sudo nano /boot/loader/entries/frzr.conf
# in the commandline you put the following:
# usbcore.autosuspend=-1
# Save & Exit

power off the device and start ip up again.

with the device booted do the following:

sudo modprobe -r hid_asus && sudo modprobe -r usbhid && sleep 5 && sudo modprobe usbhid

TDP control

To have TDP control working you use steam-patch. I have put together a steam-patch that only provides TDP control and does not manages buttons, so that you can use AntiMicroX to use joysticks to control mouse in desktop mode:

sudo systemctl stop steam-patch # don't worry if this fail. It's normal...
sudo pacman -S rust
cd ~
mkdir src
cd src
git clone https://github.com/NeroReflex/steam-patch.git
cd steam-patch
cargo build --release
mkdir ~/steam-patch
sudo cp target/release/steam-patch ~/steam-patch/steam-patch
chmod a+x ~/steam-patch/steam-patch

Then create the file ~/steam-patch/steam-patch.service with the following content:

[Unit]
Description=Steam Patches Loader
Wants=network.target
After=network.target

[Service]
Type=simple
User=root
ExecStart=${WORKING_FOLDER}/steam-patch --user=gamer
WorkingDirectory=/home/gamer/steam-patch

[Install]
WantedBy=multi-user.target

and finally run:

cp ~/steam-patch/steam-patch.service "/etc/systemd/system/steam-patch.service"
sudo chown root "/etc/systemd/system/steam-patch.service"

# Run service
sudo systemctl daemon-reload
sudo systemctl enable steam-patch.service
sudo systemctl start steam-patch.service

Updating HandyGCCS

As my fork of steam-patch does not manages input it is important to update the handycon service:

sudo systemctl stop handycon
# now your buttons should not be working!
pikaur -Sy handygccs-git
sudo systemctl enable --now handycon
# now your buttons should be working again!

If updating handycon fails with an error do the following and then try again to update:

sudo pacman -S python-setuptools

Expected result

At this point, with the 6.5.0 kernel your expected behavior is either one of the two (where an arrow -> means sleep/wake):

working -> (not working: QAM not working and/or normal buttons behaving wrong) -> working -> not working -> working -> etc...

In the first case please keep in mind that at boot buttons may not work and could need a sleep to start working and ending up in the above pattern!!!

Or you could end up having the one my console exhibits (that is also the correct one):

working -> working -> working -> working -> etc... #flawless

When you put your console to sleep (by tapping power) a little steam animation should run on screen before entering the sleep state!

HandyGCCS is to be updated to work correctly on low TDP and correctly resume after sleep. If you have delayed input at very low TDP it means you have not updated HandyGCCS successfully. Follow those step carefully.

If the put the console to sleep and if flickers before entering sleep you skipped at least one step. The correct result is having a brief animation playing before sleep: not having it is a clear sign something wrong was done or this steps were not followed correctly or the ally was in a state that prevented some commands to work the intended way.

After doing anything written here my buttons works consistently 100% of the time, and two people have reported going from "controller not resuming after sleep" to the first option. One of the two lost this behavior however and returned to the first. Still investigating.

The very first tester of the kernel, immediatly after installing 6.5.0 and without doing much of additional tinkering, had its situation worsened where he lost steam button entirely and had to downgrade, however after doing anything written here its situation has improved. He appears to be on case 1 (work -> not work cycle).

Using the integrated controller as a mouse

In order to use the integrated controller AntiMicroX is proved to work.

Download that from flathub and configure it in desktop mode.

Thanks

All of this instructions are thing I either found on the chimeraos discord channel and was discovered by someone else or by testing random stuff in mine or other people device, so a big thanks goes to the community!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment