User Tools

Site Tools


a20

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
a20 [2016/02/05 12:03]
damien [Bootable microSD]
a20 [2018/05/22 10:33] (current)
Line 1: Line 1:
 +====== Getting started with Olimex A20-SOM ======
  
 +Interesting links:
 +  * https://​www.olimex.com/​wiki/​A20-SOM
 +  * http://​fablab-robert-houdin.org/​wiki/​doku.php?​id=tutoriels
 +  * http://​linux-sunxi.org/​Main_Page
 +  * https://​github.com/​linux-sunxi
 +
 +===== Buildroot system =====
 +
 +Based on https://​github.com/​mireq/​buildroot-a20-olinuxino,​ using the sunxi u-boot and Linux kernel
 +
 +<​code>​
 +make a20_olinuxino_defconfig
 +make
 +</​code>​
 +
 +===== Bootable microSD =====
 +
 +Make two partitions:
 +
 +  * boot partition: FAT16, starting at offset 1MB, for u-boot.img, script.bin, uEnv.txt and uImage
 +  * linux partion: ext3 for rootfs
 +
 +> :!:  Before running below commands be sure of which device is your to-be-formatted microSD card. In this example we take ''/​dev/​sdc''​ . You might loose data if you run the wrong command!
 +
 +<​code>​
 +sudo sfdisk /dev/sdc << EOF
 +2048,​98304,​0xE,​*
 +,,,-
 +EOF
 +</​code>​
 +
 +Format the first partition in FAT16 for boot
 +<​code>​
 +sudo mkfs.vfat -F 16 /dev/sdc1 -n boot
 +</​code>​
 +
 +Format the second in EXT3 for the root filesystem
 +<​code>​
 +sudo mkfs.ext3 /dev/sdc2 -L rootfs
 +</​code>​
 +
 +Burn ''​sunxi-spl.bin''​ and ''​u-boot.bin'',​ from //​Buildroot//'​s ''​output/​images'',​ at the beginning of the SD card:
 +<​code>​sudo dd if=sunxi-spl.bin of=/dev/sdc bs=1024 seek=8
 +sudo dd if=u-boot.bin of=/dev/sdc bs=1024 seek=32
 +</​code>​
 +or, equivalently,​ ''​u-boot-sunxi-with-spl.bin''​ (actually, the concatenation of ''​sunxi-spl.bin''​ and ''​u-boot.bin''​),​ to be found in //​Buildroot//'​s ''​build/​uboot'':​
 +<​code>​
 +sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdc bs=1024 seek=8
 +</​code>​
 +
 +Copy the content of the boot partition:
 +<​code>​
 +tar -xvf rootfs.tar -C </​path/​to/​boot/​mount/​point>​ --strip=2 --wildcards '​./​boot/​*'​ --exclude '​./​boot/​u-boot.bin'​ --exclude '​./​boot/​u-boot.img'​ --exclude '​./​boot/​sunxi-spl.bin'​ --exclude '​./​boot/​u-boot-sunxi-with-spl.bin'​
 +</​code>​
 +
 +Copy the content of the root filesystem:
 +<​code>​
 +sudo tar xvf rootfs.tar -C </​path/​to/​rootfs/​mount/​point>​ --exclude '​boot'​
 +</​code>​
 +
 +
 +===== Display =====
 +
 +[[http://​www.elecfreaks.com/​wiki/​index.php?​title=2.2S%22_TFT_LCD:​_TFT01-2.2S]]
 +==== SPI support ====
 +  - Add the spi-sun7i driver support to the linux kernel: [[http://​will-tm.com/​spi-on-the-cubieboard2/​]] and [[https://​github.com/​matzrh/​rfm12b-linux/​blob/​master/​spi-sun7i.patch]]
 +  - Load the spi driver: ''​modprobe spi_sun7i''​
 +
 +==== FBTFT support ====
 +[[https://​github.com/​notro/​fbtft]]
 +
 +(requires spi driver to be loaded)
 +  - Add the fbtft driver support to Buildroot: [[http://​lists.busybox.net/​pipermail/​buildroot/​2015-January/​116416.html]]
 +  - Load the fbtft_device driver: ''​modprobe fbtft_device name=rpi-display ​ busnum=1 gpios=reset:​4,​dc:​5,​led:​6 rotate=90''​
 +     * ''​rpi-display''​ is associated to the '​ili9341'​ driver,
 +     * ''​busnum=1''​ refers to device ''/​dev/​spi1.0'',​
 +     * ''​gpios=...''​ makes the link between the defferents signals to the actual gpios they are connected to)
 +     * ''​rotate=...''​ indicates the rotation angle (counter clockwise) of the screen (0, 90, 180 or 270)
 +  - Load the driver corresponding to the screen: ''​modprobe fb_ili9341''​
 +
 +=== Backlight ===
 +
 +https://​github.com/​notro/​fbtft/​wiki/​Backlight
 +
 +===== Network configuration =====
 +
 +==== Ethernet ====
 +To enable eth0 interface, load sunxi-emac driver on the OLinuXino-Lime
 +<​code>​
 +modprobe sunxi-emac
 +</​code>​
 +
 +==== WLAN ====
 +=== with a rt2870 chipset ===
 +Add the support for the rt2870 chipset to your system:
 +  * make sure linux-firmware is ticked in your buildroot configuration
 +  * make sure Busybox mdev is configured to support firmware hotload
 +
 +On target,
 +  * configure mdev as kernel hotplug
 +<​code>​
 +sysctl -w kernel.hotplug=/​sbin/​mdev
 +mdev -s
 +</​code>​
 +  * load the rt2800usb driver
 +<​code>​
 +modprobe rt2800usb
 +</​code>​
 +  * bring up the wlan0 interface
 +<​code>​
 +ifconfig wlan0 up
 +</​code>​
 +
 +=== with a mt7601 chipset ===
 +
 +== Build the driver ==
 +
 +Download the driver sources from [[https://​github.com/​porjo/​mt7601]]
 +
 +Apply the following patch: ​
 +<​code>​
 +diff --git a/​src/​Makefile b/​src/​Makefile
 +index dfe1283..b2615ab 100755
 +--- a/​src/​Makefile
 ++++ b/​src/​Makefile
 +@@ -197,11 +197,13 @@ endif
 + 
 + ifeq ($(PLATFORM),​PC)
 + # Linux 2.6
 +-LINUX_SRC = /​lib/​modules/​$(shell uname -r)/build
 ++LINUX_SRC = <​path_to_your_linux_kernel_sources>​
 + # Linux 2.4 Change to your local setting
 + #​LINUX_SRC = /​usr/​src/​linux-2.4
 +-LINUX_SRC_MODULE = /​lib/​modules/​$(shell uname -r)/​kernel/​drivers/​net/​wireless/​
 +-CROSS_COMPILE = 
 ++LINUX_SRC_MODULE = $LINUX_SRC/​drivers/​net/​wireless
 ++CROSS_COMPILE = <​path_to_your_sdk>/​host/​usr/​bin/​arm-linux-
 ++ARCH=arm
 ++export ARCH
 + endif
 + 
 + ifeq ($(PLATFORM),​INTELP6)
 +diff --git a/​src/​include/​os/​rt_linux.h b/​src/​include/​os/​rt_linux.h
 +index 3726b9e..821e401 100755
 +--- a/​src/​include/​os/​rt_linux.h
 ++++ b/​src/​include/​os/​rt_linux.h
 +@@ -279,7 +279,7 @@ typedef struct file* RTMP_OS_FD;
 + 
 + ​typedef struct _OS_FS_INFO_
 + {
 +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,​12,​0)
 ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,​02,​0)
 + ​ uid_t fsuid;​
 + ​ gid_t fsgid;​
 + #else
 +diff --git a/​src/​include/​rtmp_def.h b/​src/​include/​rtmp_def.h
 +index 2afcb77..b69af63 100755
 +--- a/​src/​include/​rtmp_def.h
 ++++ b/​src/​include/​rtmp_def.h
 +@@ -75,7 +75,7 @@
 + #​define RX_RING_SIZE ​           8
 + #​endif /* INF_AMAZON_SE */
 + #​define MAX_TX_PROCESS ​         4
 +-#define LOCAL_TXBUF_SIZE ​       2048
 ++#define LOCAL_TXBUF_SIZE ​       256
 + #​endif /* RTMP_MAC_USB */
 + 
 + #​ifdef MULTIPLE_CARD_SUPPORT
 +diff --git a/​src/​os/​linux/​config.mk b/​src/​os/​linux/​config.mk
 +index 531b00e..e67c864 100755
 +--- a/​src/​os/​linux/​config.mk
 ++++ b/​src/​os/​linux/​config.mk
 +@@ -1054,7 +1054,7 @@ CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/​include -Wall -O2 -Wundef -Wstrict-prototy
 + ​export CFLAGS
 + endif
 + 
 +-GCCVERSION = $(shell gcc -dumpversion)
 ++GCCVERSION = $(shell $(CROSS_COMPILE)gcc -dumpversion)
 + 
 + ifeq ($(PLATFORM),​PC)
 +     ifneq (,​$(findstring 2.4,​$(LINUX_SRC)))
 +</​code>​
 +
 +where
 +  - ''<​path_to_your_linux_kernel_sources>''​ is the path to the sources of kernel for your target; e.g. ''<​buildroot_directory>/​output/​build/​linux-sunxi-v3.4.104-r0''​
 +  - ''<​path_to_your_sdk>''​ is your buildroot output directory; e.g. ''<​buildroot_directory>/​output''​
 +Note that changing the ''​LOCAL_TXBUF_SIZE''​ define value from ''​2048''​ to ''​256''​ prevents an error to occur during the loading of your driver.
 +
 +Launch the compilation:​
 +<​code>​
 +$ cd src
 +$ make
 +</​code>​
 +
 +and copy the generated ''​src/​os.linux/​mt7601Usta.ko''​ driver to your target.
 +Note that the generated file is quite big (15MB)...
 +
 +== Load the driver ==
 +On your target:
 +  * load the driver:
 +<​code>​
 +$ insmod mt7601Usta.ko
 +</​code>​
 +
 +  * enable the ''​ra0''​ interface:
 +<​code>​
 +$ ifconfig ra0 up
 +</​code>​
 +
 +===== PWM =====
 +
 +[[https://​www.olimex.com/​wiki/​How_to_add_pwm]]
 +
 +===== OpenGL =====
 +
 +via the mali driver ([[http://​linux-sunxi.org/​Mali_binary_driver]])
 +
 +To redirect the output the a non standard //​framebuffer device//, define the ''​FRAMEBUFFER''​ environnement variable to the wanted device.
 +THe same variable has to be used to launch a Qt5 application,​ instead of the normal ''​QT_QPA_EGLFS_FB''​ one.
a20.txt ยท Last modified: 2018/05/22 10:33 (external edit)