Building Debian Linux bootable SD card with hardware accelerated video decoding and Kernel 3.4 for A13-OLinuXino

Image

1. Setup of the toolchain

You should make sure you have the tools for building the Linux Kernel and install them if you don’t have them. To install new software you should be with super user rights on your Linux machine, so do this type in a terminal.

$ sudo su

you will be asked for your password and then your prompt will change to # which means you are now the super user, all future commands should be run in this mode.

First update apt-get links by typing:

# apt-get update

Install the toolchain by typing the following.

# apt-get install gcc-4.7-arm-linux-gnueabihf ncurses-dev uboot-mkimage build-essential git

This will install: GCC compiler used to compile the kernal, the kernel config menu
uboot make image which is required to allow the SD card to book into the linux image, Git which allows you to download from the github which holds source code for some of the system, some other tools for building the kernel.

Note that if you use debian may be you will need to add:

deb http://www.emdebian.org/debian squeeze main

in the file below:

/etc/apt/sources.list

after the installation you now have all tools to make your very own A13 kernel image!

2. Building Uboot

For problems around u-boot use Linux-Sunxi mailing list at Google Groups: https://groups.google.com/forum/#!forum/linux-sunxi

First let’s make the directory where we will build the A13-OLinuXino linux:

# mkdir A13-OLinuXino_kernel_34/
# cd A13-OLinuXino_kernel_34/

Then let’s download the uboot sources from GitHub repository, note there are lot of branches but you have to use sunxi branch.
Note that the A13-OLinuXino board u-boot is tested with the next branch:

# git rev-parse --verify HEAD
a5f58fbcf743fd5d239a69dae5049cdb169ef2b0

Download u-boot sourses:

# git clone -b sunxi https://github.com/linux-sunxi/u-boot-sunxi.git

After the download you should have a new directory

# cd u-boot-sunxi/

With the following command you can start the uboot build:

# make A13-OLinuXino CROSS_COMPILE=arm-linux-gnueabihf-

At the end of the process you can check if everything is OK by

# ls u-boot.bin u-boot-sunxi-with-spl.bin spl/sunxi-spl.bin
spl/sunxi-spl.bin u-boot.bin u-boot-sunxi-with-spl.bin

If you got these files everything is complete, well done so far

# cd ..

You should be in the following directory

/home/user/A13-OLinuXino_kernel_34/#

3. Building kernel sources for A13-OLinuXino

For problems around kernel use Linux-Sunxi mailing list at Google Groups: https://groups.google.com/forum/#!forum/linux-sunxi

Kernel sources for A13 are available on GitHub. Note that the following building is made with the revision below:

# git rev-parse --verify HEAD
77a43694fca9db61560b546ca94809535d37de0f

You can download the kernel sources using the following command:

# git clone https://github.com/linux-sunxi/linux-sunxi

After the download go to the kernel directory

# cd linux-sunxi/

Here you need from A13 configuration file a13_linux_defconfig. The file contains all kernel module settings.

Download a13_linux_defconfig

then copy a13_linux_defconfig file to configs directory:

# cp a13_linux_defconfig linux-sunxi/arch/arm/configs/.

and make:

# make ARCH=arm a13_linux_defconfig

The result should be:

configuration written to .config

If you wish to make your changes in the kernel configuration do:

# make ARCH=arm menuconfig

The menuconfig changes a .config text file, which you can view/edit even with a text editor like vi,nano.

With this command you can add or remove different modules for the different peripherals in the kernel. Be careful when use this as this may cause the kernel to not work properly.

Note that before compiling kernel you have to do a patch related with I2C speed. The patch changes i2c speed from 200kHz to 100kHz.

If you want to use some of olimex’s i2c modules on UEXT then you need from this patch.

download the patch sunxi-i2c.patch

and apply the patch:

# patch -p0 < sunxi-i2c.patch

Now you can continue with kernel image compiling

# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage

when this finish’s you will have uImage ready and the result should be:

Image Name: Linux-3.4.75+
Created: Mon Sep 16 13:39:04 2013
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 5450904 Bytes = 5323.15 kB = 5.20 MB
Load Address: 40008000
Entry Point: 40008000
Image arch/arm/boot/uImage is ready

Now you can build the kernel modules:

# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules_install

DONE! At this point you have uboot and kernel modules.

The uImage file is located in linux-sunxi/arch/arm/boot/

The kernel modules are located in

linux-sunxi/out/lib/modules/3.x.xx
where 3.x.xx is kernel version

in our case the directory with modules is:

linux-sunxi/out/lib/modules/3.4.75+

4. Format and setup the SD-card

