ARM Laptops and Dev Support

Hi All,

Two questions here.
What is the best ARM (Qualcomm) based laptop that fully supports linux/manjaro. I know kernel 6.1 has a load of improvements but it seems that ARM boot loaders are a bit of an Achilles heel. Aside from the PineBook which seems to be pretty streamline. Any other, more performant laptops out there that are working?

Second question is, when I finally find do find my ARM based laptop what can I do to help? I’m a rubbish coder, so I might not be of best help building a new boot loader, but I’ll try my hands at just about anything. I would love to be able to help the arch team or manjaro team in their testing. And if I can work my way into some kernel testing that would be brill.

I’d probably be fine just grabbing something like a Thinkpad x13s Snapdragon, but I feel the most lost with how to contribute back. It’s really one of the main reasons I want to take the leap and buy the ARM laptop.

Thanks!!
P

Your best bet is likely to try the laptop with our Generic EFI images. This only needs the EFI firmware to be present to work.

I’m not a Manjaro user, but I am an X13s owner, and I’m paying very close attention to what’s going on for the X13s. Right now, I don’t think you’ll get much of anywhere; apparently, for one, the X13s doesn’t share certain information with EFI (I’m not sure I have this quite right) WRT the UUID for the hard disk, and this causes issues during installation. But even more important is that the kernel doesn’t really have much support for the hardware. WiFi does work, but sound/bluetooth doesn’t, graphics aren’t accelerated, etc. However, I’m seeing Ubuntu doing a bunch of development, as well as Lenovo (the former for installation-side stuff; the latter for kernel updates). I’m gonna guess the X13s is a viable platform come Ubuntu 23.10 – since they’ve already chosen kernel 6.2 for 23.04, and the bulk of the important changes are in 6.3, I just don’t see it happening by April release. However, if the installer works, perhaps an update to 6.3 would be feasible before 23.10. Hopefully other distributions pick it up, too, as I love the look and feel, but refuse to run WIndows.

Good luck!

2 Likes

Thanks!
It seems like the latest kernels have some very helpful additions for all things ARM.

@ravenpi, what distro are you running on your x13s? Are you using it as your daily driver?
From what I’m reading Debain seems to have some potential, but using nightly releases nothing close to an LTS yet.

I’m finding the ongoing developments in ARM very interesting. If anyone has specific blogs, or channels of any kind they follow for the latest news please let me know. I’m logging into the aarch-laptops IRC and that has some great discussions going.

I just picked up a Lenovo C630 to start my journey. Its a Snapdragon 850 based laptop, little dated, little sluggish but is supposed to have some decent support. I’m going to try and put it through it’s paces and do some testing.
I’m hoping to eventually get a X13s, its a little pricey but if I am able to contribute back any testing or development work it would be worth it.

Thanks!

Longtime Manjaro Xfce user here. Found this because i’m as well interested in Manjaro on Thinkpad X13s and/or MacBook Air M1. Those are the two “go-to” ARM devices for me as of the time being.

Like others, i too want to express my respect for Manjaro ARM team, thank you guys!

p.s. u/steevdave on reddit mentioned running Linux on Thinkpad X13s: https://www.reddit.com/r/linuxhardware/comments/zq4rrk/linux_on_arm_thinkpad_x13s/

1 Like

MacBook m1 support might come soon while lenovo device is not planned as we don’t have the hardware yet.

Hopefully in the future as we already have many devices to add support for.

1 Like

What would we need from Lenovo to make the x13s work? I mean if they shared drivers for the bootloader I imagine, but anything else?

It’s pie-in-the-sky but we can try to open a path of communication with teams in Lenovo and see if there can be any support provided to make things easier for Linux users.

From what I understand it better uefi already so users are free to try the efi generic image and see if it runs.

The drivers for the whole hardware is needed to be present in the linux kernel. Once it is there then efi image should just work fine.

If you have contact with lenovo team then it will be helpful to get a development device for testing.

1 Like

This is what steevdave posted on reddit, he is using Thinkpad X13s as his daily driver. I mentioned the link in my previous comment:

“Yes, running Linux on it. I’m running Kali (as previously mentioned, I’m a kali dev) but Debian and arch both also work on it that I know of, as long as you download the iso that supports it. There is a google doc that actually walks you through the steps of getting it set up and booting Debian. Arch users I assume know what they are doing already, but if not, the #aarch64-laptops channel on OFTC has a bunch of people in it who have one and are running Linux on them”

Ok great, thanks for helping clear that up.
And thanks @franky303

I wonder if the efi generic image will work well on the c630. I’ve been following the GitHub - aarch64-laptops/build: Build an Linux OS based image page and that’s got me a working ubuntu 18.04. I want to go through the custom build process see what that’s like.

