Monthly Archives: June 2013

Ubuntu on Pentium M without PAE

Update 2014-05-25: I have now tested the new forcepae feature in 14.04 (new post) myself and it works just fine.

Update 2014-04-27: Ubuntu 14.04 has been released and it works almost “out of the box” for Pentium M CPUs that have PAE but fail to advertise it properly. This seems to be very relevant now that XP is out of support and many owners of fine laptops will try to find an alternative to Windows XP. If this is your situation and you are completely new to Linux/Ubuntu I suggest you give Xubuntu a try first, and if you find it too heavy or slow, try Lubuntu. You dont have to install it to try it – you can run it “Live” from a DVD/USB-memory – but it will run faster and better if you install it on your hard drive. Finally, the PAE issue: The instructions are found in the section “Installing on Pentium M laptop (with forcepae)” of the official Ubuntu PAE page. Those few lines relevant to you are:

The ISO image will fail to boot (“This kernel requires the following features not present on the CPU: pae.”) If a few lines above this text there is a warning “WARNING: PAE disabled. Use parameter ‘forcepae’ to enable at your own risk!”, then you can boot by pressing tab at the boot screen and appending the kernel parameter “forcepae” after the “– “.

You should not need to read or understand anything else from that page. I do not have any such hardware available at the moment, so I can not write a guide myself. You are welcome to comment about your success/failure here.

Update 2014-03-13: It seems some progress has been made and this should not be a problem with Ubuntu 14.04 (which should be on the way soon). There are already daily builds of Lubuntu, Xubuntu and Ubuntu for the upcoming 14.04 that are supposed to work (unclear about Kubuntu and the others). I have not tested this myself yet – currently no such hardware available. The boot is supposed to fail with a message like “kernel flag forcepae is required”, and when adding that flag at boot time things should proceed normally.

Update 2013-12-26: I successfully upgraded 13.04 with FakePAE installed to 13.10. No warnings, no errors, no problems, no hacks. And FakePAE still hacks /proc/cpuinfo correctly.

This may be relevant to you if you want to install (or upgrade to) Ubuntu 12.10 or 13.04 on a computer that reportedly lacks PAE support. It only applies to x86/32-bit AMD/Intel CPUs and Ubuntu versions.

A little background first. 32-bit computers can handle up to 2GB of RAM perfectly; in principle, if you have up to 2GB you neither need PAE or 64-bit CPU/OS. If you have more than 2GB or RAM, but not more than 4GB you may have some benefits of PAE or 64-bit CPU/OS. If you have more than 4GB or RAM, you should have 64-bit CPU/OS, or if your CPU does not support it, use PAE to make use of more than 4GB RAM.

PAE makes the CPU/OS handle 64GB of RAM instead of 4GB (the normal 32-bit limit), but applications still only see a maximum of 4GB each (in practice, most often not more than 2GB).

Until 12.04 this was not an issue for Ubuntu users. There was both a PAE and a non-PAE 32-bit kernel available for x86 ubuntu, and a serparate 64 bit version of Ubuntu. But beyond 12.04, there is no longer a non-PAE kernel. This means that if you have an x86 CPU that lacks PAE support, you can not run Ubuntu beyond 12.04 (unless you find/build a non-standard kernel).

However, there are CPUs, especially Pentium M CPUs that have perfect PAE support, but they do not advertise it properly – and Ubuntu refuse to try to run the PAE-kernel at all (but it works perfectly).

Now, if you are still reading and you think this is relevant information to you, you should first read this article. It is written by the people who know stuff and it tells you what to do.

The rest of my article will describe some details about my experiences when I tried to upgrade a Pentium M computer from 12.04 to 12.10.

First, this is my CPU (as it reports under 12.04 non-PAE kernel). It denies PAE support (pae not present under flags).

$ cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 9
model name	: Intel(R) Pentium(R) M processor 1400MHz
stepping	: 5
microcode	: 0x5
cpu MHz		: 600.000
cache size	: 1024 KB
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 2
wp		: yes
flags		: fpu vme de pse tsc msr mce cx8 mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 tm pbe up bts est tm2
bogomips	: 1194.24
clflush size	: 64
cache_alignment	: 64
address sizes	: 32 bits physical, 32 bits virtual
power management:

I only have 768Mb of RAM – I dont really need PAE, but I have to have it to run Ubuntu 12.10 or 13.04.

I first tried to install 13.04 from scratch – the installation immediately failed because my (false) lack of PAE. So I decided (knowing that I would probably run into some problems) to upgrade from 12.04 to 12.10. Now, the upgrade was mostly fine, but, the kernel was not upgraded from 3.2 to 3.5, all packages were not completely set up, and there were broken dependencies. But the computer was working.

So I tried to install fake-pae using the method in the article. However, that did not really work – probably because of my broken dependencies apt-get didn’t want to do anything before the problems were fixed. So I downloaded the fake-pae package manually, unpacked it, and had a look at it. The magic trick is (as root):

# cat /proc/cpuinfo | sed 's/flags\t*:/& pae/' > /tmp/cpuinfo_pae
# mount -o bind /tmp/cpuinfo_pae /proc/cpuinfo
# mount -o remount,ro,bind /proc/cpuinfo

You can run this yourself (without installing/downloading fake-pae). I did, and then the kernel upgrade finally worked, the dependency problems were solved, and both me and Ubuntu were happy again.

Now, with dependency problems solved, fake-pae installed perfectly, and this is my CPU (now running 12.10):

$ cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 9
model name	: Intel(R) Pentium(R) M processor 1400MHz
stepping	: 5
microcode	: 0x5
cpu MHz		: 600.000
cache size	: 1024 KB
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 2
wp		: yes
flags		: pae fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 tm pbe up bts est tm2
bogomips	: 1194.22
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 32 bits virtual
power management:

Notice, address sizes is now 36 bit physical – this is real information from the PAE kernel. Also not the pae-flag; which is the result of fake-pae.

You should keep fake-pae installed, and hopefully you will be able to upgrade your computer in the future.

A few final words
I find this design choice of Ubuntu odd. I mean, computers with more than 4GB of RAM should use 64-bit version of Ubuntu anyway. And seriously, how many 32-bit systems have more than 4GB or RAM anyway? I think it would make more sense to not support PAE or more than 4GB or RAM for x86, than to abandon non PAE-CPUs. But probably there are companies (Ubuntu customers) out there running top modern 64-bit i7-CPUs in x86 PAE mode, rather than in x64 mode, for reasons I do not understand. Anyway, since this problem applies to a lot of Pentium M CPUs, the PAE check probably makes more Pentium M upgrade fail than it protects Pentium PRO and earlier systems.