A20-SOM Debian with Kernel 3.4.79+ building

 

Image

 

We completed Debian image for A20-SOM with Kernel 3.4.79+

Here is Building description.

Here is List of installed packages.

Here is image description.

 

Home Automation with Open Source Hardware ARM Linux board A20-OLinuXino and MOD-IRDA+

Image

 

A20-OLinuXino is Open Source Hardware Linux computer. It consumes only 2W of energy but runs Debian Wheezy and basically with it you can do anything you can do with your desktop Linux server/machine.

What makes A20-OLinuXino more flexible than your computer is that it have lot of additional hardware resources which you don’t have on your desktop computer – like GPIO ports, I2C, SPI, UARTs etc.

With the low power of only 2W A20-OLinuXino can run 24/7 consuming less than 1% of what desktop x86 server would take as power consumption.

Another advantage is that with the build-in Lipo charger simple LiPo battery can run the OLinuXino for hours if the mains power supply fail, so no need for expensive server UPS.

This makes OLinuXino perfect choice for home automation board. You can easily attach web camera to USB port and make video surveillance server with backup power supply LiPo battery for instance.

Another nice feature is the UEXT connector which allow different modules easily to be connected to A20-OLinuxino.

Now we will show you what you can do with MOD-IRDA+ module which is IR receiver and transmitter. You can receive and transmit IR remote control commands and thus control other home appliances with IR remote controls like: TVs, Air conditions, Radios, Stereo amplifires, and any other home gadgets with IR remotes.

Combining this to the fact that with OLinuXino you have access to Internet and can drive GPIOs and so on with Web interface makes endless possibilities.

In the video below you can see how you can teach OLinuXino to do things when receive commands by IR remote control and how it can play back captured IR remote control commands:

 

Having all sources you can easily adapt these for your next Home Automation project.

BGA chips soldering and replacement tutorial

Image

OLinuXino Open Source Hardware Linux computer was designed to be Do-It-Yourself friendly Linux computer, but the more powerful versions contains BGA ICs.

Many people are afraid to try to solder BGA ICs and think, that this is very complicated process and require lot of expensive tools.

Indeed if you do mass production you need expensive and precise machines to place and reflow the boards which cost a lot of money.

If you have to assembly and repair small quantity of boards though you can do it with low cost equipment as well.

Sure you may broke some ICs and boards until you learn how to do this properly, but this should not discourage you.

In this tutorial we will show you how A20-OLinuXino with burned processor is repaired using only few low cost tools:

  •  hot air desoldering tool
  • soldering iron
  • twizzers
  • solder wick
  • tacky flux
  • isopropile alcohol

all above cost total less than EUR 200

Step 1 – hold the IC with twizzers and move the hot air handle above the IC trying to heat it equally
Step 2 – using solder wick remove the excessive solder on the BGA pads, not everything will be removed
Step 3 – apply flux and repeat step 3 until make pads completely even with no solder blobs
Step 4 – clean with isopropile alcohol
Step 5 – apply tacky flux
Step 6 – position the BGA chip on the pads (in our designs we place 4 small pads in the BGA corners so when you place the IC the corner of the ICs lay on these registration pads)
Step 7 – heat the BGA with the hot air to 250 C and keep it hot above 250 C for about 30 seconds.

Lead Free Solder melting point is 225 C, to solder the IC reliable it should be heated to 250 C and then hold at this temperature for 30 seconds.

You can do some experiments to learn when the IC is heated to this temperature and how long it takes to heat up by using damaged BGA chip – put thermocouple on bottom of it and place the IC on damaged board as you have to measure the temperature of the balls not on top of the IC then start heating and monitor the temperature, you will see after what time, when you move the hot air gun the temperature reach 250 C, note that the distance between the hot air gun and IC changes the temperature significant, also the complete IC should be heated and you have to move the hot air with circulating moves not to keep it at one spot only.
Once you do the measurements you will know what amount of time you have to heat the IC and at what distance and you can try with real chip.

When BGA balls melt down they “collapse” and the BGA sinks down a little bit, with the time you will get experience and will notice this collapse to be sure when the BGA balls are really soldered.