I spent too much time trying to get the Windows side of things working to do a dual boot. You’d think that the Windows 10 Arm image was a national secret. Anyone non-technical would have just chucked the laptop instead of doing a fresh install from Lenovo’s tools. At least now its a working laptop while I figure the linux side out. Eventually I’ll move entirely to Linux.

It is interesting seeing first hand how big of a lack there is in ARM compatible software. I see somethings available for apple silicon but not Linux. Sublime Text for example.

Can’t wait till that changes.

1 Like

Unforunately I could not get the Generic EFI image to run on my C630. It will boot into grub and seems to attempt loading the kernel, but hangs at “loading initrd image” (I think, it has been a week since I last tried it, but it’s what happens immediately after you select a boot option).

It is intresting to note that if I use the image at Releases · aarch64-laptops/debian-cdimage · GitHub with a signed kernel 6.1, it results in the same behaviour, but if I use it with an unsigned kernel, it results in the system attempting to boot until the display turns off and nothing seems to happen. I should note that secure boot is turned off in both cases, though I’m not sure if that affects a signed kernel.

I was hoping that maybe someone has gotten things other than the (now slowly falling out of date) custom debian but I’ve not been able to find anything that works. Worseyet, I can’t do anything in that install since audio is completely broken for me despite it seeming to work for everyone else, so I’m stuck with windows. :confused:

I’ve actually become the owner of Qualcomm Windows ARM laptop (Snapdragon 850 based) and I’ve been digging around for a while why and how I could boot the Linux and I think I’ll share some thoughts here.

First of all, the best result I got here was with Linux 6.x kernels (e.g. linux62 package in repos), which weren’t distributed with the Generic EFI images, so I had to mount the image and install it using QEMU on my desktop. Also, even with that installed, I couldn’t successfully boot the kernel, althrough the kernel itself executed properly and basics were loaded. The problem however was with the FS loading as the kernel has always ended up at trying to mount root yet not recognizing (any?) filesystem on the partition.

As of Linux 5.x (which I’ve noticed to be bundled in Manjaro ARM EFI images), I always ended up with the black screen and automatic reboot of my laptop, which I guess indicated that Linux did not load properly. At least good to know things have improved on 6.x.

I’ve also noticed some Qualcomm modules/drivers disabled in the kernel (at least according to the config I fetched from the Manjaro kernel image), which could be a reason why kernel misbehaved on my side, so I tried to build and package the kernel on my own (based on Arch Linux ARM kernel). However I’ve always ended up with the EFISTUB which uses empty dtbs and does not really do much anything near to being bootable, so to make things easier, maybe Manjaro ARM team could actually provide us the PKGBUILD for the linuxN packages? These don’t seem to be build the same way as the X86 variants and I could not find them on the GitLab repository.

1 Like

If it is not able to mount rootfs then it means that the emmc or sdcard is not visible. This could be due to lack of driver upstream for this soc.

You can try enabling all the configs needed for Qualcomm soc and see if that helps.

My thought is if linux62 did boot into initramfs but couldn’t load storage driver then there is no driver upstream, you might have to search online and see if anyone have such drivers for upstream kernel.

Good luck.

@spikerguy Thanks a lot for the reply!

If it is not able to mount rootfs then it means that the emmc or sdcard is not visible. This could be due to lack of driver upstream for this soc.

I’ve been actually trying to boot over USB (my UEFI firmware allows me only to boot via emmc or usb, sdcard seems to be not bootable or at least it doesn’t show up on the setup screen), but yeah the lack of the drivers for that is also quite possible – it was USB 3.0 and I’ve already noticed a lot of EMMC and USB drivers are lacking in the linux62 Manjaro kernel for Qualcomm hardware. And I’ve tried to build a kernel on my own, but I’ve always ended up with the EFISTUB that seemed to work more like in linux kernel package (i.e. it seemed to highly depend on external dtbs and were unable to even load kernel and proceed to mount rootfs step), but not linuxN. Another thing was that in recovery shell the keyboard were non-functional, everything else (GRUB, UEFI shell) so I couldn’t do much to debug it from Linux side.

Also with UEFI shell I was able to make a dump of some parts of firmware, like EFI drivers, config files (these were read-only), ACPI firmware (or something that looks like it) and uefiplat.cfg (it contains memory mappings / offsets), so that might come in handy later if there will be a need to make a proper dts for the kernel specifically for my laptop model and overall for some mods in GRUB like entering the EFI bootloader menu (I still don’t know the shortcut on keyboard for that and if it even exists lol).

