Ubuntu (or other Linux) on the Asus Transformer Book T100


This post is now out of date — see the latest update, here

The T100 is a nice little convertible tablet/netbook.

My aim is to get a “perfect” Ubuntu installation on the T100, such that it can be used successfully as a daily machine in both netbook and tablet modes.

GLXGears in tablet mode

GLXGears in tablet mode

Unfortunately Linux support right now is quite rudimentary, and installing it requires us to jump through a few hoops. The situation is improving rapidly however. So I will keep updating this How-to as new drivers become available and things improve. See the latest update.


Eventually I expect hardware support for the T100 will be excellent, but we are not there yet. In order to get the best support possible, we will be using bleeding-edge builds and the latest Linux kernels. If you’d just prefer an easy life, come back in October and just install Ubuntu 14.10.

That said, this little convertible is a lovely machine, and Ubuntu/unity works very nicely on it — finally Unity has a purpose! The more people get on for the ride now, the quicker we can test and iron out bugs.

*** This post will constantly be updated as in-kernel support improves ***

Current status (updated 23/03/2014)

I’ll update this whenever I manage to get new things working. I will only add items to the How-to below that are confirmed to work well.

  • Graphics: Working with accelerated (3D) graphics 7/10
  • Wifi: Working, but often drops connection [working on improving this] 6/10
  • Touchscreen: Working, with multi-touch out of the box 10/10
  • Sound: Working, with patches 8/10
  • SD card reader: Working, some configuration needed (thanks akira) 9/10
  • Battery monitoring: Working, with patches 8/10
  • Tablet keys (Volume up/down etc): Not yet working 0/10
  • Power management (Suspend/resume): Not yet working 0/10
  • Orientation sensor: Not yet working [currently testing] 0/10
  • Backlight & ambient light sensor: Backlight not adjustable. Light sensor works with custom driver 5/10
  • Touchpad: Working, no multitouch yet 8/10
  • Shutdown / reboot: Working, with patches 9/10

1. First steps: Preparing for the Ubuntu Install

First things first, update using Asus LiveUpdate to the latest “BIOS” available. At the time of writing, that is v304. Do any backing up of Windows / recovery partitions. I’ll leave the details of that up to you.

Before we attempt to boot Linux on the T100, we need to do some preparation, so start in Windows. Download the latest daily AMD64 build of Ubuntu 14.04 from here.

Download the Rufus USB bootable image creator, and “burn” your downloaded ISO to a spare USB stick. In Rufus, for “Partition scheme and target system type”, choose “GPT partition scheme for UEFI computer”. For “File System”, choose “FAT32″, and leave the rest at default. At the bottom, check “Create a bootable disk using: ISO Image” and select your downloaded Ubuntu image, then hit “Start”.

When your USB stick is ready, close Rufus. It should now be browseable in Windows. Browse to the EFI\Boot directory, and place this bootloader (named bootia32.efi) there. This bootloader was compiled from source using the latest Grub2. If you don’t trust random downloaded files from the Internet (and you shouldn’t), you can find the instructions for building it yourself here.

2. Booting the Live Image

Now, insert the USB stick and reboot to the firmware (BIOS). You can do this in Windows by holding shift when pressing “restart”, then touching Troubleshoot → Advanced Options → UEFI Firmware Settings → Restart.

Once there, disable SecureBoot, then visit the boot options, and ensure the USB stick is the first in the list.

Press F10 to save settings, and after a few seconds you will be in the GRUB bootloader. Before the timeout, immediately hit CTRL-ALT-DEL. This will reboot the computer again, but this time you will have the laptop’s native resolution (rather than being stuck at 800×600 from the “bios”).

In the GRUB menu, highlight “Try Ubuntu”, and press “e” to edit it. In the editing screen, scroll down to the command line options, where it says “quiet splash”. Delete “splash” and replace it with:
video=VGA-1:1368x768e reboot=pci,force

Then press F10 to boot. You should get all the way to the Desktop.

3. Installing the distro

Click the “Install Ubuntu” desktop icon to install Ubuntu permanently.

The partitioning scheme you choose is up to you — but you will need to preserve the EFI partition, so don’t just partition the entire disk for Ubuntu.

