EeePC Tweaks
Asus came out with the EeePC, a small linux compatible 900Mhz laptop. with a 2GB, 4GB, or 8GB SSD. This page highlights some of the software modifications that can be done to a linux system, Basically a broad crosssection of performance tweaks, reducing SSD writes, and how to use this laptop to it's fullest. My base system is built using the Linux from Scratch project, which means the instructions below should be relatively distro independant. Keep in mind that your distribution may already use some of these tools, and that these changes would have to be modified to fit what your distribution does.
Kernel:
- linux-2.6.25.4.tar.bz2: Vanilla linux kernel
- EEE .config file
- MadWifi Revision 3366, w/ ar5007 patch: This is the snapshot of madwifi at revision 3366, prepatched with madwifi-ng-r3365.ar2425.20080227.i386.patch. More information is avaliable from madwifi ticket 1679
- linux-2.6.25-eeepc_ata_piix_fix-1.patch: Kernel patch to allow the onboard SSD Drive to run at full speed. Obtained from http://lkml.org/lkml/2008/4/20/283. Merged upstream since 2.6.26-rc1
- atl2-2.0.4.patch.bz2: Kernel patch for atl2 wired ethernet adapter. Obtained from http://people.redhat.com/csnook/atl2/. As of 2.6.26-rc1, it has not yet been merged into the kernel..
- linux-2.6.25-eeepc_linux-base: It is a platform driver (/sys/devices/platform/eeepc/) which supports: - hotkeys - wlan on/off - camera on/off - cardr on/off. Note that the origional patch from asus used the /proc/acpi/asus location for these values. Obtained from linux-acpi upstream. Merged upstream since 2.6.26-rc1.
- linux-2.6.25-eeepc_linux-backlight: This patch adds a backlight class support to the eeepc_laptop driver patch above. Obtained from linux-acpi upstream Merged upstream since 2.6.26-rc1.
- linux-2.6.25-eeepc_linux-fan-hwmon: This patch adds a hwmon interface to control the fan, to the eeepc_laptop driver patch above. Obtained from linux-acpi upstream. Merged upstream since 2.6.26-rc1.
patch the linux kernel with the atl2 Wired Ethernet patch
- patch -Np1 -i ../atl2-2.0.4.patch
- patch -Np1 -i ../linux-2.6.25-eeepc_ata_piix_fix-1.patch
- patch -Np1 -i ../linux-2.6.25-eeepc_linux-base.patch
- patch -Np1 -i ../linux.2.6.25-eeepc_linux-backlight.patch
- patch -Np1 -i ../linux.2.6.25-eeepc_linux-fan_hwmon.patch
- cp ../config-2.6.25.4-2 .config
- cd patch-kernel && ./install.sh ../../linux-2.6.25.4
- make menuconfig
- make &&
- make modules_install &&
- cp .config /boot/config-2.6.25.4 &&
- cp arch/x86/boot/bzImage /boot/bzImage-2.6.25.4 &&
- cp System.map /boot/System.map-2.6.25.4 &&
Kernel parameters
- video=intelfb: This will use the intelfb code. Note that this will not suspend, if you use this option while you are in the console. Suspending still works from Xorg. I would not recommend using this, unless you also use the grub2 patch below to unlock the 800x480 resolution.
- usbcore.autosuspend=1: This will autosuspend usb devices by default.
- pciehp.pciehp_force=1: This forces the use of the PCIE Hotplug system. This is required for enabling/disabling the wifi through the /proc/acpi/asus/wlan.
Power reduction optimizations
lesswatts.org is a webpage maintained by intel, that helps to reduce the power usage of computers while idle. Most of the optimizations listed here were taken from this resource. This is also the home of a utility called PowerTop, a handy tool that can be used to determine what processes are preventing linux from staying in the C3 state.
- uhci_hcd: this causes 20 wakeup's a second. If you compile your kernel as a module, and then blacklist it, You will have the ability to use it when necessary. UHCI is a USB 1.1 driver, to load any devices not USB 2.0 compliant.
- echo 0 > /sys/class/graphics/fbcon/cursor_blink: This will disable the blinking cursor in the console. This causes about 20 wakeup's a second when enabled. Note that this does not cause any wakeup's while Xorg is running.
- echo "vm.dirty_writeback_centisecs=1500" >> /etc/sysctl.conf: This increases the time data can stay in memory before it is written to the harddrive. Remember that since this is a laptop with a limited battery life, you will loose whatever information that is still in memory when the power dies.
- echo "/proc/sys/vm/laptop_mode=5" >> /etc/sysctl.conf: This will enable laptop mode
- mount / -o remount,noatime: This disables noatime support for all files on your root filesystem. atime is the last time a file is read. This will cause less writes to your drive (Allowing the SSD to last longer), and free up some IO cycles. This can be done at boottime, by adding it to your options in /etc/fstab
- echo 0 > /proc/acpi/asus/wlan: This will disable your wireless network device. When active and connected to a network, madwifi prevents the kernel from entering the C3 state (which allows more datterylife). Simply echo 1 to the above file to reenable the device.
- CONFIG_SND_HDA_POWER_SAVE=y & CONFIG_SND_HDA_POWER_SAVE_DEFAULT=10: These are kernel configuration options that will allow your soundcard to suspend itself when it has not been used for 10 seconds. The above kernel configuration kernel already has this enabled.
- echo 0 > /proc/acpu/asus/camera: This will disable your USB Camera. (You can reenable this echo 1 to the above file. The usb camera drastically shortens your batterylife when enabled.
Enabling support for the hotkeys
The ACPI Daemon is a basic utility that
listens for events from /proc/acpi/event, matches them up with a event from
/etc/acpi/event, and runs the shell script. Each file in the /proc/acpi/event folder
has 2 lines.
event=
action=
Please note that as of 2.6.26-rc1 (or the above patches in my kernel section), the files
in /proc/acpi/asus/ have been moved to /sys/devices/platform/eeepc/.
The following events are the ones that acpid can respond to:
- sleep: Triggerd by Function F1 (Sleep). action=echo mem > /sys/power/state
- hotkey ATKD 00000010: Triggered by Function F2 (Wireless), when wireless is disabled. action=echo 1 > /sys/devices/platform/eeepc/wlan
- hotkey ATKD 00000011: Triggered by Function F2 (Wireless), when wireless is enabled. action=echo 0 > /sys/devices/platform/eeepc/wlan
- hotkey ATKD 00000020 to hotkey ATKD 0000002f: Triggered by Function F3 and F4 (Brightness). The asus acpi module automatically adjusts the brightness, requiring no further effort on behalf of the user.
- hotkey ATKD 00000030: Triggered by Function F5.
- hotkey ATKD 00000012: Triggered by Function F6 (Taskmgr).
- hotkey ATKD 00000013: Triggered by Function F7 (Mute). action=amixer -q setMaster toggle
- hotkey ATKD 00000014: Triggered by Function F8 (VolumeDown). action=amixer -q set Master 1- unmute
- hotkey ATKD 00000015: Triggered by Function F9 (VolumeUp). action=amixer -q set Master 1+ unmute
- lid: Triggered when the laptop is closed. The asus acpi module automatically dims the screen.
- power: Trigerred when the power button is closed. action=shutdown -t1 -a -h now
- hotkey ATKD 00000050: Triggered when the AC Adapter is plugged in.
- hotkey ATKD 00000051: Triggered when the AC Adapter is unplugged.
800x480 / 1024x600resolution in the console
Getting the 800x480 resolution working in the console takes some effort. You have to set the kernel to use (via vga=) one of the modes listed in the videobios. 800x480 is not one of the valid choices. 915resolution was designed for this purpose, but the intelfb driver only supports changing the resolution with a VGA monitor. All others have to select a mode (via the vga= argument) at boottime.
Enabling BootBooster
BootBooster allows a system to start [with a 1/2 second delay] the MBR of the harddrive. To enable this feature, you must create a partition for it to use, and change the type to 0xEF. The bios can still be reached by hitting F2 as it starts. This partition seems to be used to cache the results of the bios post, as well as containing a copy of the bios & video bios [seen by using strings on the partition]. As far as I can tell, this partition has nothing to do with Intel's EFI (Especially since it is populated by the bios), and just reuses the EFI partition id. Thanks to [mbm] on the eeepc freenode irc channel for your help.
The fileformat of this partition appears to be a memory dump (Probably created right after the bios post has been complete). This memorydump starts at the 0x200 address.
Links:
- EEEUser: a user driven community for discussion & modifications to the EeePC.