You can check your soldering results with magnifying glass looking at the BGA sides.

Here is the move which show above steps:

 

 

PIC-WEB-BOX demo video

Image

 

PIC-WEB-BOX is embedded PIC web server using Microchip’s Open Source TCP-IP stack with two buttons, RS232 interface, UEXT connector, two GPIO connectors, Status LED, 2GB Sd card for web storage. The power supply can be in range 9-30VDC and the low consumption makes this board perfect for controlling things over internet or to read sensors etc.

We setup video where you can see how easy is to program it and using the build-in bootloader you can change PIC-WEB-BOX firmware over the net via TFTP.

UART, I2C, SPI interfaces are available and the video demonstrate how you can drive 4.3″ LCD, Relays, measure temperature with thermocouple etc.

SD card with 2GB is build-in for web storage.

PIC-WEB-BOX is with small enclosure.

 

DIY Air Pockets Machine

Image

When dealing with shipping parcels there is one thing which is always not enough – filling material, it should be light to not change the parcel weight, but must in other hand fill all gaps and hold the materials inside the parcel tight to not break during the shipments.

After searching for professional machine for making Air pocket I found that all of them are

  1. expensive
  2. working with special materials which are also expensive

so I start thinking how to make my own air pocket filling machine.

First thing was to find PE sleeve, it was not hard as around Plovdiv there are about 10 different small factories which produce such PE sleeve, they can even print your logo or something else on it as it’s widely used to pack milk, sugar, and so on food products.

The PE sleeve is sold on KG and very cheap, this roll you see above is 6KG but probably long thousand meter and cost me eur 30.

Then I needed PE sealing machine and sourced one from ebay for $40 with free shipping.

The sleeve should be also filled with air so I got one of these small fans used in bathrooms.

So I was ready to test my “machine”.

Image

First cut one stripe of the sleeve around 1 meter and sealed one end with the sealer.

Then put the sleeve on the fan fixing it with rubber ring:

Image

As expected the sleeve got filled with air then all I had to do is to seal some pockets with the selaer. You can see the result:

Image

Not bad result for first try 🙂

Now I have unlimited low cost air pocket filler for the parcels we ship.

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.

Building Debian Linux image for A10-OLinuXino-Lime with Kernel 3.4.67+

Image

If you do not want to bother with Linux Debian image generations here is image build following the instructions below, so you just write it to SD card and boot your LIME 🙂

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 A10 kernel image!

2. Building Uboot

The Allwinner Linux-Sunxi community uboot is maintained by Henrik Nordstrom aka hno on Freenode irc. You can find him in #linux-sunxi or #olimex channels, if something with uboot is broken he is your man 🙂

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

# mkdir A10_kernel_3.4/
 # cd A10_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 A10-OLinuXino-LIME board u-boot is tested with the next branch:

# git rev-parse --verify HEAD
 4e491b03b53bd89af3065fc325a99106d0161998

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 A10-OLinuXino-Lime 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/A10_kernel_3.4/#

3. Building kernel sources for A10-OLinuXino-LIME

For problems related to Linux Kernel  use  #linux-sunxi irc channel or Google groups Mailing List.

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

# git rev-parse --verify HEAD
 a7350cb6a9ec1aae510e26cdc730f05f12e13f9f

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 A10 configuration file – a10lime_defconfig. The file contains all kernel module settings.

Download a10lime_defconfig then copy a10lime_defconfig file to configs directory:

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

and make:

# make ARCH=arm a10lime_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 peripherials 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

The other patch is related with A10-OLinuXino-LIME sound.

Download the patch a10_sound.patch and apply the patch:

# patch -p0 < a10_sound.patch

Note that by default A10-OLinuXino-LIME board there is no audio connectors and if you do not need from audio then you no need from this 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.67+
 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.67+

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.

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/A10_kernel_3.4/# 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/A10_kernel_3.4/# 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

# 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/A10_kernel_3.4/

download debian rootfs – a10-olinuxino-lime.tgz

mount your sd card EXT3 FS partition:

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

and unarchive the rootfs

# tar xzvf debian_34_67_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/A10_kernel_3.4/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.67+/ /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 A10-OLinuXino-Micro