In addition to the EFI partition, I prefer separate /, /home and /boot mount points; but that is up to you. You could squish down the Windows partition and created the additional partition(s), or just delete the Windows partition altogether if you don’t need it.

When done, reboot, leaving the USB stick in.

4. First boot

Ubuntu won’t boot yet. We’ll need to compile our own bootia32.efi to use with Grub. To do that we really need a wireless connection. So we’ll boot manually, fix up wireless, and fix Grub.

Boot back to the Grub welcome screen on the USB stick. Hit ‘c’ to drop to a Grub command line.

You’ll need to provide Grub with the path to your kernel and initrd to boot. First, the path to the kernel:

linux (hd2,gpt5)/boot/vmlinuz-3.13-xxxx root=/dev/mmcblk0p5 video=VGA-1:1368x768e reboot=pci,force

Here, (hd2, gpt5) refers to the fifth partition on the third disk (Partition numbering begins at 1 and disk numbering begins at 0). This will vary depending on how yo uinstalled and your T100 model. On my 32GB model, Grub assigns the USB stick as hd0, the read-only recovery flash chip as hd1, and the main internal flash as hd2. gpt5 is the fifth partition, but it will depend on how you installed.

Fortunately, grub has good auto-completion features, so you can hit twice as you type, and grub will list possible completions for you — just keep trying until you see the various vmlinuz kernels.

The root=/dev/mmcblk0p5 will also depend on the partition you installed to. It will be your root partition. Unfortunately this can’t be auto-completed, so if you can’t remember your partition setup, you’ll need to try by trial and error.

To complete the line, press Enter.

Then you need to specify the location of your initrd. This is easy, it’s in the same place as the kernel:
initrd (hd2,gpt5)/boot/initrd-3.13-xxxx

Then Enter.

Then boot with:

With luck after hitting Enter, you’ll boot through to Ubuntu. If not, don’t be disheartened — keep trying.

5. Enabling wifi

To get further, we’ll need wifi. However internal wifi on the T100 isn’t terribly reliable under Linux yet. If you have access to another wifi dongle, you might want to try that until you’re fully set up.

The driver is already included, but it needs some firmware and a copy of your system’s wifi nvram:

  • Grab the Wifi firmware here (from the Linux-wireless repository). Copy it to /lib/firmware/brcm/brcmfmac43241b4-sdio.bin
  • The NVRAM is difficult to get right now, as 32-bit EFI runtime services aren’t yet available on 64-bit. But you can use my NVRAM — get it here and copy it to /lib/firmware/brcm/brcmfmac43241b4-sdio.txt

You’ll now need to reboot using the same procedure again, and wifi should be working.

However, I found wifi performance to be very poor — there are some bugs in the driver. This is improved somewhat with the latest kernel, which we will upgrade to in a later step. I managed to improve performance somewhat by using the NVRAMs from other platforms, and splicing in some of the missing variables. You can see my tries here. In all cases, copy them to /lib/firmware/brcm/brcmfmac43241b4-sdio.txt , and reboot or unload/reload the wifi driver:

sudo modprobe -r brcmfmac
sudo modprobe brcmfmac

If you find a firmware/nvram combination that works really well, please share.

6. Completing the installation

We can’t keep rebooting like this… so let’s fix Grub. This assumes you now have a working Internet connection.

We’ll need some build tools — install them:

sudo apt-get update && sudo apt-get install git bison libopts25 libselinux1-dev autogen m4 autoconf help2man libopts25-dev flex libfont-freetype-perl automake autotools-dev libfreetype6-dev texinfo ia32_libs build_essential

Then get the Grub source:
git clone git://git.savannah.gnu.org/grub.git

Now build it:

cd grub
./configure --with-platform=efi --target=i386 --program-prefix=""

And install to efi:

cd grub-core
sudo ../grub-install -d . --efi-directory /boot/efi/ --target=i386

This will create a directory, ‘grub’, in your EFI partition.
We want to copy the grubia32.efi from there to the location Ubuntu created during installation:

cd /boot/efi/EFI
sudo cp grub/grubia32.efi ubuntu/grubx64.efi

This should be enough to allow you to boot from the “ubuntu” option in your EFI firmware.

