I recently found an old ASUS X205T laptop squirreled away in my closet. When I tried to boot it, it constantly rebooted back to the BIOS. Since it was 100% unsalvagable, I decided to try putting Linux on it.
To save others my pain, I have decided to chronical my steps from nothing to boot. There are several other tutorials out there, including the wiki. The difference with this tutorial is I will try to show the easiest way, not the most "noble" way.
The majority of the issue comes from the fact that the laptop uses a 64-bit processor with a 32-bit uefi bootloader. This means you need to have a weird hack to even boot.
First, boot into the BIOS (press F2 or F8 during boot), and disable UEFI under the Security tab.
Next, go to savagezen's github page and download the customized Arch ISO he prepared. Follow his instructions to flash it onto a USB drive and insert it into the laptop. Boot into the BIOS again and go to the last tab and select the USB drive you inserted under boot override.
If all went well, you should boot into the live Arch environment.
Verify UEFI mode
To make sure you booted correctly into UEFI mode, run the following command:
# ls /sys/firmware/efi/efivars
If you get a list of files, you have booted correctly.
The X205T has no ethernet jack, so we will need to connect to a wireless network.
Connect to your home network and verify with:
# ping google.com
This will only work for the live boot.
The partitioning guide is taken from the Arch Linux For Dummies guide.
To see your current paritioning set up run:
On my laptop, the actual hard-drive was under the label
mmcblk1 with the USB under
sda. When following partitioning guides, make sure to keep this in mind.
The easiest way I found to partition is the drive is as follows. First, run
# parted /dev/mmcblk1
Once you ensure there is nothing on the hard-drive you want to save, run:
(parted) mklabel gpt
This sets the partition label.
To set up the partitions, run:
(parted) mkpart ESP fat32 1MiB 513MiB (parted) set 1 boot on (parted) mkpart primary linux-swap 513M 3G (parted) mkpart primary ext4 3G 100%
This will create the boot, swap, and primary partitions. Run quit to exit out of the parted:
To check that everything was created correctly, run:
# lsblk /dev/mmcblk1
You should have
Next, we need to format each of the partitions.
The boot partition:
# mkfs.fat -F32 /dev/mmcblk1p1
The swap space:
# mkswap /dev/mmcblk1p2 # swapon /dev/mmcblk1p2
The data partition:
# mkfs.ext4 /dev/mmcblk1p3
Now we will mount the data and boot partitions so we can work on them in our live environment.
The data partition:
# mount /dev/mmcblk1p3 /mnt
The boot partition:
# mkdir /mnt/boot # mount /dev/mmcblk1p1 /mnt/boot
To install Arch, we will use pacstrap:
# pacstrap /mnt base base-devel
You will probably get PGP key errors. To fix these:
# pacman-key --refresh-keys
With those packages installed, generate an fstab file to define disk partitions:
# genfstab -U /mnt >> /mnt/etc/fstab
With the base system set up, we can use
arch-chroot to enter inside it and run commands.
# arch-chroot /mnt /bin/bash
You will notice the hostname will change. To denote commands run inside this command, I will preface commands with
To set our locale, you need to run:
># nano /etc/locale.gen
Scroll down in the file and uncomment
en_US.UTF-8 UTF-8. Save, quit, and then run:
># locale-gen ># echo LANG=en_US.UTF-8 > /etc/locale.conf
To set our timezone, use:
And note the output. Then use the information to populate the following command:
># ln -s /usr/share/zoneinfo/MY_ZONE/MY_SUBZONE /etc/localtime ># hwclock --systohc --utc
passwd to change the root password.
To be able to boot, we will follow Ifran's tutorial.
First, install grub:
># pacman -S grub efibootmgr
Next, install grub with the 32-bit mode:
># grub-install –target=i386-efi –efi-directory=/boot --bootloader-id=grub_uefi –recheck
And finally, generate the config file:
># grub-mkconfig -o /boot/grub/grub.cfg
exit to exit the installed system, and
reboot to reboot the live iso. On the reboot, go into the BIOS and choose to boot from the hard-drive (the label will most likely be
grub-uefi). If everything was successful, a GRUB screen will pop up and you will be able to boot into Arch and log into your root account. If you boot into emergency mode, you probably messed up the partitioning scheme.
Don't worry, we still have plenty of work left.
Getting WIFI Working
Like before, lines prefixed with
> are inside your install, with
# being reserved for the live usb.
If you boot into your install and try
># ping google.com you'll notice it fails. What gives? Running the command
># ip link shows that the wireless card isn't being recognized (it will show up as
wlan0 if it is). Looks like we need to get some drivers.
Boot back into the live environment, since you can get a connection there. Run
wifi-menu and reconnect to your network. Next, mount your data partition and root into it:
# mount /dev/mmcblk1p3 /mnt # arch-chroot /mnt /bin/bash
Verify you have a connection with
ping and we can now download the drivers we need. First, we need to get
># pacman -S wget
Next, we can download the drivers:
># cd ~ ># wget https://android.googlesource.com/platform/hardware/broadcom/wlan/+archive/master/bcmdhd/firmware/bcm43341.tar.gz ># tar xf bcm43341.tar.gz
This will download the drivers and extract them in your home directory. Next, we will copy the files over:
># cp fw_bcm43341.bin /lib/firmware/brcm/brcmfmac43340-sdio.bin ># cp /sys/firmware/efi/efivars/nvram-74b00bd9-805a-4d61-b51f-43268123d113 /lib/firmware/brcm/brcmfmac43340-sdio.txt
We need to also disable SDHCI-ACPI, but luckily Ifran's blog also has a solution for that:
># nano ~/.startup.sh
#!/bin/sh echo on > /sys/bus/platform/drivers/sdhci-acpi/INT33BB\:00/power/control
Next, to create a service for this:
># nano /etc/systemd/system/startup.service
[Unit] Description=startup [Service] ExecStart=/root/.startup.sh [Install] WantedBy=multi-user.target
Finally, enable that service:
># systemctl enable startup.service
This will allow your install to recognize the wireless card. Since we are here, we will finish setting up the networking piece too. Only a couple pieces left.
First, set your hostname:
># echo MY_HOSTNAME > /etc/hostname
Next, install the packages necessary for
wifi-menu to work on your install:
># pacman -S iw wpa_supplicant dialog
Exit out and reboot:
># exit # reboot
From your install you should be able to see
ip link and use
wifi-menu to connect. Running
ping google.com should give you a result. With WIFI set up, we no longer need our live stick.
Since we no longer have a live environment, I will be dropping the
# useradd -m -G wheel MY_USERNAME # passwd MY_USERNAME
visedo and uncomment this line:
# export EDITOR=nano && visudo
Log out of root and into your user with
logout. From now on you should stay out of your root environment.
There are many choices, but to keep with the low-resource environment, we are going to install XFCE.
First, install the X-server:
$ sudo pacman -S xorg-server
Next, install XFCE itself:
$ sudo pacman -Sy xfce4 xfce4-goodies lxdm
Once that all installs, enable the lxdm service:
$ sudo systemctl enable lxdm
Next, we need to modify the lxdm configuration file to boot into our system our start:
$ sudo nano /etc/lxdm/lxdm.conf
In this file, change:
reboot and you should see xfce appear.
It just works. Minus sound and battery reporting.