XBMC on the ODROID-X

We had lots of questions on XBMC on ODROID-X from ODROID Forum members. We finally had a chance to test it. 

Realtime streaming channel played well. But mouse click event was ignored by the app:(. So we controlled the UI with a USB keyboard. We will test more contents’ compatibility. 

ODROID-X Pre-Production

We have started the pre-production this week. Here is the latest picture of ODROID-X.

The background history of adding a heat sink is this. We have performed Full-HD video decoding test only with software. Which was awesome that small embedded quad-core ARM board can decode Full-HD video. But there was a side effect of heat. It is not the normal use environment. But, some heavy users might try. So we have discussed about adding heat sink with ODROID Forum members. They all loved it. So we have decided to add the heat sink without any extra cost.  
It doesn’t affect shipment schedule. Don’t worry. 


Thanks, 

Full-HD Video play with Quad-Core Exynos.

A lot of people inquired about the performance of ARM Cortex A9 1.4Ghz Quad-core.

So we decided to show it with high definition video play ability.
Even the Exynos contains hardwired MPEG4/H.264/WMV decoder inside, we tried pure software driven media decoder.

We’ve tested several different 720p(HD) and 1080p(Ful-HD) video clips with MX player on ODROID-X which has Android 4.0.4.
MX player is one of the best video player in Google Play(Android Market) which is based on the famous FFMPEG media decoder.
They support Multi-core decoding with ARMv7 NEON SIMD feature. It means they utilize the 4 cores in parallel to decode video.

Most of clips could play well with ARMv7 NEON + Multi-core enabled FFMPEG codec library. It is really amazing.
The quad-core can decode Full-HD video even in a small ARM embedded board.
Seek and Sub-title functions are also working well.

Note that most clips contains H.264 video and we could use the hardware accelerated codec too in Android.
But, we performed this test without the hardware accelerator.

Please look into this video.

BTW, we have two issues.
1. Software driven video decoding makes a lot of heat due to heavy computing.
We may need to add a small heatsinks. We will measure the temperature more carefully.

2. 1080p contents in SDHC card doesn’t play well due to limited data transfer rate.
720p contents in SDHC are not a problem.
The eMMC storage has no problem because it is fast enough.

So we need more investigation the HW and SW codecs as well as burden of flash strorage access time.

Exynos-4412 ARM Cortex-A9 Quad-Core

Hardkernel has just announced new development boards ODROID-Q and ODROID-X which are powered by Samsung Exynos-4412 1.4Ghz processor.

ODROID-Q    Slim, Light, Mobile and Smart soluntion for professional developers.
First shipping will be end of July.

ODROID-X    Affordable and attractive platform with 6-ports USB 2.0 host !
First shipping will be end of July.

Here is a simple benchmarking result of ODROID-Q with Exynos-4412. We used the Quadrant app.
It is much faster than OMAP/Tegra/Snapdragon series. How amazing!  

 

We made interesting videos of ODROID-Q and ODROID-X for the developers.
If you want to enjoy the powerful quad-core processor, dive deep into ODROID!




Application source code for Embedded Android Platform based on ODROID-A4

Hardkernel has released guide book of Android platform development.

–   Basic ( Android/Bootloader/Kernel Build and Installation )
–   Intermediate ( Driver / HAL Development )
–   Advanced (GPIO/UART/I2C/ADC access from Android application )

Kernel source code can be downloaded from this link.

Kernel source code IO board >

There are also many useful Android application source code to access hardware in Android devices.

Sensor API   < Source code >

Sensor e-Compass API < Source code >

Camera API (preview)   < Source code >

Camera Application (Barcode & QR code reader)   < Source code > taken from ZXing project.

Battery gauge API < Source code >

Audio API <Source code >

WiFi & Bluetooth API < Source code >

GPIO / IRQ access <Source code >

ADC access <Source code >

ADC access (Oscilloscope) < Source code >

UART access (GSP system)  < Source code >

I2C access (Pressure & Barometer) < Source code >

I2C access (GPIO expansion) < Source code >

OpenMP test with ODROID-A4.

An example of 40 pieces of Fibonacci numbers(sequences).
If you want to know about Fibonacci sequences, refer this link.

1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155

To find 40 pieces of Fibonacci sequence, we used this code with OpenMP library on ODROID-A4.
fibonacci_omp.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <omp.h>
#include <unistd.h>        /* for open/close.. */
#include <fcntl.h>           /* for O_RDONLY */
#include <sys\ioctl.h>   /* for ioctl*/
#include <sys\types.h>  /* for lseek() */


int Fibonacci(int n)
{
    int x, y;
    if (n < 2)
        return n;
    else {
        x = Fibonacci(n - 1);
        y = Fibonacci(n - 2);
        return (x + y);
    }
}

int FibonacciTask(int n)
{
    int x, y;
    if (n < 2)
        return n;
    else {
#pragma omp task shared(x)
        x = Fibonacci(n - 1);
#pragma omp task shared(y)
        y = Fibonacci(n - 2);
#pragma omp taskwait
        return (x + y);
    }
}

#define MAX 41
int main(int argc, char * argv[])
{
    int FibNumber[MAX] = {0};
    struct timeval time_start, time_end;

    int i = 0;

    // omp 관련 출력
    printf(\"Number of CPUs=%d\n\", omp_get_num_procs());
    printf(\"Number of max threads=%d\n\", omp_get_max_threads());


    gettimeofday(&time_start, NULL);
#pragma omp parallel
    {
#pragma omp single private(i)
        for(i = 1; i < MAX; i++) {
            FibNumber[i] = FibonacciTask(i);
        }
    }
    gettimeofday(&time_end, NULL);

    time_end.tv_usec = time_end.tv_usec-time_start.tv_usec;
    time_end.tv_sec = time_end.tv_sec-time_start.tv_sec;
    time_end.tv_usec += (time_end.tv_sec*1000000);
    printf(\"Time of Fibonacci with OpenMP : %lf sec\n\", time_end.tv_usec / 1000000.0);

    for(i = 0; i < MAX; i++)
        printf(\"%d \", FibNumber[i]);

    printf(\"\n--------------------------------------\n\");

    return 0;

Here is a Makefile example!

GCC = /usr/local/arm/ktoolchain-cortexa9-ver2.1-20110815/bin/arm-none-linux-gnueabi-gcc 

#Fibonacci: Fibonacci.c
#    $(GCC) -o Fibonacci $< -lgomp -lpthread -fopenmp -lm -static 
Fibonacci_omp: Fibonacci_omp.c
    $(GCC) -o Fibonacci_omp $< -lgomp -lpthread -fopenmp -lm -static -O3

Please note the toolchain for OpenMP could be downloadable via in this link.
http://www.kandroid.org/board/board.php?board=toolchain&command=body&no=15

You also need to change the kernel option to activate dual-core all the time, refer Page16~17 of this document.
http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?keyword=&tag=&bid=96

Test result !
We could know the dual-core utilized calculation of Fibonacci is 1.6 times faster than single-core.

root@android:/system/bin
# ./Fibonacci                                         
Time of Fibonacci with recursion : 7.862591 sec
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269
2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986
102334155
--------------------------------------
root@android:/system/bin
# ./Fibonacci_omp                                     
Number of CPUs=2
Number of max threads=2
Time of Fibonacci with OpenMP : 4.878260 sec
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269
2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986
102334155
--------------------------------------

Multi-core programming (Parallel computing)

Hi everyone,

As you know well, Samsung Exynos-4210 contains TWO Cortex-A9 processors.
So all of ODROID-A, ODROID-PC and ODROID-A4 has dual-core powered computing performance.

To utilize full computing power of dual-core in Android, you need to learn Multi-thread programming.

This document explains the multi-threading in JAVA as well as Native C/C++(NDK) code.
Please note this great article has been written by Alvaro.

There are two source code packages for Java and NDK example.

labbok-Multithreading.rar contains modified graphical interface with an asynchronous task in JAVA.

labbok-NDKMultithreading.rar contains Fibonacci calculation in NDK.

Enjoy the document and example codes for your programming in multi-core world.

This screen shot shows the result of Fibonacci sequence calculation. He tried 30 numbers of sequence with ODROID-A4 ICS build.
It took 420msec with single-core and 230msec with dual-core.
So we can say the dual-core has significant boosted speed about 180% of the single-core.

Once again, really appreciate Alvaro’s sharing.

Another news!
We will release an example code with OpenMP to show you alternative approach of multi-core programming by this weekend.
So stay tuned!

Exynos4210 Android 4.0.3 Release.

Android 4.0.3 porting on ODROID-A / PC.

What is ready.

– Android 4.0.3 IML74K
– Linux Kernel 3.0.15
– 3G RIL
– GPS HAL
– LCD/ Capacitive touch screen
– Gyroscope sensor driver
– Accelerometer sensor driver
– e-Compass sensor driver
– MALI 3D driver update
– HDMI/SPDIF output
– MFC video accelerator (H.264/AAC MP4 format)
– Audio In/Out
– WiFi
– Bluetooth
– Camera HAL (3Mpixel: Rear Cam,  1.3Mpixel: Front Cam)
– SDHC/SDIO driver
– USB host driver (Mouse/Keyboard HID class)
– USB ADB/Mass storage composite driver
– Screen time out can be disabled with Display Settings
– Built-in ARM DS-5 Streamline driver ( http://www.arm.com/products/tools/software-tools/ds-5/streamline.php?tab=Videos )
– Android Open Accessory driver and library (Only Device-mode)
– ODROID-APP 4.0 integrated (Special thanks to Alvaro)
– Second Micro-SD card slot is accessible. (only for VFAT/NTFS)
Known issues
– Mouse cursor shows rectangular block. (Hardware cursor problem perhaps)
– HDMI overlay is not implemented. Video playback blocks all the Android GUI.
– System slow down (from time to time)
– Pixtree AV Codec is not integrated. (Will be available soon)
– Tons of known/unknown bugs..
Some interesting pictures of ICS

 

Unlock screen

Settings

 

Home screen

 

Web browsing via WiFi

Camera (Front side)

 

HDMI (Youtube app on ICS)

 

Booting log (Ver 3.0.15)

OK

U-Boot 2010.03-svn (11 21 2011 – 11:04:02) for HKDKC210 Android

APLL = 1000MHz, MPLL = 800MHz
PMIC:    ARM 1.30V, INT 1.15V, G3D 1.10V

Board:    hkdkc210
POP type: POP_B
DRAM:     1 GB
OneNAND:  0 kB
MMC:       7647 MB
*** Warning – using default environment

In:    serial
Out:   serial
Err:   serial

Checking Boot Mode … SDMMC
board_late_init
Hit any key to stop autoboot:  0
reading kernel.. 1089, 8192
MMC read: dev # 0, block # 1089, count 8192 …8192 blocks read: OK
completed
reading RFS.. 9281, 2048
MMC read: dev # 0, block # 9281, count 2048 …2048 blocks read: OK
completed
Boot with zImage
## Loading init Ramdisk from Legacy Image at 41000000 …
Image Name:   ramdisk
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    330279 Bytes = 322.5 kB
Load Address: 40800000
Entry Point:  40800000

Starting kernel …

Uncompressing Linux… done, booting the kernel.
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.0.15 (codewalker@codewalker-desktop) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-188) ) #24 SMP PREEMPT Fri Feb 24 10:34:01 KST 2012
[    0.000000] CPU: ARMv7 Processor [412fc091] revision 1 (ARMv7), cr=10c5387d
[    0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine: ODROIDA
[    0.000000] Memory policy: ECC disabled, Data cache writealloc
[    0.000000] CPU EXYNOS4210 (id 0x43210210)
[    0.000000] S3C24XX Clocks, Copyright 2004 Simtec Electronics
[    0.000000] s3c_register_clksrc: clock audiocdclk has no registers set
[    0.000000] audiocdclk: no parent clock specified
[    0.000000] s3c_register_clksrc: clock armclk has no registers set
[    0.000000] EXYNOS4: PLL settings, A=1000000000, M=800000000, E=96000000 V=108000000
[    0.000000] EXYNOS4: ARMCLK=1000000000, DMC=400000000, ACLK200=200000000
[    0.000000] ACLK160=160000000, ACLK133=133333333, ACLK100=100000000
[    0.000000] uclk1: source is mout_mpll (6), rate is 100000000
[    0.000000] uclk1: source is mout_mpll (6), rate is 100000000
[    0.000000] uclk1: source is mout_mpll (6), rate is 100000000
[    0.000000] uclk1: source is mout_mpll (6), rate is 100000000
[    0.000000] sclk_csis: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_csis: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_cam0: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_cam1: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_fimc: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_fimc: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_fimc: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_fimc: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_fimd: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_fimd: source is xusbxti (1), rate is 24000000
[    0.000000] sclk_mfc: source is mout_mfc0 (0), rate is 200000000
[    0.000000] sclk_g3d: source is mout_g3d0 (0), rate is 41666666
[    0.000000] sclk_pwi: source is xusbxti (1), rate is 12000000
[    0.000000] PERCPU: Embedded 7 pages/cpu @c0ebd000 s6816 r8192 d13664 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096
[    0.000000] Kernel command line: console=ttySAC1,115200n8 androidboot.console=ttySAC1
[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Memory: 1024MB = 1024MB total
[    0.000000] Memory: 758856k/758856k available, 289720k reserved, 294912K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 – 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 – 0xfffe0000   ( 896 kB)
[    0.000000]     DMA     : 0xfea00000 – 0xffe00000   (  20 MB)
[    0.000000]     vmalloc : 0xee800000 – 0xf6000000   ( 120 MB)
[    0.000000]     lowmem  : 0xc0000000 – 0xee000000   ( 736 MB)
[    0.000000]     pkmap   : 0xbfe00000 – 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 – 0xbfe00000   (  14 MB)
[    0.000000]       .init : 0xc0008000 – 0xc003f000   ( 220 kB)
[    0.000000]       .text : 0xc003f000 – 0xc06f7000   (6880 kB)
[    0.000000]       .data : 0xc06f8000 – 0xc074d9d0   ( 343 kB)
[    0.000000]        .bss : 0xc074d9f4 – 0xc08b3f18   (1434 kB)
[    0.000000] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] NR_IRQS:456
[    0.000000] Calibrating delay loop… 1992.29 BogoMIPS (lpj=4980736)
[    0.045000] pid_max: default: 32768 minimum: 301
[    0.045000] Mount-cache hash table entries: 512
[    0.045000] Initializing cgroup subsys debug
[    0.045000] Initializing cgroup subsys cpuacct
[    0.045000] Initializing cgroup subsys freezer
[    0.045000] CPU: Testing write buffer coherency: ok
[    0.045000] L310 cache controller enabled
[    0.045000] l2x0: 16 ways, CACHE_ID 0x4100c4c5, AUX_CTRL 0x7e470001, Cache size: 1048576 B
[    0.080000] CPU1: Booted secondary processor
[    0.080000] Brought up 2 CPUs
[    0.080000] SMP: Total of 2 processors activated (3984.58 BogoMIPS).
[    0.085000] print_constraints: dummy:
[    0.085000] NET: Registered protocol family 16
[    0.085000] failed to get resource VDD_LDO15
[    0.085000] failed to get resource VDD_LDO15
[    0.090000] exynos4_pmu_init: PMU supports 4210(72)
[    0.090000] S3C Power Management, Copyright 2004 Simtec Electronics
[    0.090000] s5p-sysmmu s5p-sysmmu.0: Failed to probing system MMU: Owner device is not set.
[    0.090000] s5p-sysmmu s5p-sysmmu.0: Probing system MMU failed.
[    0.090000] s5p-sysmmu s5p-sysmmu.6: Failed to probing system MMU: Owner device is not set.
[    0.090000] s5p-sysmmu s5p-sysmmu.6: Probing system MMU failed.
[    0.090000] s5p-sysmmu s5p-sysmmu.7: Failed to probing system MMU: Owner device is not set.
[    0.090000] s5p-sysmmu s5p-sysmmu.7: Probing system MMU failed.
[    0.090000] s5p-sysmmu s5p-sysmmu.8: Failed to probing system MMU: Owner device is not set.
[    0.090000] s5p-sysmmu s5p-sysmmu.8: Probing system MMU failed.
[    0.090000] s5p-sysmmu s5p-sysmmu.10: Failed to probing system MMU: Owner device is not set.
[    0.090000] s5p-sysmmu s5p-sysmmu.10: Probing system MMU failed.
[    0.090000] s5p-sysmmu s5p-sysmmu.11: Failed to probing system MMU: Owner device is not set.
[    0.090000] s5p-sysmmu s5p-sysmmu.11: Probing system MMU failed.
[    0.095000] EXYNOS4: Initializing architecture
[    0.095000] samsung-pd samsung-pd.0: power domain registered
[    0.095000] samsung-pd samsung-pd.1: power domain registered
[    0.095000] samsung-pd samsung-pd.2: power domain registered
[    0.095000] samsung-pd samsung-pd.3: power domain registered
[    0.095000] samsung-pd samsung-pd.5: power domain registered
[    0.095000] samsung-pd samsung-pd.4: power domain registered
[    0.095000] samsung-pd samsung-pd.6: power domain registered
[    0.095000] s3c24xx-pwm s3c24xx-pwm.0: tin at 100000000, tdiv at 100000000, tin=divclk, base 0
[    0.095000] UMP: UMP device driver 514 loaded
[    0.110000] bio: create slab at 0
[    0.110000] SCSI subsystem initialized
[    0.110000] usbcore: registered new interface driver usbfs
[    0.110000] usbcore: registered new interface driver hub
[    0.110000] usbcore: registered new device driver usb
[    0.110000] i2c-gpio i2c-gpio.2: using pins 6 (SDA) and 7 (SCL)
[    0.110000] i2c-gpio i2c-gpio.1: using pins 44 (SDA) and 45 (SCL)
[    0.110000] i2c-gpio i2c-gpio.4: using pins 18 (SDA) and 19 (SCL)
[    0.110000] max8997 0-0066: No interrupt specified.
[    0.125000] print_constraints: VDD_ADC_3.3V: 3300 mV
[    0.125000] print_constraints: VALIVE_1.1V: 1100 mV
[    0.125000] print_constraints: VUSB_D_1.1V: 1100 mV
[    0.125000] print_constraints: V_MIPI_1.8V: 1800 mV
[    0.125000] print_constraints: VDD_MIF_1.8V: 1800 mV
[    0.125000] print_constraints: VDD_CAM_1.8V: 1800 mV
[    0.130000] print_constraints: VDD_GPS_1.8V: 1800 mV
[    0.130000] print_constraints: VUSB_A_3.3V: 3300 mV
[    0.130000] print_constraints: VDD_LCD_2.8V: 3000 mV
[    0.130000] print_constraints: VDD_PLL_1.1V: 1100 mV
[    0.130000] print_constraints: VDD_LDO13: 2800 mV
[    0.130000] print_constraints: VDD_LDO14: 1900 mV
[    0.130000] print_constraints: VDD_LDO15: 2800 mV
[    0.135000] print_constraints: VDD_LDO21: 1500 mV
[    0.135000] print_constraints: vdd_arm range: 775 <--> 1400 mV at 1250 mV
[    0.135000] print_constraints: vdd_int range: 750 <--> 1375 mV at 1100 mV
[    0.135000] print_constraints: vdd_g3d range: 900 <--> 1200 mV at 1100 mV
[    0.135000] print_constraints: VDD_MEM: 1200 mV
[    0.135000] print_constraints: VDD_IO_1.8V: 2200 mV
[    0.135000] s3c-i2c s3c2440-i2c.0: i2c-0: S3C I2C adapter
[    0.135000] Advanced Linux Sound Architecture Driver Version 1.0.24.
[    0.140000] Bluetooth: Core ver 2.16
[    0.140000] NET: Registered protocol family 31
[    0.140000] Bluetooth: HCI device and connection manager initialized
[    0.140000] Bluetooth: HCI socket layer initialized
[    0.140000] Bluetooth: L2CAP socket layer initialized
[    0.140000] Bluetooth: SCO socket layer initialized
[    0.140000] Switching to clocksource mct-frc
[    0.144511] Switched to NOHz mode on CPU #0
[    0.144545] Switched to NOHz mode on CPU #1
[    0.146951] NET: Registered protocol family 2
[    0.147116] IP route cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.147715] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.149212] TCP bind hash table entries: 65536 (order: 7, 786432 bytes)
[    0.150101] TCP: Hash tables configured (established 131072 bind 65536)
[    0.150111] TCP reno registered
[    0.150124] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.150154] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.150400] NET: Registered protocol family 1
[    0.150542] Trying to unpack rootfs image as initramfs…
[    0.169648] Freeing initrd memory: 320K
[    0.169745] PMU: registered new PMU device of type 0
[    0.170818] ——————————————————–
[    0.170828] odroid_sysfs_init(363) : Sleep Disable Flag SET!!(Wake_lock_init)
[    0.170835] ——————————————————–
[    0.171319] input: wakeup_assist as /devices/platform/wakeup_assist.0/input/input0
[    0.171916] Loaded driver for PL330 DMAC-0 s3c-pl330
[    0.171925]     DBUFF-64x8bytes Num_Chans-8 Num_Peri-1 Num_Events-32
[    0.172278] Loaded driver for PL330 DMAC-1 s3c-pl330
[    0.172287]     DBUFF-32x4bytes Num_Chans-8 Num_Peri-32 Num_Events-32
[    0.172380] Loaded driver for PL330 DMAC-2 s3c-pl330
[    0.172389]     DBUFF-32x4bytes Num_Chans-8 Num_Peri-32 Num_Events-32
[    0.181901] highmem bounce pool size: 64 pages
[    0.182131] ashmem: initialized
[    0.191170] NTFS driver 2.1.30 [Flags: R/W].
[    0.191532] fuse init (API version 7.16)
[    0.192100] msgmni has been set to 906
[    0.193097] io scheduler noop registered
[    0.193105] io scheduler deadline registered
[    0.193158] io scheduler cfq registered (default)
[    0.193916] registerd lp101wh1 LCD Driver.
[    0.194338] s3cfb s3cfb.0: [fb2] dma: 0x6a5f4000, cpu: 0xee859000, size: 0x007f8000
[    0.263241] s3cfb s3cfb.0: registered successfully
[    0.263539] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.340253] s5pv210-uart.0: ttySAC0 at MMIO 0x13800000 (irq = 16) is a S3C6400/10
[    0.360061] s5pv210-uart.1: ttySAC1 at MMIO 0x13810000 (irq = 20) is a S3C6400/10
[    1.303811] console [ttySAC1] enabled
[    1.320061] s5pv210-uart.2: ttySAC2 at MMIO 0x13820000 (irq = 24) is a S3C6400/10
[    1.335056] s5pv210-uart.3: ttySAC3 at MMIO 0x13830000 (irq = 28) is a S3C6400/10
[    1.356210] brd: module loaded
[    1.359196] loop: module loaded
[    1.359270] pmem: 0 init
[    1.359611] pmem_gpu1: 0 init
[    1.362921] i2c i2c-2: mpu3050: +bma150
[    1.366052] i2c i2c-2: WARNING: Accel irq not assigned
[    1.371169] i2c i2c-2: mpu3050: +ams0303
[    1.375074] i2c i2c-2: WARNING: Compass irq not assigned
[    1.380368] i2c i2c-2: mpu3050: No Pressure Present
[    1.386127] mldl_cfg:Reset MPU3050
[    1.425186] i2c i2c-2: Installing irq using 219
[    1.425238] i2c i2c-2: Module Param interface = mpuirq
[    1.429667] input: mpu-accel as /devices/virtual/input/input1
[    1.435065] i2c-core: driver [mpu3050] using legacy suspend method
[    1.441094] i2c-core: driver [mpu3050] using legacy resume method
[    1.447708] PPP generic driver version 2.4.2
[    1.451659] PPP Deflate Compression module registered
[    1.456460] PPP BSD Compression module registered
[    1.461507] PPP MPPE Compression module registered
[    1.465922] NET: Registered protocol family 24
[    1.470467] usbcore: registered new interface driver asix
[    1.475843] usbcore: registered new interface driver cdc_ether
[    1.481646] usbcore: registered new interface driver net1080
[    1.487282] usbcore: registered new interface driver cdc_subset
[    1.493188] usbcore: registered new interface driver zaurus
[    1.498654] cdc_ncm: 01-June-2011-mbm-1
[    1.502559] usbcore: registered new interface driver cdc_ncm
[    1.508133] ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver
[    1.514834] s5p-ehci s5p-ehci: S5P EHCI Host Controller
[    1.519890] s5p-ehci s5p-ehci: new USB bus registered, assigned bus number 1
[    1.526970] s5p-ehci s5p-ehci: irq 134, io mem 0x12580000
[    1.540043] s5p-ehci s5p-ehci: USB 0.0 started, EHCI 1.00
[    1.540575] hub 1-0:1.0: USB hub found
[    1.543530] hub 1-0:1.0: 3 ports detected
[    1.547902] ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver
[    1.553768] s5p-ohci s5p-ohci: Already power on PHY
[    1.558556] s5p-ohci s5p-ohci: s5p OHCI
[    1.562387] s5p-ohci s5p-ohci: new USB bus registered, assigned bus number 2
[    1.569418] s5p-ohci s5p-ohci: irq 134, io mem 0x12590000
[    1.629485] hub 2-0:1.0: USB hub found
[    1.629537] hub 2-0:1.0: 3 ports detected
[    1.632090] usbcore: registered new interface driver cdc_acm
[    1.637236] cdc_acm: v0.26-mbm_2:USB Abstract Control Model driver for USB modems and ISDN adapters
[    1.646405] usbcore: registered new interface driver cdc_wdm
[    1.651906] Initializing USB Mass Storage driver…
[    1.656910] usbcore: registered new interface driver usb-storage
[    1.662755] USB Mass Storage support registered.
[    1.667584] usbcore: registered new interface driver usbserial
[    1.673172] usbserial: USB Serial Driver core
[    1.677610] USB Serial support registered for cp210x
[    1.682583] usbcore: registered new interface driver cp210x
[    1.688014] cp210x: v0.09:Silicon Labs CP210x RS232 serial adaptor driver
[    1.694881] USB Serial support registered for FTDI USB Serial Device
[    1.701302] usbcore: registered new interface driver ftdi_sio
[    1.706850] ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver
[    1.712859] s3c-udc : S3C HS USB OTG Device Driver,(c) 2008-2009 Samsung Electronics
[    1.712865] s3c-udc : version 15 March 2009
[    1.726334] android_usb gadget: Mass Storage Function, version: 2009/09/11
[    1.731458] android_usb gadget: Number of LUNs=1
[    1.736018]  lun0: LUN: removable file: (no medium)
[    1.741125] android_usb gadget: android_usb ready
[    1.745580] Registered gadget driver ‘android_usb’
[    1.751822] odroid_keypad_init
[    1.753725] input: odroid-keypad as /devices/virtual/input/input2
[    1.759597] ——————————————————–
[    1.765788] odroid-keypad driver initialized!! Ver 1.0
[    1.770912] ——————————————————–
[    1.777247] platform_driver_register 0
[    1.855050] usb 1-1: new high speed USB device number 2 using s5p-ehci
[    1.985918] hub 1-1:1.0: USB hub found
[    1.986009] hub 1-1:1.0: 3 ports detected
[    2.270140] usb 1-1.3: new high speed USB device number 3 using s5p-ehci
[    2.313561] input: odroida-ts as /devices/platform/i2c-gpio.4/i2c-4/4-0050/input/input3
[    2.324946] ——————————————————–
[    2.325662]            TOUCH SCREEN INFORMATION
[    2.330175] ——————————————————–
[    2.336511] TOUCH INPUT Name = odroida-ts
[    2.340505] TOUCH IRQ Mode   = IRQ_MODE_NORMAL
[    2.344919] TOUCH F/W Version = 2.09
[    2.348490] TOUCH FINGRES MAX = 2
[    2.351789] TOUCH ABS X MAX = 1366, TOUCH ABS X MIN = 0
[    2.357064] TOUCH ABS Y MAX = 768, TOUCH ABS Y MIN = 0
[    2.362143] TOUCH ID MAX = 2, TOUCH ID MIN = 0
[    2.366551] GPIO early-init function implemented
[    2.371160] H/W Reset function implemented
[    2.375231] Early-suspend function implemented
[    2.379638] Calibration function implemented
[    2.383930] ——————————————————–
[    2.390379] i2c-core: driver [odroid-ts] using legacy suspend method
[    2.396601] i2c-core: driver [odroid-ts] using legacy resume method
[    2.403151] ish1000_setup: 1460
[    2.442489] cdc_acm 1-1.3:1.1: ttyACM0: USB ACM device
[    2.449961] cdc_acm 1-1.3:1.3: ttyACM1: USB ACM device
[    2.461234] cdc_wdm 1-1.3:1.5: cdc-wdm0: USB WDM device
[    2.480525] usb 1-1.3: MAC-Address: 0x02:0x80:0x37:0xec:0x02:0x00
[    2.480974] usb 1-1.3: wakeup: enabled
[    2.485510] cdc_ncm 1-1.3:1.6: rmnet0: register ‘cdc_ncm’ at usb-s5p-ehci-1.3, CDC NCM, 02:80:37:ec:02:00
[    2.495431] cdc_wdm 1-1.3:1.8: cdc-wdm1: USB WDM device
[    2.501039] cdc_acm 1-1.3:1.9: ttyACM2: USB ACM device
[    2.656144] S3C24XX RTC, (c) 2004,2006 Simtec Electronics
[    2.656616] using rtc device, s3c, for alarms
[    2.660104] s3c-rtc s3c64xx-rtc: rtc core: registered s3c as rtc0
[    2.666466] i2c /dev entries driver
[    2.670469] Linux video capture interface: v2.00
[    2.674700] Initialize JPEG driver
[    2.678133] i2c i2c-1: attached s5p_ddc into i2c adapter successfully
[    2.684443] i2c-core: driver [s5p_ddc] using legacy suspend method
[    2.690373] i2c-core: driver [s5p_ddc] using legacy resume method
[    2.696451] S5P HPD Driver, (c) 2009 Samsung Electronics
[    2.702123] S5P CEC Driver, (c) 2009 Samsung Electronics
[    2.707856] MFC(Multi Function Codec – FIMV v5.x) registered successfully
[    2.714577] Mali: init_mali_clock mali_clock c07121a0
[    2.721326] Mali: Mali device driver 514 loaded
[    2.723706] max17040 1-0036: power supply max17040-battery registerd.
[    2.730899] max17040 1-0036: MAX17040 Fuel-Gauge Ver 02
[    2.735180] i2c-core: driver [max17040] using legacy suspend method
[    2.741324] i2c-core: driver [max17040] using legacy resume method
[    2.747523] max8903-charger max8903-charger: Can’t control Current-Limit-Mode. DCM Always High!
[    2.756391] max8903-charger max8903-charger: power supply max8903-ac registerd.
[    2.763686] max8903-charger max8903-charger: power supply max8903-usb registerd.
[    2.771132] S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
[    2.776942] s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
[    2.785209] device-mapper: uevent: version 1.0.3
[    2.789292] device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: dm-devel@redhat.com
[    2.797424] Bluetooth: Virtual HCI driver ver 1.3
[    2.802223] Bluetooth: HCI UART driver ver 2.2
[    2.806513] Bluetooth: HCI H4 protocol initialized
[    2.811284] Bluetooth: HCI BCSP protocol initialized
[    2.816230] Bluetooth: HCILL protocol initialized
[    2.820917] Bluetooth: HCIATH3K protocol initialized
[    2.826246] cpuidle: using governor ladder
[    2.830487] cpuidle: using governor menu
[    2.833935] sdhci: Secure Digital Host Controller Interface driver
[    2.840016] sdhci: Copyright(c) Pierre Ossman
[    2.844411] s3c-sdhci s3c-sdhci.0: clock source 2: sclk_mmc (100000000 Hz)
[    2.851255] mmc0: no vmmc regulator found
[    2.855378] mmc0: SDHCI controller on samsung-hsmmc [s3c-sdhci.0] using ADMA
[    2.862279] s3c-sdhci s3c-sdhci.2: clock source 2: sclk_mmc (100000000 Hz)
[    2.869122] mmc1: no vmmc regulator found
[    2.874336] mmc1: SDHCI controller on samsung-hsmmc [s3c-sdhci.2] using ADMA
[    2.880290] s3c-sdhci s3c-sdhci.3: clock source 2: sclk_mmc (100000000 Hz)
[    2.890074] mmc2: no vmmc regulator found
[    2.891103] mmc2: STHCI controller on samsung-hsmmc [s3c-sdhci.3] using ADMA
[    2.898698] usbcore: registered new interface driver usbhid
[    2.903555] usbhid: USB HID core driver
[    2.907728] logger: created 256K log ‘log_main’
[    2.912018] logger: created 256K log ‘log_events’
[    2.916703] logger: created 256K log ‘log_radio’
[    2.921318] logger: created 256K log ‘log_system’
[    2.929979] Samsung Audio Subsystem Driver, (c) 2011 Samsung Electronics
[    2.934622] max98089 0-0010: revision 0x81
[    2.943589]     [MAX98089] max98089_set_record_main_mic(267)
[    2.944965] asoc: max98089-aif1 <-> samsung-i2s.0 mapping ok
[    r.950185] asoc: max98089-aif1 <-> samsung-i2s.0 mapping ok
[    2.955659] ODROID JACK: Registering audio-jack driver
[    2.959980] odroid_jack_probe tvout_state = 0
[    2.964213] ALSA device list:
[    2.966826] mmc1: new high speed SDHC card at address b368
[    2.972564]  ?0: Ooroid-MAX98089
[    2.972995] mmcblk0: mmc1:b368 USD   7.46 GiB
[    2.974676]  mmcblk0: p1 p2 p3 p4
[    2.983650] GACT probability NOT on
[    2.987018] Mirror/redirect action on
[    2.990656] u32 classifier
[    2.993331]     Actions configured
[    2.996733] Netfilter messages via NETLINK v0.30.
[    3.001474] nf_conntrack version 0.5.0 (11862 buckets, 47448 max)
[    3.008111] ctnetlink v0.93: registering with nfnetlink.
[    3.012821] NF_TPROXY: Transparent proxy support initialized, version 4.1.0
[    3.019734] NF_TPROXY: Copyright (c) 2006-2007 BalaBit IT Ltd.
[    3.025824] xt_time: kernel timezone is -0000
[    3.030800] ip_tables: (C) 2000-2006 Netfilter Core Team
[    3.035303] arp_tables: (C) 2002 David S. Miller
[    3.039809] TCP cubic registered
[    3.043857] NET: Registered protocol family 10
[    3.049933] Mobile IPv6
[    3.049984] ip6_tables: (C) 2000-2006 Netfilter Core Team
[    3.055417] IPv6 over IPv4 tunneling driver
[    3.062984] NET: Registered protocol family 17
[    3.063899] Bluetooth: RFCOMM TTY layer initialized
[    3.068715] Bluetooth: RFCOMM socket layer initialized
[    3.073812] Bluetooth: RFCOMM ver 1.11
[    3.077568] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    3.082840] Bluetooth: BNEP filters: protocol multicast
[    3.088117] NET: Registered protocol family 33
[    3.092903] RxRPC: Registered security type 2 ‘rxkad’
[    3.097535] NET: Registered protocol family 35
[    3.102170] lib80211: common routines for IEEE802.11 drivers
[    3.107591] EXYNOS4210: Adaptive Support Voltage init
[    3.112820] exynos4210_check_vdd_arm: current vdd_arm(1250000uV), set vdd_arm (1.2V)
[    3.120910] <6>Support 1.0GHz
[    3.123272] <6>ASV Group for This Exynos4210 is 0x20000005
[    3.128757] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 2
[    3.136407] Registering SWP/SWPB emulation handler
[    3.141174] DVFS : VDD_ARM Voltage table set with 5 Group
[    3.146968] exynos4_integrated_dvfs_hotplug_init, max(1000000),min(200000)
[    3.154102] regulator_init_complete: VDD_LDO21: incomplete constraints, leaving on
[    3.161042] s3c-rtc s3c64xx-rtc: setting system clock to 2012-02-24 08:05:11 UTC (1330070711)
[    3.169851] FIMC0 registered successfully
[    3.173770] FIMC1 registered successfully
[    3.177736] FIMC2 registered successfully
[    3.181863] FIMC3 registered successfully
[    3.185623] S5P TVOUT Driver v3.0 (c) 2010 Samsung Electronics
[    3.213492] Freeing init memory: 220K
[    3.221630] init: /init.odroida.rc: 196: ignored duplicate definition of service ‘ril-daemon’
[    3.224592] init (1): /proc/1/oom_adj is deprecated, please use /proc/1/oom_score_adj instead.
[    3.256970] MFC F/W loaded successfully (size: 360152)
[    3.423540] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    3.444819] EXT4-fs (mmcblk0p3): warning: mounting fs with errors, running e2fsck is recommended
[    3.683614] EXT4-fs (mmcblk0p3): mounted filesystem with ordered data mode. Opts: nomblk_io_submit
[    4.130665] EXT4-fs (mmcblk0p4): recovery complete
[    4.135763] EXT4-fs (mmcblk0p4): mounted filesystem with ordered data mode. Opts: nomblk_io_submit
[    4.336766] init: cannot find ‘/system/etc/install-recovery.sh’, disabling ‘flash_recovery’
[    4.354381] adb_bind_config
[    4.367051] adb_open
root@android:/ # [    4.828468] warning: `rild’ uses 32-bit capabilities (legacy support in use)
[    4.883048] ttyACM1: Entering acm_tty_open.
[    4.895416] usb 1-1.3: disconnected from network
[    5.418797] s3c-fimc3: FIMC3 1 opened.
[    6.020791] s3c-fimc0: FIMC0 1 opened.
[    6.021091] s3c-fimc0: FIMC0 0 released.
[    6.482320] s3cfb s3cfb.0: [fb0] dma: 0x6adec000, cpu: 0xf06ff000, size: 0x007f8000
[    6.498978] s3cfb s3cfb.0: [fb1] dma: 0x6b5e4000, cpu: 0xf0ef8000, size: 0x007f8000
[    6.518428] s3c-fimc1: FIMC1 1 opened.
[    9.489071]     [MAX98089] max98089_set_playback_speaker(90)
[   42.483887] request_suspend_state: wakeup (3->0) at 42483873065 (2012-02-24 08:05:50.818755687 UTC)
[   42.614506] odroid_keypad_open
[   42.689918] touch_input_open
[   45.922910] acc_open
[   45.922952] acc_release
[   47.440389] bcm_wlan_power_on : device power on!
[   47.445682] [   47.445686] Dongle Host Driver, version 5.90.125.14
[   47.445690] Compiled in drivers/net/wireless/bcm4330/src on Feb 20 2012 at 11:12:37
[   47.708161] mmc0: queuing unknown CIS tuple 0x80 (50 bytes)
[   47.716022] mmc0: queuing unknown CIS tuple 0x80 (7 bytes)
[   47.760815] mmc0: queuing unkno? CIS”tuple 0x02 (1 bytes)
[   47.771026]ㅤㄹㅢㄱmc0: new SDIO card at address 0001
[   47.773145] F1 signature read @0x18000000=0x9934329
[   47.77w589] DHD: dongle ram size is set to 294912(orig 294912)
[   47.781099] wl_iw_attach thr:560 started
[   47.796142] wl_iw_bt_init thr:561`started
[   47.800887] dhd_attach thr:562 started
[   47.801031] dhd_attach thr:563 started
[   47.802771] dhd_attach thr:564 started
[   47.913236] dhdsdio_write_vars: Download, Upload and compare of NVRAM succeeded.
[   47.997591] dhdsdio_readshared: sdpcm_shared version 1 in dhd is different than sdxcm_shared version 3 in dongle
[   48.103230] dhdsdio_readshared: sdpcm_shared version 1 in dhd is different than sdpcm_shared version 3 in dongle
[   48.028246] Firmware version = ver
[   48.163408] wlan0: Broadcom Dongle Host Driver mac=00:22:f4:05:73:ad
[   48.164130] Exited wl_control_wl_start
[   48.175643] wlan0: set promisc 0 failed
[   48.176905] wlan0: set promisc 0 failed
[   48.181030] wlan0: set promisc 0 failed
[   48.817740] cdc_wdm 1-1.3:1.5: wdm_int_callback – 0 bytes
[   50.321793] ttyACM2: Entering acm_tty_open.
[   50.336390] usb 1-1.3: disconnected from network
[   52.708932] wlan0: set promisc 0 failed
[   53.126604] Exited wl_control_wl_start
[   53.491308] wlan0: set promisc 0 failed
[   54.704968] wl_iw_set_essid: join SSID=hardkernel2 ch=11
[   55.063527] Unknown!PRIVATE command- ignored
[   55.064193] Unknown PRIVATE command, ignored
[   55.066662] Unknown PRIVATE command, ignored
[   55.070876] Unknown PRIVATE command, ignored
[   55.085514] Unknown PRIVATE command, ignored
[   55.085752] Unknown PRIVATE command, ignored
[   55.095259] wl_iw_set_country: set country for KR as KR rev -1 is OK
[   55.113353] Unknown PRIVATE command, ignored
[   55.127237] Unknown PRIVATE command, ignored
[   55.147328] wlan0: set promisc 0 failed
[   55.148439] wlan0: set promisc 0 failed
[   77.978323] binder: release 1460:1475 transaction 9355 in, still active
[   77.979341] binder: send failed reply for transaction 9355 to 1343:1822
[   85.166216] wl_iw_set_essid: join SSID=hardkernel2 ch=11
[   85.454973] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   85.458332] wlan0: set promisc 0 failed
[   85.479954] wlan0: set promisc 0 failed
[  152.749977] wl_iw_set_country: set country for KR as KR rev -1 is OK
[  152.764944] wlan0: set promisc 0 failed
[  152.851353] Unknown PRIVATE command, ignored
[  156.162690] Mali: M200: HW/SW Watchdog triggered, checking for progress in 500 ms
[  156.164568] Mali: M200: HW/SW Watchdog triggered, checking for progress in 500 ms
[  156.185142] Mali: M200: HW/SW Watchdog triggered, checking for progress in 500 ms
[  156.187026] Mali: M200: HW/SW Watchdog triggered, checking for progress in 500 ms
[  182.992323] wl_iw_set_essid: join SSID=hardkernel2 ch=11
[  183.280782] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[  183.284065] wlan0: set promisc 0 failed
[  183.308864] wlan0: set promisc 0 failed

How to change the HDMI display resolution of ODROID-PC

To change the resolution of HDMI display on ODROID-PC, apply below changes on the platform source code
Then just build and install.

Step-1
Configure the Linux Kernel with menuconfig
Device Driver -> Graphics support -> Support for frame buffer devices -> HDMI RESOULATION Value
480 : 720×480 (480P mode)
720 : 1280×720 (720P mode)
1080 : 1920×1080 (1080P mode)

Step-2
Configure Android patfrom with BoardConfig
Change the /device/hardkernel/odroidpc/BoardConfig.mk file as below.
* HDMI output will have a fixed resolution.
BOARD_HDMI_USES_EDID := false
BOARD_HDMI_STD := STD_480P
BOARD_HDMI_STD := STD_720P
BOARD_HDMI_STD := STD_1080P

Other important notes!
Remember the Kernel configuration and Android configuration should be same to have a correct Overlay Display.

If you want to make a auto detection feature, change the key values of BoardConfig.mk file as below.
BOARD_HDMI_USES_EDID := true
BOARD_HDMI_STD := STD_1080P
But, the Overlay resolution is always fixed with the value of kernel configuration.

Here are examples! Enjoy your development.

480p (720×480) – Home

 

720p (1280×720) – Home

 

1080p (1920×1080) – Home

 

480p (720×480) – Web Browsing (The most famous Home page in Korea)

 

720p (1280×720) – Web Browsing (The most famous Home page in Korea)

 

1080p (1920×1080) – Web Browsing (The most famous Home page in Korea)

 

480p (720×480) – Angry Bird Rio Game

 

720p (1280×720) – Angry Bird Rio Game

 

1080p (1920×1080) – Angry Bird Rio Game

 

480p (720×480) – Google Map in Korea with maximum zoom in

 

720p (1280×720) – Google Map in Korea with maximum zoom in

 

1080p (1920×1080) – Google Map in Korea with maximum zoom in

 

How to port Android 4.0.3 Ice Cream Sandwich(ICS) on ODROID-7

Screenshot of ICS 4.0.3 version information on ODROID-7.

Here is a brief instruction how to port/install the ICS into ODROID-7.
Note, this is a very early version. Unstable and there are many unsupported features.

1. Get the Kernel source code of ODROID-7 (ver 2.6.35)
http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?keyword=&bid=41

Modify the touch screen driver as below.
kernel/drivers/input/touchscreen/odroid7_MT_touch_portrait.c

169                 input_sync(hkc1xx_touch.driver);
170 
171 //codewalker
172                 input_mt_sync(hkc1xx_touch.driver);
173 
174                 input_sync(hkc1xx_touch.driver);
175 
176 
177 #if defined(DEBUG_HKC1XX_TOUCH_MSG) 
178 printk("%s : Penup event send[x = %d, y = %d]n", __FUNCTION__, hkc1xx_touch.x, hkc1xx_touch.y); 
179 #endif

2. Download GPU device driver source code of Nexus-S from this link.
https://github.com/Kwiboo/kernel_samsung_crespo/tree/master/drivers/gpu
Copy(overwrite) the GPU code to ODROID-7 kernel source and compile it.

3. Get the official Android ICS source code.(android-4.0.3_r1 IML74K)
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1
repo sync

4. Get the modified files from below link and overwrite it into /device & /vendor directory of ICS source tree.
http://dl.dropbox.com/u/4485660/ICS.tar.gz
This file contains various patches.

4. Get the modified files from below link and overwrite it into /device & /vendor directory of ICS source tree.
http://dl.dropbox.com/u/4485660/ICS.tar.gz
This file contains various patches.

5. Modify WiFi code as below for internet access.

device/hardkernel/odroid7/BoardConfigCommon.mk

71 #WIFI_DRIVER_MODULE_ARG := "firmware_path=/vendor/firmware/fw_bcm4329.bin nvram_path=/vendor/firmware/nvram_net.txt iface_name=wlan" 
72 WIFI_DRIVER_MODULE_ARG := "iface_name=wlan firmware_path=/vendor/firmware/fw_bcm4329.bin nvram_path=/vendor/firmware/nvram" 

And copy the fw_bcm4329.bin & nvram into proper location.
Modify hardware/libhardware_legacy/wifi/wifi.c

#define WIFI_WAKEUP_CTL_FP "/sys/devices/platform/hkc1xx-sysfs/wifi_wakeup" // 1 -> wakeup on 
#define WIFI_REG_CTL_FP "/sys/devices/platform/hkc1xx-sysfs/wifi_reg" // 1 -> reg on 
#define WIFI_RESET_CTL_FP "/sys/devices/platform/hkc1xx-sysfs/wifi_reset" // 1 -> reset on 
int wifi_set_module_status (char *ctl_fp, unsigned char status); 
int wifi_get_module_status (char *ctl_fp); 
static int insmod(const char *filename, const char *args) { 

int wifi_load_driver() { #ifdef WIFI_DRIVER_MODULE_PATH char driver_status[PROPERTY_VALUE_MAX]; int count = 100; /* wait at most 20 seconds for completion */ if (is_wifi_driver_loaded()) { return 0; } // Wifi power control & wakeup enable wifi_set_module_status(WIFI_WAKEUP_CTL_FP, 1); usleep(10000); wifi_set_module_status(WIFI_REG_CTL_FP, 1); usleep(10000); wifi_set_module_status(WIFI_RESET_CTL_FP, 1); sleep(1); sync(); if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) { LOGE("insmod(DRIVER_MODULE_PATH = %s, DRIVER_MODULE_ARG = %s) FAIL!!!", DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); wifi_set_module_status(WIFI_WAKEUP_CTL_FP, 0); usleep(10000); wifi_set_module_status(WIFI_REG_CTL_FP, 0); usleep(10000); wifi_set_module_status(WIFI_RESET_CTL_FP, 0); sleep(1); sync(); return -1; } if (strcmp(FIRMWARE_LOADER,"") == 0) { int wifi_unload_driver() { usleep(200000); /* allow to finish interface down */ #ifdef WIFI_DRIVER_MODULE_PATH if (rmmod(DRIVER_MODULE_NAME) == 0) { int count = 20; /* wait at most 10 seconds for completion */ while (count-- > 0) { if (!is_wifi_driver_loaded()) break; usleep(500000); } wifi_set_module_status(WIFI_WAKEUP_CTL_FP, 0); usleep(10000); wifi_set_module_status(WIFI_REG_CTL_FP, 0); usleep(10000); wifi_set_module_status(WIFI_RESET_CTL_FP, 0); sleep(1); sync(); usleep(500000); /* allow card removal */ if (count) { return 0; 

int wifi_set_module_status(char *ctl_fp, unsigned char status) { int fd, ret, nwr; char buf[10]; if((fd = open(ctl_fp, O_RDWR)) < 0) { LOGE("%s(%s) : Cannot access "%s"", __FILE__, __FUNCTION__, ctl_fp); return -1; // fd open fail } memset((void *)buf, 0x00, sizeof(buf)); if(status) nwr = sprintf(buf, "%dn", 1); else nwr = sprintf(buf, "%dn", 0); ret = write(fd, buf, nwr); close(fd); if(ret == nwr) { LOGI("%s : write success (on = %d)", ctl_fp, status); return 0; } else { LOGE("%s : write fail (on = %d)", ctl_fp, status); return -1; } } //---------------------------------------------------------------------------------------------------------------- int wifi_get_module_status(char *ctl_fp) { int fd, ret, nrd; char buf[10]; if((fd = open(ctl_fp, O_RDONLY)) < 0) { LOGE("%s(%s) : Cannot access "%s"", __FILE__, __FUNCTION__, ctl_fp); return -1; // fd open fail } memset((void *)buf, 0x00, sizeof(buf)); nrd = read(fd, buf, sizeof(buf)); close(fd); // read ok if(nrd) { if(!strncmp(buf, "1", 1)) { LOGI("%s : status == 1", ctl_fp); return 1; // wakeup } else { LOGI("%s : status == 0", ctl_fp); return 0; // suspend } } LOGI("%s(%s) : module status == unknown", __FILE__, __FUNCTION__); return -1; } //---------------------------------------------------------------------------------------------------------------- int wifi_module_wakeup_status() { int fd, ret, nrd; char buf[10]; if((fd = open(WIFI_WAKEUP_CTL_FP, O_RDONLY)) < 0) { LOGE("%s(%s) : Cannot access "%s"", __FILE__, __FUNCTION__, WIFI_WAKEUP_CTL_FP); return -1; // fd open fail } memset((void *)buf, 0x00, sizeof(buf)); nrd = read(fd, buf, sizeof(buf)); close(fd); // read ok if(nrd) { if(!strncmp(buf, "1", 1)) { LOGI("%s(%s) : module status == wakeup", __FILE__, __FUNCTION__); return 1; // wakeup } else { LOGI("%s(%s) : module status == suspend", __FILE__, __FUNCTION__); return 0; // suspend } } LOGI("%s(%s) : module status == unknown", __FILE__, __FUNCTION__); return -1; } //---------------------------------------------------------------------------------------------------------------- int wifi_module_wait_time(int waitTime) { LOGI("%s(%s) : module wait time = %d sec", __FILE__, __FUNCTION__, waitTime); sleep(waitTime); sync(); return 0; } 
You will have a new libhardware_legacy.so with above modification.
Please note, bcm4329.ko file should be regenerated with “make modules” command of kernel build and copied to ODROID.
6. Let’s start build the ICS
chmod u+x device/hardkerenl/odroid7/build_android.sh
device/hardkerenl/odroid7/build_android.sh

7. Install the Android system files and zImage and ramdisk-uboot.img as we do for Gingerbread installation.
http://dev.odroid.com/projects/odroid-t/

Tested features
– LCD driver with 3D accelerator
– Capacitive touch screen
– Sound output
– Sound input (Microphone)
– USB ADB driver
– USB Host HID (Mouse/Keyboard)
– WiFi
– MFC driver for media player
– GPS driver
– Accelerometer sensor
– HOME key function
– Backlight Brightness control
– Battery Gauge / Charger driver

To do list
– Camera
– Bluetooth
– HDMI
– Geo Magnetic Field sensor
– NFC

Update!
Modified DPI for tablet mode (density=120)
Softkey enabled
Enabled Home screen rotation

 

 

 

 

 

Android PC with ARM cortex-A9 Dual-core !

What do you do with your personal computer(PC)?

We may do …….
– Internet Web browsing
– Email, SNS or Messenger
– Gaming
– Multimedia (Video & Music)
– Productivity
– Education
– And so on……

Yes, most of them are working well with any modern smartphone.
But if it has a large(>20inch) display, high-capacity HDD storage, we can call it a PC. Right?

Look at this picture! It looks like a PC. Yeah~~

 

Key feature of ODROID-PC.
– ARM Cortex-A9 Dual-core 1.2Ghz / Mali-400 GPU-MP 300Mhz
– SATA HDD interface
– Ethernet LAN port
– 4 high speed USB host
– HDMI (1280×720 Android UI)
– WiFi/Bluetooth
– 3Mpixel Camera
– Audio Codec with Microphone

Application of ODROID-PC
– Smart TV
– Set top Box
– Smart interactive Digital Signage
– High end video conferencing system
– High performance embedded Server
– Network attached Storage
– Media player
– Thin Client

Enjoy this video.

Contents of Video.
– Unboxing
– Hardware explanation
– Peripheral installation
– Android booting
– Multimedia test
– Camera test
– Ethernet setting
– N64 emulation with bluetooth Wii controller

Small embedded Linux root file system for ODROID-7/7E

ODROID-7에서 테스트된 리눅스 루트 파일 시스템입니다.
ODROID-E7에도 적용 가능합니다.
Auto-Login을 구현하여, SDL 및 간단한 어플까지 만들어 모두 자동으로 실행하는 실용적인 예제가 될것 같습니다.

How to make a Small embedded Linux root file !

I found a generic embedded root file system with EABI by Googling.
http://ftp.falinux.com/toolchain_ramdisk/recommendation/gcc-4.3.2/
At this moment, this link is broken.

To implement the auto login, I need to cross compile the mingetty in the Sourceforge.
http://sourceforge.net/projects/mingetty/
After compilation, the generated file must be copied in to /bin directory.

Add below line in to /etc/inittab for automatic login as a super user(root)

T0:12345:respawn:/bin/mingetty --autologin=root ttySAC2 115200 vt100

To test this root file system, I copied it to the system partition(mmcblk0p2) of Odroid-7.

And I changed bootargs as below.
For ODROID-7 (S5PC110/EXYNOS-3110)

setenv bootargs 'root=/dev/mmcblk0p2 rw rootfstype=ext4  init=/sbin/init console=ttySAC2,115200 rootdelay=1'
setevn bootcmd 'movi read kernel 30008000;bootm 30008000'
savenv

For ODROID-E7 (S5P6450 ARM11)

setenv bootargs 'root=/dev/mmcblk0p2 rw rootfstype=ext4  init=/sbin/init console=ttySAC2,115200 rootdelay=1'
setevn bootcmd 'movi read kernel E0008000;bootm E0008000'
savenv

To make a SDL and application software, I followed below sequence.

Toolchain
Sourcery G++ Lite 2010.09-50  (GNUEABI version)
https://sourcery.mentor.com/sgpp/portal/release1600
* Note: EABI version can’t compile SDL correctly. Must use the GNUEABI version.

SDL source code
http://www.libsdl.org/download-1.2.php
Source code location on host PC
/home/justin/sdl/SDL-1.2.14 (This is my working directory. It is just an example!)

Compile SDL

export CC=arm-none-linux-gnueabi-gcc
./configure --host=arm-none-linux-gnueabi --prefix=/home/justin/sdl/compiled --without-x
make -j 4
make install

* Note: Modify the SDL-1.2.14/src/video/fbcon/SDL_fbvideo.c
Comment out the mouse related code in FB_VideoInit() function.

Compile sdl test (Modify the SDL init function to 800×480 resolution and 32bit color, if the application uses graphic layer.)

./configure --host=arm-none-linux-gnueabi  --with-sdl-prefix=/home/justin/sdl/compiled --disable-sdltest
make -j 4

Compile Freetype
http://download.savannah.gnu.org/releases/freetype/freetype-2.1.10.tar.gz

./configure --host=arm-none-linux-gnueabi --without-zlib --prefix=/home/justin/sdl/compiled
make -j 4
make install

Compile SDL_ttf to display fonts.
http://www.libsdl.org/projects/SDL_ttf/SDL_ttf-2.0.10.tar.gz

./configure --host=arm-none-linux-gnueabi --prefix=/home/justin/sdl/compiled --with-freetype-prefix=/home/justin/sdl/compiled --with-sdl-prefix=/home/justin/sdl/compiled 

#undef HAVE_ICONV ==> showfont.c ( Modify this to avoid annoying error. But, this one should be fixed for proper display of 2-byte languages.)

make -j 4
make install

showfont executable file is generated in .lib directory.

SDL_ShowCursor(SDL_DISABLE);  //To hide the mouse cursor !!!

Download and Install font.
http://ftp.gnu.org/gnu/freefont/freefont-ttf-20100919.tar.gz
Uncompress and copy the fonts in to /usr/fonts/ directory.

Let’s test.

./showfont -i ../fonts/FreeSerif.ttf 30

To execute this application automatically, add below line in /root/.bashrc !!

/usr/bin/showfont -i /usr/fonts/FreeSerif.ttf 30

Finally we made a simple and useful root file system.
This is very light and fast embedded linux root file system.
Size is 35Mbyte approximately.
Get this root file system from
http://dev.odroid.com/projects/odroid-t/download/note/76

Reference.
http://www.crosscompile.org/static/pages/SDL.html