I share some real-life experience about running linux on my Ainol Novo 7 Elf, a 1Gb-ram, AllwinnerA10 tablet.

Micro-sd layout

Not wanting to mess with its internal nand (I have no idea of Android technicalities, so better not to fiddle with it), I limited myself to booting linux from mmc (micro sd). In which case the mmc layout is always the same:

1) the first Mb contains u-boot with its spl (dd bs=1024 count={8,32}) and the partition table 2) first (small) vfat partition adjacent to it (i.e., typically starting at sector 2048) containing script.bin, evb.bin and uImage, followed by 3) the (big) ext2 partition (which will be mounted as the rootfs) containing all the remaining stuff.

All the contents to be written on mmc can be supplied either via a monolithic image or in split components corresponding to the three points above. If you compile the kernel by yourself the big partition can be populated in two steps: first with the user programs (typically got canned from an external source, like linaro), and then filling /lib/modules and /lib/firmware with your custom built drivers.

Tested

I tested many u-boot/GNULinux combinations, both compiled by me and pre-built. Most of them worked, for example:

  • http://dl.linux-sunxi.org/nightly/2012.07.23/mele-a1000_hwpack_2012.07.23.7z + linaro-precise-alip-20120525-143
  • {hno-uboot-allwinner-8d13bc8 + amery-linux-allwinner-sunxi-6601f81, both self-compiled, or mele-a1000_hwpack_2012.06.13} + {linaro-precise-ubuntu-desktop-20120524-177, linaro-precise-nano-20120626-237, linaro-precise-alip-20120525-143}
  • lubuntu-desktop-12.04-3-720p-1GB-miniand.com
  • hno-uboot-allwinner-8d13bc8 (compiled by me) + armhf debian wheezy found at http://forum.doozan.com/read.php?6,8899
  • Debian.Sid.armhf.armv7l.sun4i.4GB-SDcard found on doozan.com
  • gentoo-armhf found on https://www.miniand.com/forums/forums/2/topics/156 (http://www.cs.uwaterloo.ca/~dnicoara/{gentoo-armhf.tar.bz2, boot.tar.bz2})
  • Puppy Lui image mele-sd-4gb-lui-5.2.90.img, see http://bkhome.org/blog/?viewDetailed=02823
  • 23e5456 kernel (both straight- and cross-compiled) + Debian Wheezy LXDE armhf rootfs found at http://forum.doozan.com/read.php?6,8899 + suzuke's 1gb hacked u-boot found at https://www.miniand.com/forums/forums/2/topics/82

Usually, combinations of working u-boot, kernel and rootfs work as expected.

Mixed facts

  • Depending on how u-boot is compiled, you need a file named script.bin or evb.bin in first mmc partition. For brevity, I will refer to them as fexbins. To simplify matters, I usually have both files with identical contents on that partition. The only other file needed in this partition is the kernel (uImage).

  • Since most of the pre-built distros are for the mele, you would have hdmi output. I found that usually I can get lcd output by simply substituting fexbins with the stock script.bin found on /dev/nanda partition of my tablet. Btw, the corresponding decompiled fex is now included in https://github.com/cnxsoft/a10-config.

  • For the same reason, you usually get 512Mb ram. You have to use suzuke's hacked u-boot to get 1Gb, but there are issues (see below).

  • Not owning a serial console, I can have some very limited diagnostics by 1) placing my ear close to the built-in speaker. Holding down power button for 2/3 seconds on a turned off tablet I can hear a click. Holding down power button on a running tablet for 6/7 seconds I can hear a MUCH LESS AUDIBLE click. This way I can somehow safely know the state of my machine, since it doesn't come with any led. 2) plugging a device with a led (like an usb stick); it will flash lights almost immediately on a successful boot. 3) looking at /tmp/{dmesg,syslog,kern.log} files on the mmc's second partition. They are created only when linux takes control of the machine, and at a fairly advanced state: they are logged from kernel internal buffer by some third party daemon like klogd or syslogd, which therefore needs to have been launched.

  • The diagnostics above are especially useful because mmc boot is erratic: most of the times two or three attempts are needed before the mmc boot triggers successfully. micro-sd's can have unpredictable behaviour, see also raspberry-pi.

  • To have my usb mouse working, I needed to enable menuconfig item "/dev/hidraw raw HID device support" when compiling kernel. In the same menuconfig screen there is a very similarly named item disabled, maybe it would have similar effects. I guess this is the reason why I couldn't get mouse working on some pre-compiled images.

  • To get my touchscreen working (emulated as a one-button mouse in Xorg) I had to disable multitouch in goodix_touch.h before compiling kernel modules, as suggested in http://www.miniand.com/forums/forums/2/topics/138. I didn't try compiling it as a kernel built-in. Of course, you have to substitute goodix_touch as appropriate if your tablet comes with a different touchscreen chip, which seems to be the case even for more recent novo7 elves.

  • Suzuke 1GB ram hacked u-boot works for me only with 23e5456 kernel; it does not work with latest 6601f81, with which therefore I can only use half of my ram with the stock allwinner u-boot.

Future

  • It would be nice to have some detailed experience of other A10-based tablet users.

  • Find a less hackish way of exploiting the whole 1Gb ram

  • Query on which usb hubs work well with the tablet (been working with only one usb port). Active? Passive? Quality varies?

  • Seems like there are APIs for Xorg to exploit touchscreen better than with 1-button mouse emulation, so that one can have sliding, pinching, and the other intuitive gestures so popular in Android: experience with those would be interesting