Also @linux-aarhus I’ve been looking here on GitLab for ARM PKGBUILDs of linuxN kernels yet I couldn’t find any of these. Could you share the PKGBUILDs on ARM for packages like linux62? That would made a lot easier to build and package kernels on my side (I can already try rebuilding it from another PKGBUILDs and config file I got from prebuilt kernel, but having the actual script of how you make it on your own would help a lot).

That being said, I’ll probably give a try to compile linux 6.4.1 with your 62 config to check if it produces an EFI stub that works differently to what I got before and use defconfig later to modify it for my hardware. If I’ll end up with anything functional (I only care about actually booting Linux now into the shell, stuff like GPU and sensor drivers might not exists or be non-functional for me), I’ll share it here and hopefully it will land to next Manjaro ARM kernel builds :slightly_smiling_face:.

That is because they don’t exist in the same manner as x86_64 - at least not that I know of.

Kernels are build per device and thus named for the device in question e.g. linux-rpi.

You will have to look at the PKGBUILD for a given device and amend that to fit your use-case.

There is no linuxN kernels. Most of the kernels are device specific. The linux package is the most generic for use with a lot of boards.

https://gitlab.manjaro.org/manjaro-arm/packages/core/linux

Then it needs to be added to initramfs, just a guess.

This kernel is coming from ArchLinuxArm as we do not have any such package.
ArchLinuxArm - Git

Good Luck.

That is because they don’t exist in the same manner as x86_64 - at least not that I know of.

There is no linuxN kernels.

@linux-aarhus @Darksky Welp, I’m kinda confused now if you don’t build these. However pacman with my customized (I’ve only updated stuff and installed different kernel as far as I remember – there’s no custom repos or any deep customizations) Manjaro ARM generic minimal seems to say otherwise:

$ pacman -Si linux62
Repository      : core
Name            : linux62
Version         : 6.2.7-1
Description     : The Linux 6.2 Kernel and modules - AArch64 multi-platform (EFI
                  only)
Architecture    : aarch64
URL             : http://www.kernel.org/
Licenses        : GPL2
Groups          : None
Provides        : linux=6.2.7
Depends On      : coreutils  kmod  initramfs
Optional Deps   : crda: to set the correct wireless channels of your country
                  linux-firmware: additional firmware
Conflicts With  : None
Replaces        : None
Download Size   : 54.24 MiB
Installed Size  : 72.07 MiB
Packager        : MNJRO ARM Runner <info@manjaro.org>
Build Date      : Fri Mar 17 08:29:16 2023
Validated By    : MD5 Sum  SHA-256 Sum  Signature

I also understand a lot of SBC boards don’t come with UEFI firmware and these are usually boot either with a custom, platform-dependant kernels. However my laptop comes preinstalled with UEFI firmware (as required by Windows ARM) and is able to boot Linux kernel directly with it, as long as it is correct EFISTUB. This means that when there are appropriate drivers (or maybe even UEFI drivers reused by kernel?), I might be able to boot upstream, generic Linux kernel without relying or anything that is non-generic and platform-specific (only on drivers that are either built-in with the kernel or distributed as modules with the initramfs image).

This kernel is coming from ArchLinuxArm as we do not have any such package.

@spikerguy I both don’t find it in ALARM GitHub repo and core repository. It also doesn’t feel like in Arch Linux style to provide Linux kernels per each major Linux kernel version, it’s more like a practise done on X64 repos in Manjaro. So I’m clueless as you are how this package landed to Manjaro mirrors in the first place :confused:. Maybe it was build before, but removed later in source repos but not in (all?) package repos? Well, I’m not a Manjaro maintainer nor host mirrors to know that :wink:. The kernel was definitely built with Manjaro-specific config, at least CONFIG_LOCALVERSION="-MANJARO-ARM" suggests that.

Anyway, I believe linux-lts also provided EFISTUBs like that in the past (basing on the name vmlinuz instead of Image in /boot) so I might find try use that and find something useful there. And linux62 config might be more than enough for me to have a working kernel EFISTUB that either executes similar or better after I’ll be done tweaking your config and pretty much enabling everything associated to Qualcomm hardware. Maybe I’ll also try building the exactly the same version of kernel as in linux62 package, althrough I doubt there were any breaking changes done in upstream to my hardware (in fact, I believe it might contain support for more of my hardware in newer kernels).

This must be the linux package reference earlier

and the linux-lts

I was never involved much with the ARM project - so what I know is likely what you know.

The ARM project builds kernel per device - for what I know - there is no such thing as maintaining a kernel series like x86_64.

You have latest stable and latest lts - like upstream - then there is kernels for specific devices - those seem to be - from what I have gathed from gitlab they appear to follow latest lts.