Connect USB-SERIAL-CABLE-F to UEXT Tx.Rx and GND, or connect a HDMI 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

Building the Ultimate Debian SD card for Linux with Kernel 3.4 for A20-OLinuxino-MICRO

Image

 

EDIT: there is newer image with hardware accelerated video: https://olimex.wordpress.com/2014/03/07/building-a20-olinuxino-micro-debian-image-with-hardware-accelerated-video/

 

This is step by step instruction how to Build Debian for A20-OLinuXino with Kernel 3.4

We call this image ULTIMATE as it supports all hardware features and fix all known bugs to the moment 🙂

The built image ready to write on SD card will be linked on our wiki in a hour, these steps below are just for Linux geeks who want to know how things happend and want to do Debian distribution by themself or to modify it.

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 A20 kernel image!

2. Building Uboot

The Allwinner Linux-Sunxi community uboot is maintained by Henrik Nordstrom aka hno on Freenode irc. You can find him in #linux-sunxi or #olimex channels, if something with uboot is broken he is your man 🙂

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

# mkdir a20_kernel_3.4/
# cd a20_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 OLinuXino-A20-Micro board u-boot is tested with the next branch:

# git rev-parse --verify HEAD
8a4621c488f33089d831168bfa5bae210a5684c8

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 a20-olinuxino_micro 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/a20_kernel_3.4/#

3. Building kernel sources for Olinuxino-A20-Micro

The Allwinner Linux-Sunxi community Kernel developers can be reached on http://linux-sunxi.org/Mailing_list

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

# git rev-parse --verify HEAD
a7350cb6a9ec1aae510e26cdc730f05f12e13f9f

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 a20 configuration file – a20_defconfig. The file contains all kernel module settings.

Download a20_defconfig then copy a20_defconfig file to configs directory:

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

and make:

# make ARCH=arm a20_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 peripherials 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 realted 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.67+
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.67+

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.

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/a20_kernel_3.4/# 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/a20_kernel_3.4/# 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/a20_kernel_3.4/

download debian rootfs – debian_34_67_fs.tgz

mount your sd card EXT3 FS partition:

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

and unarchive the rootfs

# tar xzvf debian_34_67_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/a20_kernel_3.4/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.67+/ /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 A20-OLinuXino-Micro

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

default username/password is : root / olimex

Embedded Linux Conference 2013 – Free Electrons Slides

Image

Thomas Petazzoni published his slides for Linux Con 2013, for these who want to learn more about Device Tree and how new SOC support is add to Linux Kernel this will be interesting reading: http://elinux.org/images/5/5e/Elc2013_Petazzoni.pdf

Make things talk with OLinuXino

Image

Festival is open source speech synthesizer which runs on Linux, here are instructions how to install and use it on any of our OLinuXino boards.

With Festival you can add voice to your next project.

1. Instalation

  • Go to http://festvox.org/packed/festival/2.1/
  • Download all archieves
  • We will use /root/festival
  • Move the archives to the /root/festival
  • Extract all archieves
  • After that there will be two new folders: -> speech_tools -> festival
  • If you want you can move them to different location
  • Open this demo Makefile, Edit: -> FES_DIR = /root/festival or other location
  • Open terminal and run:
# make remove
# make
To run the program:

 # bin/Festival

2.  Command options:

  • Verbose mode: –verbose, -v

Print extra output information.
Example:

# bin/Festival -v
  • Heap size: –heap, -h

Define the size of the used heap. Default value is 210000.
Example:

# bin/Festival -v --heap 1500000
  • Do not load init file: –no-init-file

Doesn’t load the default initilization file.
Example:

 # bin/Festival -v --no-init-file
  • Read text from text file: –file, -f

Open ASCII coded text file, and read it.
Example:

 # bin/Festival -v --file SomeText.txt
  • Read text from command line: –text, -t

Say text parsed from the command line.
Example:

# bin/Festival -v --text "Say Hello World"

the Festival archives are also backup on GitHub: 
https://github.com/OLIMEX/OLINUXINO/blob/master/SOFTWARE/OLinuXino%2BFestival.tar.gz

Previous Older Entries Next Newer Entries