We suggest 4GB class 10 micro sd-card but you can use any card between 2GB and 16GB. Note that if your card is Class 4 or 6 the Linux performance will suffer.

First we have to make the correct card partitions, this is done with fdisk.

Plug SD card into your SD card reader and enter in the terminal

# ls /dev/sd

Then press two times <TAB> you will see a list of your sd devices like sda sdb sdc note that some of these devices may be your hard disk so make sure you know which one is your sd card before you proceed as you can damage your HDD if you choose the wrong sd-device. You can do this by unplugging your sd card reader and identify which “sd” devices remove from the list.

Once you know which device is your sdcard like sda use this text instead of the sdX name in the references below:

# fdisk /dev/sdX

then do these steps:

1. p
will list your partitions

if there are already partitions on your card do:

2. d enter 1
if you have more than one partitition press d while delete them all

3. create the first partition, starting from 2048
n enter p enter 1 enter enter +16M

4. create second partition
n enter p enter 2 enter enter enter

then list the created partitions:
p enter
if you did everything correctly on 4GB card you should see something like:

Disk /dev/sdg: 3980 MB, 3980394496 bytes
123 heads, 62 sectors/track, 1019 cylinders, total 7774208 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdg1 2048 34815 16384 83 Linux
/dev/sdg2 34816 7774207 3869696 83 Linux

7. w

write changes to sd card
now we have to format the file system on the card:

the first partition should be vfat as this is FS which the Allwinner bootloader understands

# mkfs.vfat /dev/sdX1

the second should be normal Linux EXT3 FS

# mkfs.ext3 /dev/sdX2

5. Write the Uboot and sunxi-spl.bin

You should be in /home/user/A13-OLinuXino_kernel_34/# directory

Note that you have to write u-boot-sunxi-with-spl.bin in /dev/sdX (not sdX1 or sdX2)

# dd if=u-boot-sunxi/u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8

6. Write kernel uImage you build to the SD-card

You should be in the directory below

/home/user/A13-OLinuXino_kernel_34/# directory

# mount /dev/sdX1 /mnt/sd

copy the Kernel uImage to root directory in partition 1

# cp linux-sunxi/arch/arm/boot/uImage /mnt/sd

7. Write script.bin file

script.bin is a file with very important configuration parameters like port GPIO assignments, DDR memory parameters, Video resolution etc,

download the script.bin file

# cp script.bin /mnt/sd
# sync
# umount /dev/sdX1

8. Debian rootfs

The Linux Kernel and Uboot are ready, now we have need from Linux distribution rootfs.

Basically the only difference between the different Linux distributions is the rootfs, so if you put Debian rootfs you will have Debian, if you put Ubuntu rootfs it will be Ubuntu etc.

How to build one is a long topic, the good thing is that there are many already pre-built so we can just download one and use.

exit the kernel directory

# cd ..

You should be in the directory below

# /home/user/A13-OLinuXino_kernel_34/

download debian rootfs – a13_olinuxino_debian_fs_kernel_34_75_rel_9.tgz

mount your sd card EXT3 FS partition:

# mkdir /mnt/sd
# mount /dev/sdX2 /mnt/sd

and unarchive the rootfs

# tar xzvf a13_olinuxino_debian_fs_kernel_34_75.tgz -C /mnt/sd
# ls /mnt/sd

the right result should be:

bin dev home lost+found mnt proc run selinux sys usr
boot etc lib media opt root sbin srv tmp var

Now you have to replace the new generated kernel modules from /home/user/A13-OLinuXino_kernel_34/linux-sunxi/out/lib/modules/ to the new debian file system

# rm -rf /mnt/sd/lib/modules/*
# cp -rfv linux-sunxi/out/lib/modules/3.x.xx+/ /mnt/sd/lib/modules/

where x.xx is the kernel version
in our case:

# cp -rfv linux-sunxi/out/lib/modules/3.4.75+/ /mnt/sd/lib/modules/
# sync
# umount /mnt/sdX2

at this point you have Debian on your SD card second partition and
you have an SD card ready to boot debian on A13-OLinuXino

Connect USB-SERIAL-CABLE-F to UEXT Tx.Rx and GND, or connect a VGA screen. Put the SD-card in A10-OLinuXino-Micro and apply 5V power, you should see Uboot and then Kernel messages on the console

default username/password is : root / olimex

For these who do not want to go through all these steps the prebuilt image is linked on our A13-OLinuXino WiKi page.

New A10-OLinuXino-LIME image have full HD hardware acceleration

images

First LIME image was done in hurry and there is no hardware acceleration enabled, which dissapointed some of the first LIME owners if you read the comments 🙂