Before you boot, let’s add the default command line options to Grub.

Open /etc/default grub in a text editor:
sudo nano /etc/default/grub

And edit the GRUB_CMDLINE_LINUX_DEFAULT exactly as we did before. When done, hit ctrl-o to save then ctrl-x to exit. Then, to update Grub:
sudo update-grub

Congratulations! you should now be able to boot/reboot directly to the Ubuntu desktop!

7. Upgrading to the bleeding edge to improve hardware support

There are still a lot of things to get working. The best way to improve hardware support further is to use the latest development branches of the kernel.

Unfortunately (as at the time of writing), even the latest development Linux kernel (3.14-rc5) lacks some key hardware support for Baytrail tablets. But we can improve that by pulling in latest patches for sound. We’ll also compile in a new experimental feature for accessing 32-bit EFI services from a 64-bit system, as we need that for tools like efibootmgr to work. Finally, we’ll pull in the latest wireless fixes and the latest power management changes. We need to power management changes for our battery patch.

I recommend you compile this on a fast desktop computer with a decent network connection. You could do this on your tablet, but it would be extremely slow. For the following instructions, I assume you’re using a recent 64-bit Ubuntu on a desktop. If you’re using 32-bit, you’ll have to change the instructions to cross-compile — I’ll leave that up to you (and Google).

On your compiling machine, install the packages you’ll need to build a kernel:

sudo apt-get install git build-essential fakeroot crash kexec-tools makedumpfile kernel-wedge libncurses5 libncurses5-dev
sudo apt-get build-dep linux-image-$(uname -r)

Then create a working directory, step into it, and download the sources you’ll need:

mkdir kernel
cd kernel
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd source
git remote add sound git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
git remote add efi git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git
git remote add pmfixes git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
git remote add wifinext git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git
git fetch sound
git fetch efi
git fetch pmfixes
git fetch wifinext

Then merge the updates from sound, efi mixed-mode, power management and wireless onto the mainline kernel:

git merge sound/topic/intel
git merge efi/efi-for-mingo
git merge pmfixes/linux-next
git merge wifinext/master

There are still some patches we need to apply. Step back and create a patch directory, and download some patches into it:

cd ..
mkdir patches
git clone https://github.com/jfwells/linux-asus-t100ta.git

Now apply the patches:

cd ../source
git apply ../patches/linux-asus-t100ta/patches/*

They should all apply without error.

Now we’re almost ready to compile. Before we do, we need a .config file to tell the kernel build system what parts we want to compile. Start by copying over the current one from your T100. You’ll find it at /boot/config-xxxxxx , where xxxxxx is the version of the currently running kernel. Grab it and copy it to the kernel/source directory you’ve just been working in. Rename it to .config .

Now we need to update the config:

make oldconfig

This will prompt you to set configuration for the things that will be newer in this kernel. Select ‘m’ to compile relevant drivers as a module where offered (in particular all the ‘soc’ sound options). Select ‘Y’ to enable EFI mixed mode where offered. Leave the kernel debugging options off.

When done, we’re ready to compile. We can just do it the quick and dirty way:

make clean
make -j8 deb-pkg

The above assumes this is on a quad-core processor with hyperthreading (hence the ‘-j8′, or 8 simultaneous processes). Reduce this number appropriately if you have less cores.

This will take some time (anywhere from 20 minutes to over an hour. If you’re doing it directly on the T100, all bets are off – it could take all day.

When complete, you’ll have a set of .deb packages in the directory above (i.e. in the “kernel” directory). We need “linux-headers-xxxxx.deb” and “linux-image-xxxxx.deb”. Choose the smaller of the linux-image packages, the one without debug symbols. Copy them over to your T100.

On the T100, install the new kernel with:

cd <folder where you saved the .debs>
dpkg -i ./*.deb

Then reboot!

8. Sound

Sound won’t yet be working. First, you’ll need some more firmware. For now, you can grab it from ChromiumOS, here. Unpack the archive and copy the files to /lib/firmware/intel .

The drivers are in a bit of a raw state — they expose about a hundred oddly-named mixer and DSP devices to ALSA. We can set some defaults. Grab the defaults file here, and copy it to /var/lib/alsa/asound.state .

Reboot, and force-load the state file into alsa with :
sudo alsactl -f /var/lib/alsa/asound.state restore

For me, my sound still sounds pretty awful. I need to mute the distorted right channel in alsamixer, then at least it is bearable. I also find the CPU runs a bit hot with sound enabled. Let me know if you have more luck.

* please be careful — my sound is permanently distorted, even in Windows now; keep the volume low when testing the various options *

9. SD card reader

The SD card reader works with newer kernels, but the sdhci module needs some configuration. Create a new file:

sudo nano /etc/modprobe.d/sdhci.conf

Then add the following:

options sdhci debug_quirks=0x8000

ctrl-o then ctrl-x to save and exit, then:

update-initramfs -u -k all

Then reboot and the card reader should be working.

9. Other drivers

So far, the only additional driver I have working is the light sensor. Please download and test my driver here.

9. Other scripts

I have made some additional small scripts to improve usability.

Dock scripts: These enable/disable the Onboard on-screen keyboard when you undock/dock the tablet. Set up the onscreen keyboard first in System Settings → Accessibility, then the scripts will enable/disable they keyboard for text fields.

Rotate script: This will rotate the screen and touchscreen when run. You can place the desktop entry on your desktop. We can connect the orientation sensor to this later, once that is working.

Workable... for now.

Workable… for now.

471 thoughts on “Ubuntu (or other Linux) on the Asus Transformer Book T100

  1. john

    okay, i still am having problems with wifi, im using my phone as a usb tether. the wifi keeps asking for password when i use the right password etc. i updated the MAC and still am having the same problem.

  2. Realms

    John, its pretty much says what it means, you attempted to run a git command in directory with no git repository (if you not sure what this means, google will show you)

  3. Julien

    First of all thanks for this blog!

    I have a T100TA and I have a few errors I can’t manage to work around.

    First, I can’t manage to get wifi working, the modules seems to load correctly in syslog but the card doesn’t appear in ifconfig nor in lsusb. I followed the instructions, using nvram3.txt and renaming it to brcmfmac43241b4-sdio.txt. By the way a comment by brainwreck suggested to rename it to brcm43241b4-sdio.txt – which one is correct?

    Second, I get some weird errors at boot:
    Mar 30 05:25:00 transformer kernel: [ 55.234960] mmcblk0rpmb: timed out sending r/w cmd command, card status 0×400900
    Mar 30 05:25:00 transformer kernel: [ 55.237095] mmcblk0rpmb: timed out sending r/w cmd command, card status 0×400900
    Mar 30 05:25:00 transformer kernel: [ 55.239212] mmcblk0rpmb: timed out sending r/w cmd command, card status 0×400900
    Mar 30 05:25:00 transformer kernel: [ 55.241343] mmcblk0rpmb: timed out sending r/w cmd command, card status 0×400900
    Mar 30 05:25:00 transformer kernel: [ 55.243460] mmcblk0rpmb: timed out sending r/w cmd command, card status 0×400900
    Mar 30 05:25:00 transformer kernel: [ 55.245590] mmcblk0rpmb: timed out sending r/w cmd command, card status 0×400900
    Mar 30 05:25:00 transformer kernel: [ 55.245668] end_request: I/O error, dev mmcblk0rpmb, sector 8064
    Mar 30 05:25:00 transformer kernel: [ 55.245732] Buffer I/O error on device mmcblk0rpmb, logical block 1008
    Mar 30 05:25:00 transformer kernel: [ 63.623777] mmcblk0rpmb: error -110 transferring data, sector 8176, nr 8, cmd response 0×900, card status 0xb00
    Mar 30 05:25:00 transformer kernel: [ 63.625882] mmcblk0rpmb: retrying using single block read

    It repeats seamingly randomly between 2 and 20 times, and blocks the boot process. Isn’t mmcblk0rpmb the SD card reader? No card is inserted while this occurs.

    Any help appreciated!

  4. Realms

    Julien, exact same issue as me, no wifi (no cards found) and same errors posted during bootup, by any chance did you install the latest broadcom drivers from Asus website under windows?

    It also isnt consistent in booting, sometimes it works, other times it simply hangs repeating: mmcblk0rpmb: “error -110 transferring data, sector 8176, nr 8, cmd response 0×900, card status 0xb00″ until forced reboot.

  5. Julien

    Yes, I installed all the Asus updates before installing Ubuntu, which included broadcom drivers. So you think it might be the culprit? Strange that newer drivers make things worse for Ubuntu, and I guess there is no coming back and installing older drivers?

  6. Andrew

    Having issues just getting past the install. Secure boot is off and the usb drive is listed as first boot device. But I keep booting to the windows boot loader. if I choose boot uefi usb from the windows boot loader the tablet reboots and goes back thru windows boot loader. Any ideas?

  7. john

    when i change directories to source on step 7 I can’t because it is not listed in the kernel directory, where do i create the source directory?

  8. cato

    hey can anyone clarify step 7 please? i have the directory in the home folder but the rest is over my head and i cannot find any help online

  9. 路人 乙

    Could I translate your article to Chinese(T) ,add some photos and put to my blog?I will Indicate the source.
    After your agree I will write the “Website” field in Reply

    The mmcblk0rpmb problem,in there
    , you must choose the partition you installed,not mmcblk0!or, in “FIRST BOOT” this chapter, you will into mmcblk0rpmb timed out Nightmare!

    and admin,could you moderation my reply?

    路人 乙 on March 16, 2014 at 12:28 am said:
    Your comment is awaiting moderation.

  10. Julien

    @ 路人 乙
    Thanks, I might indeed have skipped checking where the boot loader was installed when repartinioning the disk.

  11. admin

    @cato: Copying and pasting the commands should pretty much just work I think, if you run them on a 64-bit Ubuntu machine.

  12. Julien

    I reinstalled Ubuntu from start, paying attention this time to choose the correct partition for the installation of the boot loader, but I still get the looping I/O errors on mmcblk0rpmb (the log is in a post above).

    I’ll try downloading a newer build of Ubuntu and see if it gets better, but I’d appreciate any clue about that problem.

  13. John

    copy and pasting did not work. Step seven didn’t work after this part
    mkdir kernel
    cd kernel
    git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
    when I
    cd source
    it said it didnt exist or something, so i tried a few different things and cd to kernel.
    so “cd kernel” and started the other parts and it just didn’t happen..

  14. John

    while doing a fresh install with todays daily ISO, i get COULDN’T TERMINATE EFI SERVICES…..
    whats up with that

  15. icy05

    Hi thanx for the info, i got to boot ubuntu but cant get wifi working and have that same
    mmcblk0rpmb error. with wifi… drivers have loaded but cant see it in ifconfig.
    if you could go into detail of what needs to be renamed and done that would be great

  16. icy05

    thanx Realms good news is i got wifi working but not connecting, on the bad side still getting that error even with the sdhci.debug_quirks=0×8000.
    would the problem be that i installed the bootloader in mmcblk0p3
    instead of mmcblk0??

  17. icy05

    Now it won’t let me boot that error stops it….. think ill wait for more support unless theres a way to stop it until I patch it??

  18. Adrian

    Shutdown command it’s work?
    I have now kernel 3.15.0-rc1 and it still doesn’t work :/
    Battery monitor also doesn’t work.

  19. Kirill

    Good day!
    Wifi works on 100%.
    I installed kubuntu 14.04 beta2, download and copy brcmfmac firmware from this post (https://github.com/jfwells/linux-asus-t100ta/tree/master/nvram/lib/firmware/brcm), made file /etc/modprobe.d/sdhci.conf and installed new kernel 3.14
    #sudo modprobe brcmfmac
    and connect in gui – no drops connection, stable!
    with kernel 3.13 – only “driver registered”…
    with kernel 3.14 rc7+ (from this post) – many errors after driver load
    with kernel 3.14 from kernel.ubuntu.com – no error, stable conection

  20. Realms

    For me, the latest daily build of ubuntu 14.04 will not install, the exact reason is unknown due to the error message not being translated to english yet… so a window opens containing ??? ??? This window pops up just before it would normally show the partitioning options.

  21. Q

    In 6 point is probably a bug. I am doing so as written but does not detect me any drive. Only when I move bootia32.efi to the “ubuntu” and I change his name to “BOOT” it boots but appears only grub console.

  22. jd

    run into some issues
    unable to locate package ia32_libs build_essential

    Also when running autogen.sh got autoreconf:command not found.

    Did apt-get update but still the same

    any work around for this?


  23. i am have T100TA too, 64GB, and i do it in ubuntu ,but i can’t install WiFi, i am a china ,i am english is poor ,sorry, can you help me?

  24. baceolus

    In step 2 when i enter the GRUB loader the whole screen is filled with question marks in frames. There is a menu. I know it because i can choose 1 of 4 options but it seems that all characters are replaced with theese marks of question. What should i do?

  25. rna023

    Does the atom professor on t100ta support 64bit linux fully ?
    So far ,tablets on sale with that professor are all preinstalled a windows 8 32bit .

  26. rna023

    The professor running 64bit operation system may be heater than 32bit on T100. You’d better have a few hours full load test like prime95 ,gputest.geekbench to verify the reliability.

  27. brainwreck

    Hey all

    I see things are progressing well…

    I decided to do another check so i did a full reinstall and followed the guide again and everything worked fine for me

    one thing that will help with the wifi issues is the in the kernel boot options you want to have the following

    video=VGA-1:1368x768e reboot=pci,force sdhci.debug_quirks=0×8000

    this will load the sdhci interface that should fix the wifi issues and be able to see the card

    if you use the kernel supplied by admin here the wifi card will appear to be missing until you add the the above to your


    then update-grub

    then reboot and your wifi will be working

    @Admin – tried to install all the patches alongside the new 3.15.0_rc2 kernel and some of the patches are already built in the latest kernel so should perhaps be removed?

    i think it would be best to advise people to use your kernel insead of compiling from source…

    @everyone else
    if you do decide to compile from souce in this what i do

    in my Home folder

    mkdir kernel
    cd kernel
    then git clone the kernel as above… this will make a folder called ‘linux’

    this is your ‘Source’ folder as described above

    on the step where you apply the patches i do this

    in the ‘linux’ directory

    git apply patches/linux-asus-t100ta/patches/*

    some of these will already be in the kernel from the error messages i got

    hope this helps!

    we will keep cracking as this… :)

  28. brainwreck

    Well i have been working with this somemore and i saw over on XDA someone using Wicd network manager, and this seems to be much for stable than gmome-network-manager…

    I uninstalled gnome-network-manager and i am trying out Wicd to see if there is any difference in stability on 3.14.0-rc7…

    will keep you posted…

  29. brainwreck

    Did some more work and got bluetooth working

    typed the following in console
    tabletwreck@tabletwreck-T100TA:~$ sudo hciattach -p /dev/ttyS4 bcm2035 921600 flow
    [sudo] password for tabletwreck:
    Baud rate parameters: DHBR=0×55,DLBR=0xff
    Device setup complete
    tabletwreck@tabletwreck-T100TA:~$ hciconfig
    hci0: Type: BR/EDR Bus: UART
    BD Address: 4C:5B:84:ED:51:B9 ACL MTU: 1021:8 SCO MTU: 64:1
    RX bytes:610 acl:0 sco:0 events:30 errors:0
    TX bytes:392 acl:0 sco:0 commands:30 errors:0

    got my phone to connect and laptop

    dont have a bluetooth keyboard or mouse so others will have to test that

    now just need to get it loading at boot.. so suggestions are welcome

    glad i could Help…

  30. brainwreck

    got bluetooth to load on boot on kernels 3.14.0-rc7 and 3.15.0-rc2..

    open terminal and type

    sudo nano /etc/rc.local

    the add the following line before Exit 0

    should look like this:
    hciattach /dev/ttyS4 bcm2035 921600 flow
    Exit 0

    the ctrl+o and ctrl+x

    reboot and bluetooth icon should appear in the system tray in upper right corner of ubuntu

  31. wangyiling

    Hey all:
    l’m a chinese.I just got a test 3740D pad with android and win8.1 dualboot-os. l can use A PE to show the Partitions of the pad by pictures. I think this will give some help

  32. John

    Hey, where is this “kernel” that is suggested? I see the part where we compile, but i see people mentioning a kernel that I guess is pre-compiled…… also how would i install it?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>