Вы находитесь на странице: 1из 6

How to make a bootable SD card for A13-micro-SOM with kernel 3.

4 and debian file

1. Setup of the toolchain
------------------------You should make sure you have the tools for building the Linux Kernel and instal
l 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-es
sential git
This will install: GCC compiler used to compile the kernal, The kernel config me
uboot make image which is required to allow the SD card to book into the linux i
mage, Git which allows you to download from the github which holds source code f
or 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:
after the installation you now have all tools to make your very own A13 kernel i
2. Building Uboot
----------------First let's make the directory where we will build the A13-OLinuXino-Micro/SOM l
# mkdir a13-micro-SOM-kernel_3.4
# cd a13-micro-SOM-kernel_3.4
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 u-boot for A13-micro and A13-SOM boards is tested with the next br
# git rev-parse --verify HEAD
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/

Note that there are 2 versions of A13-SOM boards:

-A13-SOM with 256MB DDR3 memory size
-A13-SOM with 512MB DDR3 memory size - need u-boot patch
If you have A13-SOM board with 512MB memory size then first you have to allpy pa
tch for changing DDR3 memory size:
download u-boot_A13_SOM_512MB.patch using wget command
# wget https://drive.google.com/file/d/0B-bAEPML8fwlVElrUTBQcGlIeU0/edit?usp=sha
and patch the file board/sunxi/dram_a13_oli_micro.c with the next command
# patch -p0 < u-boot_A13_SOM_512MB.patch
If you have A13-SOM with 256MB memory size you no need from patch. By default uboot settings are set for 256MB memory size and you can start building imediatel
y after download u-boot.
You can start uboot building with the next commands:
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- A13-OLinuXinoM_config
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihfAt 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
3. Building kernel sources for A13-micro-SOM
---------------------------------------------Kernel sources for A13 are available on GitHub. Note that the following building
is made with the revision below:
# git rev-parse --verify HEAD
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/
Note that before compiling kernel you have to do a patch kernel in order to cha
nge I2C sped from 200kHz to 100kHz (need for Olimex's I2C modules)
and some other changes related with missing power managment with AXP209 chip.
download the patch a13_micro_SOM.patch using wget command
# wget https://drive.google.com/file/d/0B-bAEPML8fwlTjh4dXZlZTVaaXM/edit?usp=sha

and apply the patch:

# patch -p1 < a13_micro_SOM.patch
The next step is to configure the system
Here you need from aa13 configuration file
tains all kernel module settings.

a13_micro_SOM_defconfig. The file con

Download a13_micro_SOM_defconfig using wget command

# wget https://drive.google.com/file/d/0B-bAEPML8fwlZm5LTHIwV2V1NUU/edit?usp=sha
then copy a13_micro_SOM_defconfig file to configs directory:
# cp a13_micro_SOM_defconfig /arch/arm/configs/.
and make:
# make ARCH=arm a13_micro_SOM_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 peri
pherials in the kernel. Be careful when use this as this may cause the kernel to
not work properly.
Now you can continue with kernel image compiling
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage
when this finish you will have uImage ready and the result should be:
Kernel: arch/arm/boot/Image is ready
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-3.4.79+
Mon May 12 09:22:56 2014
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size:
4612216 Bytes = 4504.12 kB = 4.40 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 modu
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modu
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

where 3.x.xx is kernel version
in our case the directory with modules is:
4. Format and setup the SD-card
-------------------------------We suggest 4GB class 10 micro sd-card but you can use any card between 2GB and 1
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 s
dc note that some of these devices may be your hard disk so make sure you know w
hich one is your sd card before you proceed as you can damage your HDD if you ch
oose 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




Id System
83 Linux
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
# 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-micro-SOM-kernel_3.4# directory
Note that you have to write u-boot-sunxi-with-spl.bin in /dev/sdX (not sdX1 or s
# 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-micro-SOM-kernel_3.4# directory
# mkdir /mnt/sd
# 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 using wget command
# wget https://drive.google.com/file/d/0B-bAEPML8fwlX2txWjFfNTJCQ3c/edit?usp=sha
# 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 r
Basically the only difference between the different Linux distributions is the r
ootfs, so if you put Debian rootfs you will have Debian, if you put Ubuntu rootf
s 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-micro-SOM-kernel_3.4
download debian rootfs - a13_micro_SOM_debian_FS.tgz using wget command
# wget https://drive.google.com/file/d/0B-bAEPML8fwlRzM1M1hfSjNoM0U/edit?usp=sha
mount your sd card EXT3 FS partition:
# mount /dev/sdX2 /mnt/sd
and unarchive the rootfs
# tar xzvf a13_micro_SOM_debian_FS.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-mic
ro-SOM-kernel_3.4linux-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.90+/ /mnt/sd/lib/modules/
replace /lib/firmware folder with the generated /linux-sunxi/out/firmware
#rm -rf /mnt/sd/lib/firmware/
#cp -rfv linux-sunxi/out/lib/firmware/ /mnt/sd/lib/
# 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-Micro/SOM
Connect USB-SERIAL-CABLE-F to UEXT Tx.Rx and GND, or connect a HDMI screen. Put
the SD-card in A13-OLinuXino-Micro/SOM and apply 6-16V power, you should see Ubo
ot and then Kernel messages on the console
default username/password is : root / olimex