As many know recently Linux-Sunxi community successfully reverse engineered CedarX VPU and completely open source drivers for hardware accelerated video playback for A10 was done. The supported formats are just few for now but still something than nothing.

Dimitar made new image with hardware acceleration and here is video in Full HD format H.264 (MP4) playing on LIME:

we need now to do some testing and upgrade the image to our wiki 🙂

QtAV running on A13-OLinuXino-WIFI with hardware acceleration

Image

QtAV is a media playing library based on Qt and FFmpeg.

Miroslav Bendik made QtAV with CedarX video hardware acceleration running on A13-OLinuXino.

Source code of QtAV branch with cedarv decoder is here: https://github.com/mireq/QtAV.

He posted this amazing video made with QtAV:

 

CedarX for Allwinner is liberated!

Image

We all know the great work done with the GPU Mali 3D accelerator by Lima project, the open source driver performs better than the binary blob which ARM sells.

The Mali is used for 3D graphics i.e. used mostly by the games rendering engines and 3D CAD software.

Beside the GPU Allwinner chips have also VPU which can do hardware encoding and decoding of audio and video, as you guess VPU drivers (http://linux-sunxi.org/CedarX) are again made as binary blobs, so these were not used in the Linux Kernel and distributions.

A group of hackers (jemk, wingrime, nove) worked on the reverse engineering of CedarX http://linux-sunxi.org/CedarX/Reverse_Engineering.

Yesterday was announced that there are already preliminary open source CedarX drivers for Allwinner SoCs.

On this video you can see tablet with A10 playing video using the hardware decoding without using the CedarX binary blobs http://www.youtube.com/watch?v=z__RxeVmYCQ

This makes Allwinner SoCs one step ahead all competitors as the GPU/VPU proprietary blobs is what makes most of ARM devices not completely opened.

All Linux implementations so far were not using these co-processors like the GPU/VPU which made the video operations slow as done completely by software in the main processor. Now when Open Source drivers exist the main processor will be released from video and graphics related tasks which will increase remarkable the speed.

Allwinner SoC thanks to open source community now is one of the most Open Source friendly SoC with: Open Source bootloader (contributed by Allwinner), Open GPU (lima project), Open VPU (cedarus).

Still lot of work is to be done, but liberating the video decoding is something which many people were waiting – Allwinner CedarX drivers were among the top priorities of FSF http://www.fsf.org/campaigns/priority-projects/reverse-engineering

Meet OliGoBot – robot chassis with A20-OLinuXino, WIFI and Web camera

Image

Few days ago Dimitar Gamishev asked me to try one of our new 4 wheel Robot chassis platforms https://www.olimex.com/Products/RobotParts/Chassis/

Image

He seems created a little monster as he put A20-OLinuXino on it with WiFi adapter and Web camera.

Image

Image

You can see the robot in action on this video:

http://www.youtube.com/watch?v=JoxdOHeTfto

The camera is streaming video via the WiFi and you can control the robot via web interface.

EasyCap – Low Cost USB Video Capture board drivers for A13-OLinuXino

Image

EasyCap is low cost video capture USB dongle based on stk1160 chipset which could be find at low cost from ebay. It allow 1 to 4 cameras to be connected and to implement DVR security survilance on your PC.

Kaloyan Yovchev sent us tested drivers which works with A13-OLinuXIno and kernel 3.0.42+ which we uploaded on GitHub https://github.com/OLIMEX/OLINUXINO/tree/master/SOFTWARE/A13/EASYCAP

A13-OLinuXino running Debian preview

Image

Many people ask what is the situation with the Linux support on A13. Last Friday Dimitar Gamishev came to our office to show us what he did.

He uses the “community” Uboot and the Kernel from http://linux-sunxi.org/Main_Page and made boot-able SD-card with Debian and made small show to us:

Image

Image

you even have Gimp

Image

Image

browser:

Image

Image

Libre office:

Image

Image

Needless to say USB keyboard, mouse, USB-to Ethernet based on AX77882 dongles and the RTL8188CU WIFI adapters are supported, so you got small board consuming 2W with desktop perfrormance.

Unfortunately the video accelerator is not supported by the “community” Linux image as they are available only as binaries and not GPL compliant, let’s hope Allwinner will release proper GPL sources soon, they promissed this to XBMC group but it’s hard to say when this will be available.

Meantime we ran Linaro video test at @30 fps and here you can see that even without video accelerator A13 is capable to play the video without any slow down: http://www.youtube.com/watch?v=ZHMCGD59t54

With this Linux bootable SD-card you can keep your Android image in the NAND flash and experiment with Linux on A13.

Previous Older Entries Next Newer Entries