The ST-Ericsson Ux500 was primarily incorporated in two chipsets found in the wild: U8500 and A9500. The latter lacks a modem but is otherwise the same chip. The Ux500 is also known as NovaThor which has its own Wikipedia article even.
The U8500 was used in numerous mobile phones from Samsung and Sony Ericsson, the U9500 was used in a few tablet products and the single board computer Snowball.
Look into the wayback machine for ST-Ericsson and you find the chip docs!
The introduction video from Movial is still available at YouTube!
The support for Snowball U9500 has been discontinued, but there is a backup of all related files here on GitHub if you e.g. need to recover the board or so. This repository includes some documentation.
The latest ARM-provided GCC toolchain is what I usually use to compile recent kernels. You want the arm-none-linux-gnueabihf compiler.
Download the toolchain and install it such that it is always in your path, example:
CS_BASE=/var/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf export PATH=$PATH:${CS_BASE}/bin export MANPATH=$MANPATH:${CS_BASE}/share/doc/gcc-linaro-arm-linux-gnueabihf/man/
Here are some .mak Makefiles that I use to configure and build a U300, Nomadik or Ux500 series kernel out-of-the box:
ux500.mak can be used for any Ux500 platform actually, it configures and builds a combined binary for these platforms. If you don't specify a UX500_BOARD to the script, it will built it with a Snowball device tree.
Using these also optionally use a minimal initramfs root filesystem placed in your home directory. (This is to get you to a prompt without a root filesystem installed in the flash, such as the ArchLinux method described below.) These root filesystems are created using this script. Prebuilt version can be obtained here:
Copy the rootfs to you home directory and the ux500.mak file to your linux/ git tree or base dir and simply:
> make -f ux500.mak config > make -f ux500.mak build
The fastboot i.e. LittleKernel boot loader in the later ux500 platforms does not support not passing an initrd image when booting over USB. The proper way to kick a boot with just initramfs is like this:
> echo "foo" > null-initrd > fastboot --base 0x0 boot zImage null-initrd
Elder versions of fastboot do not recognize the --base argument so if you have one of those instead just specify -b 0x0.
The Snowball board usually comes with U-Boot pre-installed so you can use this to boot the board using TFTP over the on-board ethernet connector.
My notes on installing a TFTP server might be helpful to set up the server.
To boot from U-Boot you need a uImage, then:
setenv ethaddr 6e:e6:84:36:8e:9e ; setenv serverip 169.254.1.1 ; setenv ipaddr 169.254.1.2 ; tftpboot 0x01000000 169.254.1.1:uImage ; bootm
The Samsung Xcover 2 was released in 2013 and uses the U8500 SoC. According to the source code release for GT-S7710 the Samsung code name for this product is Skomer.
Prerequisites: dnf -y install abootimg heimdall
The abootimg creates a boot image on the Android-specific format (containing a kernel, a ramdisk and some parameters) and heimdall is a flashing tool to install new firmware into Samsung phones.
Links
It's fairly simple to install a generic ArchLinux distribution on the ux500 variants to get some proper root filesystem with some more action. This is based on the Versatile Express installation procedure.
We start by putting it on an SD card and from there to the internal eMMC.
You need to first build a kernel, you can use the prebuilt v4.4 kernel found further down this page.
The following was done on the Snowball which has an on-board 7GiB eMMC which appears as /dev/mmcblk0 and is pre-partitioned with three partitions:
dd if=/dev/mmcblk0p1 of=u-boot-2009-11.bin skip=2048MAYBE it is possible to replace your U-Boot with mine like this:
dd if=/dev/mmcblk0p1 of=/dev/mmcblk0p1 seek=2048
We will proceed to overwrite the uImage in mmcblk0p2 with the latest we have and then overwrite the root filesysystem in mmcblk0p3 with ArchLinux.
umount /run/media/[username]/[path to sd card mount] dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=8 parted /dev/mmcblk0 (parted) mklabel gpt (parted) mkpart ESP fat32 1MiB 513MiB (parted) set 1 boot on (parted) mkpart primary ext4 513MiB 100% (parted) quit mkfs.vfat /dev/mmcblk0p1 mkdir /mnt/boot mount /dev/mmcblk0p1 /mnt/boot cp uImage /mnt/boot umount /mnt/boot mkfs.ext4 /dev/mmcblk0p2 mkdir /mnt/rootfs mount /dev/mmcblk0p2 /mnt/rootfs cd /tmp wget http://archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz cd /mnt/rootfs tar xvfz /tmp/ArchLinuxARM-armv7-latest.tar.gz cd umount /mnt/rootfs
printenv setenv bootargs console=ttyAMA2,115200n8 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 init=/sbin/init printenv mmc rescan 1 fat load mmc 1:1 0x00100000 /uImage bootm
mkfs.ext4 /dev/mmcblk1p3 mkdir /mnt/rootfs mount /dev/mmcblk1p3 /mnt/rootfs dhcpd pacman -S wget cd /mnt/rootfs wget http://archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz tar xvfz ArchLinuxARM-armv7-latest.tar.gz rm ArchLinuxARM-armv7-latest.tar.gz blkid cd umount /mnt/rootfs shutdown -h now
/dev/mmcblk0: PTTYPE="dos" /dev/mmcblk0p2: LABEL="boot" UUID="5C9F-14B3" TYPE="vfat" /dev/mmcblk0p3: UUID="05675adc-df07-4320-b606-8eeee4936aee" TYPE="ext4"Note the UUID for the ext4 partition. These will be used to mount the rootfs.
printenv setenv bootargs console=ttyAMA2,115200n8 root=/dev/mmcblk1p3 rw rootwait rootfstype=ext4 init=/sbin/init printenv mmc rescan 1 fat load mmc 1:1 0x00100000 /uImage bootm
dhcpd pacman -Syu
mkdir /mnt/boot mount /dev/mmcblk1p2 /mnt/boot cd /mnt/boot wget http://dflund.se/~triad/krad/ux00/uImage-4.4-snowball mv uImage uImage-old mv uImage-4.4-snowball uImage cd umount /mnt/boot
printenv setenv emmcargs setenv bootargs \${bootargs} root=/dev/mmcblk0p3 rw rootwait rootfstype=ext4 init=/sbin/init setenv mmcargs setenv bootargs \${bootargs} root=/dev/mmcblk1p3 rw rootwait rootfstype=ext4 init=/sbin/init printenv saveenv reset
If the board has Fastboot installed, we do not need to screw around with FAT partitions etc.
umount /run/media/[username]/[path to sd card mount] dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=8 fdisk /dev/mmcblk0 [n p 1 ENTER ENTER w] mkfs.ext4 /dev/mmcblk0p1 mkdir /mnt/rootfs mount /dev/mmcblk0p1 /mnt/rootfs cd /tmp wget http://archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz cd /mnt/rootfs tar xvfz /tmp/ArchLinuxARM-armv7-latest.tar.gz cd umount /mnt/rootfs
fastboot -b 0x0 -c "console=ttyAMA2,115200,n8 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 init=/sbin/init" boot zImage null-initrd
mkfs.ext4 /dev/mmcblk2p1 mount /dev/mmcblk2p1 /mnt cd /mnt tar xvfz /ArchLinuxARM-armv7-latest.tar.gz cd umount /mnt
fastboot -b 0x0 -c "console=ttyAMA2,115200,n8 root=/dev/mmcblk2p1 rw rootwait rootfstype=ext4 init=/sbin/init" boot zImage null-initrd