레이블이 EVM-ODROID-X2인 게시물을 표시합니다. 모든 게시물 표시
레이블이 EVM-ODROID-X2인 게시물을 표시합니다. 모든 게시물 표시

4/10/2015

ODOID Lollipop Porting-2 (이 부분을 끝내지를 못함)- 추후 삭제

수정부분요약 (회사일로 바뻐서 이 일을 멈추기로함)


device/hardkernel/odroidx2


   1. Makefile

        Android.mk             :  기본 Makefile, TAGET_PRODUCT= odroidx2 일 경우 동작
        AndroidProducts.mk  :  odroidx2.mk wrap Makefile
        BoardConfig.mk     :  Board기본 설정   on/off 제어
        CleanSpec.mk
        device.mk               :                                    아래내용 수정
              * PRODUCT_COPY_FILES 중 (Ultra_Explorer.apk,DicePlayer.apk 복사방지 막음)
        odroidx2.mk            :  PRODUCT INFO


   2. vendorsetup.sh    : odroidx lunch 항목에 등록   3. drivers              :  driver's ko (wifi ,snd,기타)
   4. conf                 :  초기화 설정

Memory 관련 문제

vi hardware/libhardware/include/hardware/gralloc.h:  
    GRALLOC_USAGE_YUV_ADDR        = 0x04000000,   //새로추가

vi hardware/samsung_slsi/exynos4/libgralloc_ump/gralloc_module.cpp
   //  getphys: gralloc_getphys,               //not used,  489    getphys 안쓰도록 수정

https://source.android.com/devices/halref/structgralloc__module__t.html
https://source.android.com/devices/graphics/index.html


Audio 관련문제

https://source.android.com/devices/audio/implement.html
http://blog.eairship.kr/175


hardware/hardkernel/libaudio/AudioHardware.cpp: In function 'android_audio_legacy::AudioHardwareInterface* android_audio_legacy::createAudioHardware()':
hardware/hardkernel/libaudio/AudioHardware.cpp:2324:30: error: cannot allocate an object of abstract type 'android_audio_legacy::AudioHardware'
     return new AudioHardware();

vi device/hardkernel/odroidx2/BoardConfig.mk
BOARD_USES_ALSA_AUDIO := true
BUILD_WITH_ALSA_UTILS := true

ref. 
https://groups.google.com/forum/#!topic/android-porting/w487bZaVzxA


*Android Porting Forum
https://groups.google.com/forum/#!forum/android-porting


vi hardware/hardkernel/libcamera_webcame/Android.mk

LOCAL_C_INCLUDES += \
        $(TOP)/system/media/camera/include \   // 새로운 include 추가
        $(TOP)/frameworks/base/include/android_runtime \


참조
  hardware/libhardware_legacy/audio/audio_hw_hal.cpp
  hardware/libhardware_legacy/include/hardware_legacy/AudioHardwareInterface.h
  external/tinyalsa/include/tinyalsa/asoundlib.h


vi hardware/hardkernel/libcamera_webcame/V4L2Camera.h 
//#include linux/videodev.h
#include linux/videodev2.h
http://w3facility.org/question/flashcam-doesnt-compile-videodev-h-not-found/

4/08/2015

ODROID-X2 Lollipop Porting-1 - 추후 삭제

1. How To Download Android Source ( Lollipop)

A. 설정 
 $ mkdir lollipop
 $ cd lollipop 

B. 개발자 version 혹은 release version으로 download하자
*develop version init
 $ repo init -u https://android.googlesource.com/platform/manifest -b lollipop-dev 
*release version init
 $ repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.0_r3 

*download
 $ repo sync -qc -j4

C. download 후 확인
 $ ls
    abi     bootable   dalvik       device    frameworks  libnativehelper  packages   sdk
    art     build      developers   docs      hardware    Makefile         pdk        system
    bionic  cts        development  external  libcore     ndk              prebuilts  tools


1.1 repo 설정

repo는 git를 관리는 하는 linux tool로 아래에서 간단히 사용방법을 숙지하자.
처음 사용한다면, 아래의 사이트를 참조하여, download를 받고 기본설정하자.

https://ahyuo79.blogspot.com/search/label/SCM-GIT


1.2 repo와 git 기본사용법

android source를 수정을 한 후, repo status를 보면 아래와 같이 수정 및 새로추가한 것을 알수있다.
-m  :  수정
-     : new file

$ repo status
project build/                                  (*** NO BRANCH ***)
 -m     envsetup.sh
project hardware/libhardware/                   (*** NO BRANCH ***)
 -m     include/hardware/gralloc.h
project hardware/libhardware_legacy/            (*** NO BRANCH ***)
 --     audio/audio_hw_hal.kitkat.cpp
 --     audio/audio_hw_hal.lollipop.cpp


세세한 download 혹은 상태를 보고 싶다면 git status를 사용하자.
아래와 같이 File 삭제 새로 추가 및 수정 했다면  아래와 같이
git status로 보면 확인하고, 다른명령으로 복구하자.

  • 삭제:  deleted:
  • 수정:  modified: 
  • 새로추가:  Untracked files:
$ git status
# Not currently on any branch.
# Changes not staged for commit:
#   (use "git add/rm file..." to update what will be committed)
#   (use "git checkout -- file..." to discard changes in working directory)
#
# deleted:    Android.mk              // 지워진 파일 
#
# Untracked files:
#   (use "git add file..." to include in what will be committed)
#
# audio_hw_hal.kitkat.cpp            // 새로 추가한 파일
# audio_hw_hal.lollipop.cpp          // 새로 추가한 파일

git checkout으로 Android.mk 복구

$ git checkout Android.mk            // Android.mk 삭제되어있기에, 이를 복구
$ git status                         // 복구 후 상태확인 
# Not currently on any branch.
# Untracked files:
#   (use "git add file..." to include in what will be committed)
#
# audio_hw_hal.kitkat.cpp
# audio_hw_hal.lollipop.cpp



*아래사이트에서 위의 branch 주소가 변경이 될 수 있으므로 확인하자. 
How to download source
http://source.android.com/source/downloading.html ( how to download )
https://android.googlesource.com/platform/manifest/+refs  ( how to check branch ,tags)
http://source.android.com/source/build-numbers.html#source-code-tags-and-builds
(* how to check  branch, tags)

2. 기존 odroid 분석 

odroid에서 제공하는 shell을 분석하여 Build 구성을 파악.

2.1 odroid build shell 분석 

$ vi build_android.sh 

    odroidx2)
                . build/envsetup.sh     // source build/envsetup.sh 
                lunch odroidx2-eng      // lunch 설정 
                build_android           // build android platform
        copy_root_2_system              // filesystem 수정 및 만들기 
        make_update_zip                 // image 작업 
                if [[ $2 = "otapackage" ]]
                then
                    ./build_otapackage.sh
                fi
                ;;

기본구성은 다음과 같다.
  1. source build/envsetup.sh을 하고 나면 device의 내의 vendor를 include 함.
  2. lunch로 등록된 이 부분을 설정을 시도를 한다.
  3. platform을 빌드를 시작

이부분은 다른 Android에도 동일

* lunch 관련부분 설명
http://chlrbgh0.tistory.com/207

* envsetup.sh 설명
http://www.kaisyu.com/notes/google-android/android-envsetupsh

http://itmir.tistory.com/450

* 기본 Build 방법
http://source.android.com/source/building-running.html
http://elinux.org/Android_Build_System


2.2 How To build Android 

$ . build/envsetup.sh  or $ source build/envsetup.sh
$ lunch odroidx2-eng
$ make -j4 

ref. http://ahyuo79.blogspot.com/2014/01/blog-post_7416.html

2.3 odroid 의 포팅된 부분 파악 

$ find . -name '*.mk' -o -name 'Makefile' | xargs grep odroid 

아래의 결과물로 쉽게 관련 Makefile들을 찾을 수 있다.
쉽게 결과물을 얻으며, 포팅된 부분은 devicehardware 두 directory 부분


3. android-5.1.0_r3 구조파악 및 적용

  •  device와 hardware의 hardkernel을  복사       ( Hard Kernel에서 Porting 부분)
  •  device의 rockchip 부분도 복사                    ( Dummy Ril) 
  •  hardware/samsung_slsi/exynos4 부분도 복사  ( Exynos4 관련 library ) 

필요한 부분만 고쳐서 적용하기로 함.


  * 수정된 부분  
├─ abi     
├─ bootable   
├─ dalvik       
├─ device    
│    ├─hardkernel               :기존에 있던 hardkernel 존재하던 부분 복사 - 2   
│    │    ├─ odroidx2          : odroid-x2 설정
│    │    │      │ 
│    │    │      ├─ BoardConfig.mk     : BoardConfig.mk 와 동일 ( on/off 제어)
│    │    │      ├─ device.mk          : 
│    │    │      ├─ AndroidProducts.mk : odroidx2.mk wrapping Makefile 
│    │    │      ├─ odroidx2.mk        : PRODUCT 정보, product_config.mk 와 동일 
│    │    │      └─ vendorsetup.sh     : lunch 등록 shell 
│    │    │  
│    │    ├─ ...                        : 기타 다른보드설정     
│    │    │  
│    │    └─ proprietary     : 공통사항 , uboot 및 library 보관 (자산, library로 보관 중)
│    │ 
│    │ 
│    ├─ rockchip                  
│    │     └─ common             : 전부 rockchip 부분을 복사-4 
│    │           └─ phone
│    │ 
│    ├─ common                    : 수정안함   
│    ...
│ 
│    
├─ frameworks  
├─ libnativehelper  
├─ packages   
├─ sdk
├─ art     
├─ build
│    ├─ buildspec.mk.default  
│    ├─ CleanSpec.mk  
│    ├─ core  
│    ├─ envsetup.sh  
│    ├─ libs  
│    ├─ target  
│    └─ tools  
│
│
├─ developers   
├─ docs      
├─ hardware 
│    ├─ hardkernel             : 기존에 있던 hardkernel 존재하던 부분 복사-1
│    │      ├─ _Android.mk          : Hal 관련 부분 
│    │      ├─ libaudio             : Audio Hal 
│    │      ├─ libcamera_mipi        
│    │      ├─ libcamera_webcame    : Camera Hal
│    │      └─ libodroid-gps
│    │
│    │
│    ├─ samsung_slsi 
│    │      ├─ exynos4         : exynos4 부분이 존재하지 않아 복사-3 
│    │      └─ exynos5
│    ...
│ 
├─ Makefile         
├─ pdk        
├─ system
├─ bionic  
├─ cts        
├─ development  
├─ external  
├─ libcore     
├─ ndk              
├─ prebuilts  
└─ tools


Ref. http://ahyuo79.blogspot.com/2014/01/blog-post.html?zx=1016342afcd2910e

4. Build 도중 발생 하는 문제 

Build를 하다보면, Java version 문제 , oracle version 문제 등 문제가 발생할 경우
java version을 변경해 보자.

현재 나의 java를 보니, openjdk가 없음으로, 이를 설치
$ java -version  

$ echo $JAVA_HOME 
/usr/lib/jvm/java-7-oracle

$ ls /usr/lib/jvm/
java-6-oracle/        .java-6-oracle.jinfo  java-7-oracle/       
.java-7-oracle.jinfo  java-8-oracle/        .java-8-oracle.jinfo  

http://source.android.com/source/initializing.html

* kikat은 oracle 6을 lolipop은 openjdk 7이 필요 한다고 한다.
* version 이 정확이 맞이 않으면 에러가 발생.

아래와 같이 사용

$ . ./jdk_switch.sh jdk7
$ . ./jdk_switch.sh jdk6  

jdk_swich.sh

vi jdk_switch.sh // shell script 작성 
#!/bin/bash
case $1 in
    jdk6)
 export JAVA_HOME=/usr/lib/jvm/java-6-oracle/
 ;;
    jdk7)
 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
 ;;
    *)
 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
 ;;
esac

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

java -version

* Java 관련부분 error
http://stackoverflow.com/questions/27955851/android-5-0-build-errors-with-java-version-issue

10/15/2014

FILE SYSTEM의 수정 및 Script 수정 (정리가 필요)

1. 목적 

기존 ODROID에서 사용하던 File system을 TI File system 으로 대체
ODROID는 FILE SYSTEM은  Ubuntu 을 TI Linux Embed File system으로 변경.

2. Script 및 Service  on /off 


2.1  Background 

service를 제어를 하는데 있어서 현재 두가지 방법이 있으며, 관련 directory는 아래와 같다.

  • /etc/init.d   :   System init tool 방식 기존 부터 존재하던 방식 
      * ubuntu에서 /lib/init/upstart-job에 symbolic link로 연결되어 이거나, shell로 구성.

  • /etc/init      :   ubuntu 에서 적용하는 방식이며, 파일은 service의 설정파일

2.2 ubuntu 

  • 런레벨 설정 
$ vi /etc/init/rc-sysinit.conf 
env DEFAULT_RUNLEVEL=2
  • X Manager 제어
        - 런레벨이 2일 경우, 아래와 같이 스크립트 수정으로, 실행금지

 $ vi /etc/init/lightdm.conf
start on ((filesystem
           and runlevel [!026]
           and started dbus
           and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
                or stopped udev-fallback-graphics))
          or runlevel PREVLEVEL=S)

  •   기타 다른 제어  (/etc/init service 기능) 
          - 아래와 같이 각각의 원하는 서비스의 기능의 runleve을 수정.
$ cd /etc/init
$ grep -r runlevel .


  • /etc/init.d  제어 
        /etc/rc2.d 에 symbolic link로 실행하고자하는 service들이 등록되어 있는데, 이를 제거
       ex) S20xrdp : X의 remote disply 로 원격접속에 사용 이를 제거


       ps --ppid 2 -p 2 --deselect  (user process : 2 kthreadd)

  http://askubuntu.com/questions/5039/what-is-the-difference-between-etc-init-and-etc-init-d
  http://snoopybox.co.kr/1720

2.3 TI Filesystem  

inittab 사용

3. 수정사항 

   1. /lib/module  sync  ( 기본 모듈 복사)
   2. /dev  sync             ( 기존 dev 복사 )
   3. /etc/inittab 수정     ( TI Filesystem 은 inittab 사용)

          sudo vi inittab
                S:2345:respawn:/sbin/getty 115200 ttySAC1  // kernel Arg 참조
          // tty1-6 가상 console이므로, 속도는 상관없음           

  4.  /etc/rc5.d             ( 불필요한 서비스 제거 )

 $ ls etc/rc5.d 
 $ sudo vi ../init.d/mount-sdcard  // 현재 UUID로 마운트 필요없는 부분제거

-
  6. /lib/ld-linux-armhf.so.3  ( loader 복사 및 관련 lib 복사)
  7. 연관된 프로그램 복사


http://onestep.tistory.com/78

10/14/2014

FILE SYSTEM의 IMAGE 수정 (추후 TEST 완료 후 삭제)

1. 목적

기존에 존재하던 image 파일을 수정하여 새로운 image 파일을 만드는 것이 목적.
TI에서 제공하는 Filesystem  사용
  • emmc_backup_2014_90_30.img의 filesystem을 지우고, TI-Filesystem 대체
  • emmc_backup_2014_90_30.img resize 

2. Image 수정

FAT는 Boot file이기에 건들지 않고, Linux File system만 외부의 파일 system에서 가져와
새로 파티션을 만들어 수정한다.

2.1 각각의 Image 구성 확인

  • 각 구성은 1. boot   2. Linux filesystem 으로 구성 

$ fdisk -l /media/sf_SHARED/emmc_backup_2014_09_30.img 

Disk /media/sf_SHARED/emmc_backup_2014_09_30.img: 7818 MB, 7818182656 bytes
255 heads, 63 sectors/track, 950 cylinders, total 15269888 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: 0x000c4046

                                      Device Boot      Start         End      Blocks   Id  System
/media/sf_SHARED/emmc_backup_2014_09_30.img1            4096      266239      131072    b  W95 FAT32
/media/sf_SHARED/emmc_backup_2014_09_30.img2          266240    11532287     5633024   83  Linux  

2.2  Image 수정 

두번째 파티션 지우고 동시에 새로운 파티션을 만드며,각 사이즈를 정하고, Sector 크기를
2의 배수로 정한다. ( 1 Block이 2 Sector)

 $ fdisk /media/sf_SHARED/emmc_backup_2014_09_30.img 

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): d
Partition number (1-4): 2

Command (m for help): p

Disk /media/sf_SHARED/emmc_backup_2014_09_30.img: 7818 MB, 7818182656 bytes
255 heads, 63 sectors/track, 950 cylinders, total 15269888 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: 0x000c4046

                                      Device Boot      Start         End      Blocks   Id  System
/media/sf_SHARED/emmc_backup_2014_09_30.img1            4096      266239      131072    b  W95 FAT32

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (2048-15269887, default 2048): 266240
Last sector, +sectors or +size{K,M,G} (266240-15269887, default 15269887): 1712089        //1606499 -160650 = 1712089            

Command (m for help): p

Disk /media/sf_SHARED/emmc_backup_2014_09_30.img: 7818 MB, 7818182656 bytes
255 heads, 63 sectors/track, 950 cylinders, total 15269888 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: 0x000c4046

                                      Device Boot      Start         End      Blocks   Id  System
/media/sf_SHARED/emmc_backup_2014_09_30.img1            4096      266239      131072    b  W95 FAT32
/media/sf_SHARED/emmc_backup_2014_09_30.img2          266240     1712089      722925   83  Linux

Command (m for help): w


2.3 Image Resizing

위의 emmc_backup_2014_09_30.img 의 경우 아직 7818MB이며, 15269888 sectors 사용중 하지만 우리의 새로운 image의 end는
아래와 같이 dd 명령어를 사용해서, image를 resize를 한다.

마지막 sector가 1712089 이고 해서, 이를 짝수를 맞추고, 여분을 주기위해서, +1011줌.
현재 1 block = 2 sectors
* bs  size에 속도차이가 심함

count 값은 위의 sectors 값을 반으로 나눈값 , bs를 변경 해도 됨

 $ dd if=/media/sf_SHARED/emmc_backup_2014_09_30.img of=/media/sf_SHARED/test_newImage.img  bs=1k count=$(((1712089+1011)/2)) 

결과물로 test_newImage.img

3. Filesystem 복사

$ fdisk -l /media/sf_SHARED/test_newImage.img 

Disk /media/sf_SHARED/test_newImage.img: 877 MB, 877107200 bytes
255 heads, 63 sectors/track, 106 cylinders, total 1713100 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: 0x000c4046

                             Device Boot      Start         End      Blocks   Id  System
/media/sf_SHARED/test_newImage.img1            4096      266239      131072    b  W95 FAT32
/media/sf_SHARED/test_newImage.img2          266240     1712089      722925   83  Linux  

 $ fdisk -l /media/sf_SHARED/TI-IMAGE.img 

Disk /media/sf_SHARED/TI-IMAGE.img: 3965 MB, 3965190144 bytes
255 heads, 63 sectors/track, 482 cylinders, total 7744512 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
/media/sf_SHARED/TI-IMAGE.img1   *          63      144584       72261    c  W95 FAT32 (LBA)
/media/sf_SHARED/TI-IMAGE.img2          160650     1606499      722925   83  Linux
/media/sf_SHARED/TI-IMAGE.img3         1606500     7743329     3068415   83  Linux 

3.1 Filesystem 복사 방법 

A.   Mount 복사

$ sudo mount -o loop,offset=$((512 * 266240)) /media/sf_SHARED/test_newImage.img  ./tmp1
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

$ sudo mount -o loop,offset=$((512 * 160650)) /media/sf_SHARED/TI-IMAGE.img       ./tmp2  

      skip =  input block  offset
      seek = output block offset

위에서 에러가 나서, 그냥 dd로 전부 copy

B.   dd를 이용하여 복사 


 $ dd if=/media/sf_SHARED/TI-IMAGE.img of=/media/sf_SHARED/test_newImage.img  bs=512 skip=160650 seek=266240 count=$((1606499-160650)) 

위와 같이 여러번 했으나, 에러 발생으로 다른 방법시도
    참조:  http://forum.falinux.com/zbxe/index.php?document_srl=561988&mid=lecture_tip

C.  mkfs.ext4 와 losetup 을 이용 

$ sudo losetup -o$((512 * 266240)) /dev/loop0 /media/sf_SHARED/test_newImage.img   //attach device
$ sudo mkfs -t ext4 /dev/loop0
$ sudo losetup -d /dev/loop0   //detach device  


$ sudo mount -o loop,offset=$((512 * 266240)) /media/sf_SHARED/test_newImage.img  ./tmp1  
EXT4-fs (loop0): bad geometry: block count 1408255 exceeds size of device (214137 blocks) 

* 에러 메시지를 보고, 안되는 이유가 파티션의 사이즈 배분을 잘못해서 문제생김.

3.2  File system 복사 ( Porting Qt  및 기타 사항)
 
$ sudo mount -o loop,offset=$((512 * 266240))  /media/sf_SHARED/emmc_backup_2014_09_30.img ./tmp1
$ sudo mount -o loop,offset=$((512 * 160650)) /media/sf_SHARED/TI-IMAGE.img       ./tmp2 
$ cd tmp1
$ sudo rm -rf *
$ sudo cp -a ../tmp2/* .
$ cd usr/local
$ sudo cp -a /usr/local/Qt-4.8.6 .
 

3.3  SD 카드 이용시  할 경우

추후, TEST SD 카드 변경하여 아래와 같이 변경

$ sudo mount -o loop,offset=$((512 * 266240))  /media/sf_SHARED/emmc_backup_2014_09_30.img ./tmp1
$ sudo mount -o loop,offset=$((512 * 160650)) /media/sf_SHARED/TI-IMAGE.img                ./tmp2 
$ sudo umount tmp1 tmp2


1. lib/module 복사
2.  dev  복사  
3.  etc/rc5.d 수정  
       S02dbus-1  S20netperf  S20syslog  S90mount-sdcard  S98parse-ip
4. sudo vi inittab //commnad line보고 수정, tty1 가상 console 
              S:2345:respawn:/sbin/getty 115200 ttySAC1 
5.  sudo vi ../init.d/mount-sdcard  // 현재 UUID로 마운트 필요없는 부분제거 
6. /lib/ld-linux-armhf.so.3  loader 복사 
7.  QT 복사 
8. EMA 복사 
9. sudo ln -s libcmirisLib2_arm_2.1.3.so libcmirisLib2_arm_2.1.1.so  //usr/local/lib 

export LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/Qt-4.8.6/lib:/usr/local/lib
export QWS_DISPLAY="LinuxFb:/dev/fb6"
export PATH=$PATH:/usr/local/bin

TEST 
     cd /usr/local/
     ./deform -qws -display LinuxFb:/dev/fb6 

9/30/2014

Porting LCD, Touch Screen

1. LCD 관련정리 

LCD Interface 관련정리 

  • LCD 와 Frame Buffer 
SoC에서 Frame Buffer의 역할은 중요하며, LCD가 특히 RGB Interface로 연결되었을 경우 LCD 내부에 RAM이 별도로 없으므로, 
Frame Buffer를 통해 이 Latency를 없애고자 하는 것이며, OSD 와 VIDEO Frame Buffer의 경우 갯수 또한 다르다. 

2. KERNEL 설정 

TFTP Pannel이므로, 별도의 Backlight와 Frame Buffer를 설정해야줘야 한다. 
LCD: U133WA01

  • Odroid Kernel 설정 
Odroid의 LCD 설정 및 Backlight 및 Frame Buffer 설정 
$ make menuconfig 
Device Driver-> Graphics support -> Backlight & LCD device support
        
Lowlevel LCD controls
Lowlevel Backlight controls
Generic PWM based Backlight Driver

$ make menuconfig   
Device Driver-> Graphics support ->Support for frame buffer devices->
S5P Framebuffer support
LCD init in kernel
(2)     Default Window (0-4)
(2)     Number of frame buffers (1-3)
Select LCD Type (U133WA01)

  • LCD Back Light 관련소스 
arch/arm/mach-exynos/mach-odroid-x.c  :  spi resiger, pwm
arch/arm/mach-exynos/setup-fb-odroid.c :  s3cfb_backlight_on   backright
arch/arm/plat-samsung/dev-backlight.c

  • Frame Buffer 와 LCD 관련부분 확인 
$ ls qtwork/kernel/linux-3.0.68/drivers/video/samsung
built-in.o  s3cfb_fimd6x.o  s3cfb_main.o  s3cfb.o  s3cfb_ops.o u133wa01.o

2.1 SPI 관련 추가방법  

GPIO 기반의 SPI 설정 

$ vi arch/arm/mach-exynos/mach-odroid-x.c

static struct s3c64xx_spi_csinfo spi1_csi[] = {
        [0] = {
                .line = EXYNOS4_GPB(5),
                .set_level = gpio_set_value,
                .fb_delay = 0x2,
        },
};

static struct spi_board_info spi1_board_info[] __initdata = {
        {
                .modalias = "spidev",
                .platform_data = NULL,
                .max_speed_hz = 10*1000*1000,
                .bus_num = 1,
                .chip_select = 0,
                .mode = SPI_MODE_3,
                .controller_data = &spi1_csi[0],
        }
};

......
spi_register_board_info(spi0_board_info, ARRAY_SIZE(spi0_board_info));

  • SPI Driver Based GPIO
drivers/spi/spi.c

drivers/spi/spi_gpio.c: 위의 board에서 정의된 값을 이용하여, gpio를 이용하여 기본 SPI 설정
                        이 곳에서 제대로 GPIO 제대로 설정되었는지 TEST
          
drivers/spi/spi_bitbang.c
                         위 함수를 이용하여 SPI  based on GPIO 구동
- bitbang_work           : 실제 gpio로 전송을 담당 하는 함수.
- spi_bitbang_transfer  : 전송을  전송을 하지만, queue만 넣고 실제 전송을 bitbang_work 동작


  • 관련 GPIO 설정 및 Contorl 
sys filesystem을 이용하여 쉽게 gpio로 control 
cat /sys/kernel/debug/gpio 
관련참조 
  http://th15.tistory.com/25

Touch TSC2007 


  http://codewalkerster.blogspot.kr/2014/06/optimize-setting-for-low-dpi.html
  https://access.redhat.com/documentation/ko-KR/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-cpu-irq.html

Interrupt Chattering
  http://forum.falinux.com/zbxe/index.php?document_srl=786529&mid=question
  http://mroon.tistory.com/263

9/29/2014

USB Cable로만 Linux 개발환경구축 (Exynos)

1. USB Cable로만 개발환경구축

Virtual Box를 개발 도중 , NFS 및 TFTBOOT BOOT 로 편하게 개발하고 싶은마음에,
아래 검색도중 아래의 문서들을 발견하여 다음과 같이 정리

ODROID(Embedded Linux 기반의 개발환경)

현재 ODROID의 경우 USB기반의 Network를 이용하여 개발환경을 구축이 가능하다.
이를 이용하기 위해서 Host Linux와 Device Linux의 설정을 알아보자.

  • 참고사항 (USB_NFS_HOWTO)
  http://www.aesop.or.kr/Board_Resources_General/36144
  http://www.aesop.or.kr/Board_Resources_General/36136
  http://www.aesop.or.kr/Board_Documents_Linux_Kernel/35302
  http://elinux.org/Mount_BeagleBoard_Root_Filesystem_over_NFS_via_USB
  http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidpc&bid=1032
  http://callgm.tistory.com/36
  http://vaultmicro.blogspot.kr/2013/04/usb-network-protocol.html
  http://recursive-labs.com/blog/2012/06/15/beaglebone-archlinux-gettingstarted/
  https://sites.google.com/site/computewiththinking/odroid-u2/bootloader-u-boot-fusing


2. Uboot의 dnw명령 과 DNW Tool 

uboot에 dnw라는 명령어가 존재하며 보통 TFTP 대신 목적으로 사용한다
이는 현재 Exynos에서만 지원해주고 있는 것 같다.
원리는 Taget Device의 uboot에서 OTG의 Device Mode 동작이 되고 Host Linux와 통신한다.
이 때 uboot에서는 dnw 명령과 Host에서는 DNW Tool이 필요하다
현재 Odroid인 경우 smdk-usbdl를 이용하여 Exynos를 지원해주고 있다.

관련 Tool: Window 및 Linux 용이 존재.

2.1 Host Linux용 DNW Tool 설치

Host Linux에서 아래의 파일을 Download하고 아래와 같이 설치를 해주면

  • Linux-dltool.tar.gz Download 
  http://bumnux.tistory.com/m/4?category=306215


 $ sudo apt-get install libusb-dev
 $ sudo cp smdk-usbdl /usr/local/bin
 $ apt-get install libusb-0.1-4:i386   (for 64bit)

이제 HOST Linux에서 smdk-usbdl를 이용하여 이제 uboot로 전송가능하다

2.2  UBOOT의 DNW 개발환경설정 

  • Target Device에서 UBOOT dnw명령 확인 
Serial 연결 후,  Reset 한 후, Uboot로 진입 한 후 dnw 명령 실행.
Host에서  System MCU SEC S3C6400X Test B/D USB를 인식 가능하며 아래의 Virtual Box에도 설정을 해주자.

 Exynos4412 # dnw 0xC0008000 


  • Host에서 Virtual Box  관리자 설정      
Main Virtual Box  관리자의  머신->설정->USB  추가

   System MCU SEC S3C6400X Test B/D [0100] 추가  (VID:04e8, PID: 1234)


  • Host에서 실행중 Virtual Box 확인
UBOOT에서 dnw 실행 후,
실행 중인  Virtual Box의 장치-> USB 장치 확인 및 앞에 체크 표시 확인
 
   System MCU SEC S3C6400X Test B/D [0100]


2.3 Uboot의 dnw TEST 진행


  • Target Device에서 UBOOT 명령 실행

아래와 같이 uboot에서 dnw 명령이 지원이 되어야 한다.

 Exynos4412 # dnw 0xC0008000 


  • Host Linux에서 Kernel Image Load 

아래와 같이 smdk-usbdl을 이용하여 Kernel Image를 Load 해보자

$ sudo smdk-usbdl -f arch/arm/boot/zImage -a 0xC0008000 
SMDK42XX,S3C64XX USB Download Tool
Version 0.20 (c) 2004,2005,2006 Ben Dooks 

S3C64XX Detected!
=> found device: bus 001, dev 005
=> loaded 2311724 bytes from arch/arm/boot/zImage
=> Downloading 2311734 bytes to 0x40008000
=> Data checksum 26c6
=> usb_bulk_write() returned 2311734

만약 Window에서 사용하고 싶다면, Window DNW Tool을 사용, 아래 참조 방법은 동일

  •  For Linux SMDK-USBDL
  http://www.fluff.org/ben/smdk/tools/
  http://dreamlog.tistory.com/165
  • for Window 7
  https://code.google.com/p/s3c6410kits/downloads/detail?name=dnw-for-
win7.rar&can=2&q=
  • Window
  http://en.pudn.com/downloads74/sourcecode/others/detail269293_en.html
  • How to install on Linux
  https://code.google.com/p/dnw-linux/ 


3. USB-CDC를 이용한 NFS 설정

이제 UBOOT에서 Kernel을 USB를 통해가져오면,  USB-CDC Gadget을 이용하여 Host Linux에서 USB Network를 이용한다


3.1 Target Device에서 Kernel설정

우선 아래와 같이 USB-CDC Gadget Driver를 추가하여, USB로 Network가 가능하도록 하자.

* KERNEL에서 RNDIS 및 USB Gadet Driver CDC추가와 NFS 지원 확인
  • 아래와 같이 Kernel 설정을 추가
$ make menuconfig
[ * ] File systems -> Network File System -> NFS client support 를 체크하고
NFS client support for NFS version 3 및 Root file system on NFS 를 선택

[ * ] Device Drivers -> USB support -> USB Gadget Support -> USB Gadget Drivers 
      (Ethernet Gadget (with CDC Ethernet support)) 로 변경 및 [*]  아래 RNDIS support (NEW) 확인 
* Built-in으로 변경                                                                               
  • 확인사항
$ vi .config
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_SMSC95XX=y
CONFIG_USB=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_ROOT_NFS=y


3.2 Host Linux에서 NFS Server 설정

기본으로 NFS가 설치가 안되어있기에, NFS관련 PKG 설치 및 설정


~$ sudo apt-get install nfs-kernel-server nfs-common portmap
~$ sudo vi /etc/exports

       /home/jhlee/qtwork/tmp1 *(rw,no_root_squash,no_all_squash,sync)
       /home/jhlee/qtwork/tmp2 *(rw,no_root_squash,no_all_squash,sync)

~$ sudo /etc/init.d/portmap restart
~$ sudo /etc/init.d/nfs-kernel-server restart
~$ sudo /etc/init.d/portmap restart


3.3 Host에서 Virtual Box 관리자 설정 

Device에서 Kernel의 USB Gadget인 USB-CDC의 RNDIS를 이미 설치했기때문에,
아래와 같이 이를 Host에서 인식하기 위해서 Virtual Box를 설정해준다.

Kernel zImage를 적용 후, 다시 Image를 writing 을 한 후 USB 필터 추가

  * WINDOW RNDIS/Ethernet Driver는 필요가 없기에  취소 
  * VirtualBox USB Driver 가 문제가 있다면 아래의 연결에 문제 발생 (재설치)

  • Virtual Box  관리자 설정 
Main Virtual Box  관리자의  머신->설정->USB  추가
         Linux 3.0.68 with s3c-udc RNDIS/Ethernet Gadget [0326] 추가

  • 실행중 Virtual Box 확인
UBOOT에서 dnw 실행 후, 실행 중인  Virtual Box의 장치-> USB 장치 확인 및 앞에 체크 표시 확인

         Linux 3.0.68 with s3c-udc RNDIS/Ethernet Gadget [0326]


3.4 Target Device에서 NFS 및 NETWORK TEST

  • NFS Mount TEST 
TARGET 일반 부팅 후 아래와 같이 NFS TEST

 mount -t nfs 192.168.1.1:/home/jhlee/qtwork/tmp2 /tmp 

그리고 lsusb로  연결확인

  • Network Test 
Guest OS Linux
$ ifconfig usb0 192.168.1.1

TARGET
# ifconfig usb0 192.168.1.2
# ping 192.168.1.1 

기본 동작 Exynos에서 동작은 하는데, TARGET에서 IP가 일정시간이 지나면 없어짐
네트워크문제 발생


4. Linux 개발환경설정 


4.1 Host Linux에서 udev 설정

Host Linux에서는 이제 udev 관련 rules들을 변경하여 Hotplug가 가능하도록 해주자.

1. dnw 관련 uboot에서 tftpboot 처럼 이용하여 kernel Image를 Device로 전송
2. Kernel은 USB-CDC의 Gadget을 이용하여 NFS를 Mount 한다

  • DNW Tool 설정 

$vi  /etc/udev/rules.d/80-dnw.rules
SUBSYSTEMS=="usb",  ATTRS{idVendor}=="04e8",  ATTRS{idProduct}=="1234", 
RUN+="/usr/local/bin/smdk-usbdl  -a  0xc0008000  -f /tftpboot/zImage"

  • NFS 관련설정

$ vi /etc/udev/rules.d/85-ifupdown.rules
ACTION=="remove",  RUN+="/sbin/start-stop-daemon  --start  --background  --pidfile 
/var/run/network/bogus  --startas  /sbin/ifdown  --  --allow  auto  $env{INTERFACE}"
LABEL="net_end"

KERNEL=="usb0"  RUN+="/etc/init.d/nfs-kernel-server  restart"
SUBSYSTEM=="usb",  ACTION=="add",  DRIVERS=="?*",  KERNEL=="usb0",  NAME="eth0" 

상위 파일 존재하고 이미 있다면, 아래부분만 추가 및 확인 ( NFS Restart )

$ vi /etc/udev/rules.d/85-ifupdown.rules
....
KERNEL=="usb0"  RUN+="/etc/init.d/nfs-kernel-server  restart"
SUBSYSTEM=="usb",  ACTION=="add",  DRIVERS=="?*",  KERNEL=="usb0",  NAME="eth0" 


  • USB0 Network 설정 및 network 재설정
Host Linux에서 이제 아래와 같이 usb0의 HOST Server 주소를 고정해준다.
usb0과 eth0을 NAT로 설정한다.

$ vi /etc/newtowrk/interfaces
auto lo
iface lo inet loopback

auto  usb0
iface  usb0  inet  static
address  192.168.1.1
netmask  255.255.255.0
broadcast  192.168.1.255 
up  /sbin/iptables  -A  POSTROUTING  -t  nat  -o  eth0  -j  MASQUERADE
up  echo  1  >  /proc/sys/net/ipv4/ip_forward
down  /sbin/iptables  -D  POSTROUTING  -t  nat  -o  eth0  -j  MASQUERADE
down  echo  0  >  /proc/sys/net/ipv4/ip_forward 


  • iptable 사용법

  http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-ko-4/s1-firewall-ipt-fwd.html

4.2 Boot 환경설정 (Device)


수정 전 boot.scr
setenv initrd_high "0xffffffff"
setenv fdt_high "0xffffffff"
setenv fb_x_res "1280"
setenv fb_y_res "720"
setenv hdmi_phy_res "720"
setenv bootcmd "fatload mmc 0:1 0x40008000 zImage; fatload mmc 0:1 0x42000000 uInitrd; bootm 0x40008000 0x42000000"
setenv bootargs "console=tty1 console=ttySAC1,115200n8 fb_x_res=${fb_x_res} fb_y_res=${fb_y_res} hdmi_phy_res=${hdmi_phy_res} root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro mem=1023M"
boot


수정 후 boot.scr
setenv initrd_high "0xffffffff"
setenv fdt_high "0xffffffff"
setenv fb_x_res "1280"
setenv fb_y_res "720"
setenv hdmi_phy_res "720"
setenv serverip  "192.168.1.1"
setenv ipaddr  "192.168.1.2"
setenv gatewayip  "192.168.1.1"
setenv bootcmd "dnw  0xc0008000; fatload mmc 0:1 0x42000000 uInitrd; bootm 0xc0008000 0x42000000"
setenv bootargs "console=tty1 console=ttySAC1,115200n8 fb_x_res=${fb_x_res} fb_y_res=${fb_y_res} hdmi_phy_res=${hdmi_phy_res} root=/dev/nfs  rw  nfsroot=192.168.1.1:/home/jhlee/qtwork/tmp2 
ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::usb0:off init=/init  mem=1023M"
boot




setenv  serverip  192.168.1.1;setenv  ipaddr  192.168.1.2;setenv  gatewayip  192.168.1.1 


9/23/2014

IMAGE 수정 및 boot.scr 관리

1. Uboot Script 

Uboot Script 이며, Uboot 에서 사용하는 Command들을 나열하여 사용하는 일종의 Shell Script이라고 생각하면 되겠다.
boot.txt or boot.cmd 로 uboot command를 정의한 후 이를 mkimage를 이용하여 변형을 해주고, Uboot에서 이를 load에서 해서 이 Uboot Script를 사용하면 된다.

  https://www.denx.de/wiki/DULG/UBootScripts


1.1 How to make boot.scr

 mkimage -A arm -T script -C none -n "Boot.scr for odroid" -d ./boot.txt ./boot.scr 
  • boot.txt : string 
  • boot.scr : result

1.2 Uboot 환경변수 설정소스 파악  

기본적으로 Uboot에서 설정되는 환경설정값들을 각각의 EVM or Board마다 다르므로, 본인의 소스 위치를 파악하여 알아보자.

Uboot 에서 BOOTCOMAND는 bootcmd 의 환경설정값 이며, boot.scr 안에서 Kernel를 Load하고 본인이 원하는 기능을 추가하여 넣자.

  • Uboot 의 CONFIG_BOOTCOMMAND (bootcmd ) 
Uboot에서 bootcmd 설정

$ vi /include/configs/smdk4412.h  //EXYNOS의 UBOOT bootcmd 설정 
#if defined(CONFIG_HKDK4412) && defined(CONFIG_EXYNOS_PRIME)
    #define CONFIG_BOOTCOMMAND  \
        " mmc rescan 0:1; mmc rescan 0:2; "     \
        " if run loadbootscript_1; "            \
        "    then run bootscript; "             \
        " else "                                \
        "    if run loadbootscript_2; "         \
        "        then run bootscript; "         \
        "    else "                             \
        "        run default_bootcmd; "         \
        "    fi ;"                              \
        " fi ; "                                
   ...


  • Uboot 기본환경설정 
상위의 CONFIG_BOOTCOMMAND 와 Uboot의 전체 기본 환경설정값

$ vi ./include/env_default.h // UBOOT 환경설정 값 
const unsigned char default_environment[] = {
#endif
#if defined(CONFIG_HKDK4412) && defined(CONFIG_EXYNOS_PRIME)
    "bootscript=source 40008000\0"
    "default_bootcmd=echo >>> Run Default Bootcmd <<<;movi read kernel 0 40008000;movi read rootfs 0 41000000 100000;bootm 40008000 41000000\0"
    "loadbootscript_1=echo >>> Load Boot Script from mmc 0:1 <<<;fatload mmc 0:1 40008000 boot.scr\0"
    "loadbootscript_2=echo >>> Load Boot Script from mmc 0:2 <<<;fatload mmc 0:2 40008000 boot.scr\0"
    "usb_invert_clken=0\0"
#endif
...
#ifdef  CONFIG_BOOTCOMMAND
        "bootcmd="      CONFIG_BOOTCOMMAND              "\0"
#endif


  • Serial에서 Uboot 환경설정확인 

Exynos4412 # pri
baudrate=115200
bootargs=fb_x_res=1280 fb_y_res=720 hdmi_phy_res=720 
bootcmd= mmc rescan 0:1; mmc rescan 0:2;  if run loadbootscript_1;     then run bootscript;  else     if run loadbootscript_2;         then run bootscript;     else         run default_bootcmd;     fi ; fi ; 
bootdelay=5
bootscript=source 40008000
default_bootcmd=echo >>> Run Default Bootcmd <<<;movi read kernel 0 40008000;movi read rootfs 0 41000000 100000;bootm 40008000 41000000
ethact=usb_ether
loadbootscript_1=echo >>> Load Boot Script from mmc 0:1 <<<;fatload mmc 0:1 40008000 boot.scr
loadbootscript_2=echo >>> Load Boot Script from mmc 0:2 <<<;fatload mmc 0:2 40008000 boot.scr
preboot=setenv stdin serial,nc
stderr=serial
stdin=serial
stdout=serial
usb_invert_clken=0
usbethaddr=DE:AD:BE:EF:00:03

관련참고
  http://elinux.org/ECE597_boot.scr   ( OMAP 기준 설명)
  http://forum.odroid.com/viewtopic.php?f=52&t=1104
  https://wiki.linaro.org/Resources/HowTo/boot.scr


2. Android Image 

ODROID에서 제공하는 Android Image들은 크게 아래와 같이 3 종류인 것 같으며, 각 설정에 변경이 되는 것 같다.

Download  Site 
  http://dn.odroid.com/4412/Android/


2.1 ODROID-X2의 Android Image 종류

  1. emmc_self_installer.zip   : Image를 emmc에  굽고, emmc에 모든것이 설치됨.
  2. sd2emmc_installer.zip    :  Image를 SD카드에 굽고, emmc에 모든것이 설치됨.
  3. sd_self_installer.zip        : Image를 SD카드에 굽고  SD카드에 모든것이 설치됨.
위 설정은 boot.scr의 아래 값에 의해 결정

#setenv device   "0"
#setenv ToSDMMC  "0"

2.2 ODROID-X2의 Android Image 구조 


  • Download Image
   sd_self_installer.img


  • sd_self_installer.img의 구성 
  1.  0~100M:  BL1,BL2, UBOOT 있을 거라고 생각 
  2.  FAT:  FAT Partion만 존재.



$ fdisk -l /media/sf_SHARED/images/sd_self_installer.img 

Disk /media/sf_SHARED/images/sd_self_installer.img: 524 MB, 524288000 bytes
189 heads, 61 sectors/track, 88 cylinders, total 1024000 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: 0x00008403

                                        Device Boot      Start         End      Blocks   Id  System
/media/sf_SHARED/images/sd_self_installer.img1          204800     1023999      409600    b  W95 FAT32 

// 204800 x 512 = 104857600  100M 부터설정,  
// Blocks: 1k단위로 되는 것 같고, Start,End 512 byte 단위로 되는 것 같다 

  • /media/sf_SHARED/images/sd_self_installer.img1
// offset  104857600= 204800 x 512 bytes
$ sudo mount -o loop,offset=104857600 /media/sf_SHARED/images/sd_self_installer.img ./tmp1
or 
$ sudo mount -o loop,offset=$((512 * 204800)) /media/sf_SHARED/images/sd_self_installer.img ./tmp1

$ ls ./tmp1
bl1.bin   cache_aa   system_ac system_af  system_ai  system_al  system_ao  system_ar  tzsw.bin     userdata_ab
bl2.bin   system_aa  system_ad system_ag  system_aj  system_am  system_ap  system_as  u-boot.bin   userdata_ac
boot.scr  system_ab  system_ae system_ah  system_ak  system_an  system_aq  system_at  userdata_aa  zImage

한번 install이 되면, 그 이후에 아래의 구조가 존재하지 않는다.
Fastboot에 의해 Android 를 SD Write를 한다.


2.3 boot.scr (android)  분석 
Uboot의 boot.txt  아래의 command를 나열하고 mkimage로 header를 붙혀주면된다.

 //앞부분, Image 정보부분이라서 깨짐
# BootScript for Odroid (2013/01/28)
#
#
# Boot.scr make script
#
# mkimage -A arm -T script -C none -n "Boot.scr for odroid" -d ./boot.ini ./boot.scr
#

# EMMC Self Update
#setenv device   "0"
#setenv ToSDMMC  "0"

# SD/MMC Self Update
setenv device   "0"
setenv ToSDMMC  "1"

# EMMC Update from SD/EMMC
#setenv device   "1"
#setenv ToSDMMC  "0"

# SD/MMC Update from EMMC
#setenv device   "1"
#setenv ToSDMMC  "1"

setenv check_oldboot "check_value 1"
setenv check_device_sd "check_value ${ToSDMMC}";
setenv check_device "check_value ${device}";
setenv mmc64gb_check "check_64gb ${device}"

if run check_oldboot;then echo >> new-bootloader <<; else echo >> old-bootloader <<; reset; fi;

#------------------------------------------------------------------------------------------------------
# UBOOT ENV Erase
#------------------------------------------------------------------------------------------------------
mmc write 0 40008000 0x4CF 0x20

fatload mmc 0:1 41000000 zImage;movi w k ${device} 41000000;

fatload mmc 0:1 44000000 system_aa;
fatload mmc 0:1 45000000 system_ab;
fatload mmc 0:1 46000000 system_ac;
fatload mmc 0:1 47000000 system_ad;
fatload mmc 0:1 48000000 system_ae;
fatload mmc 0:1 49000000 system_af;
fatload mmc 0:1 4A000000 system_ag;
fatload mmc 0:1 4B000000 system_ah;
fatload mmc 0:1 4C000000 system_ai;
fatload mmc 0:1 4D000000 system_aj;
fatload mmc 0:1 4E000000 system_ak;
fatload mmc 0:1 4F000000 system_al;
fatload mmc 0:1 50000000 system_am;
fatload mmc 0:1 51000000 system_an;
fatload mmc 0:1 52000000 system_ao;
fatload mmc 0:1 53000000 system_ap;
fatload mmc 0:1 54000000 system_aq;
fatload mmc 0:1 55000000 system_ar;
fatload mmc 0:1 56000000 system_as;
fatload mmc 0:1 57000000 system_at;

fatload mmc 0:1 58000000 userdata_aa;
fatload mmc 0:1 59000000 userdata_ab;
fatload mmc 0:1 5A000000 userdata_ac;

fatload mmc 0:1 41000000 cache_aa;

fdisk -c ${device}

fastboot flash system 44000000 0 ${device};

fastboot flash userdata 58000000 0 ${device};

fastboot flash cache 41000000 0 ${device};

fatformat mmc ${device}:1;

if run check_device; then fastboot poweroff; else reset; fi;


3. Ubuntu Image

  https://wiki.odroid.com/old_product/odroid-x_u_q/odroid_u3/u3_partition_table
  • Download Site
  http://dn.odroid.com/Ubuntu_X2/
  http://odroid.in/ubuntu_14.04lts/old_images/
  http://odroid.in/ubuntu_14.04lts/


  • Download Image
   odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img


3.1 Ubuntu Image 구조 


  • Download Image
   odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img

  • Image Partition 구성 
  1. 0~2048K: BL1,BL2,UBOOT 있을 거라고 예상
  2. FAT32:   FAT가 2048K부터 구성,(약 2Mbyte)
  3. Linux :   Linux 기본 Partion


  • Partition으로 구성확인방법 

fdisk -l  xxxx.img //512 Byte 기준표시
parted -s xxxx.img unit B print // Byte 기준표시 


$ fdisk -l  odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img

Disk odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img: 5904 MB, 5904530944 bytes
255 heads, 63 sectors/track, 717 cylinders, total 11532287 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: 0x000c4046

                                                       Device Boot      Start         End      Blocks   Id  System
odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img1            4096      266239      131072    b  W95 FAT32
odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img2          266240    11532287     5633024   83  Linux


parted -s xxxxx unit B print  사용가능 (Byte 기준표시)

$ sudo parted -s /media/sf_SHARED/odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img unit B print

  http://odroid.us/mediawiki/index.php?title=Updating_from_Root_File_System_Images


B. FAT32 Partition 정보확인

Booting에 필요한 주요파일로 구성되어 있으며, 간단히 구성을 보면 다음과 같다.
  1. board.dtb  // Device Tree Binary 
  2. boot.scr  // Uboot Script 
  3. boot.ini   // Uboot Env 설정 File 
  4. zImage,uImage   // Kernel Image
  5. uInitrd       // RAM Disk Image


$ mkdir tmp1 tmp2
                     // offset  2097152  = 4096 x 512 bytes
$ sudo mount -o loop,offset=2097152   /media/sf_SHARED/odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img ./tmp1
or
$ sudo mount -o loop,offset=$((512*4096)) /media/sf_SHARED/odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img ./tmp1

$ ls ./tmp1
board.dtb  boot  boot-hdmi1080.scr  boot-hdmi1080.txt  boot-hdmi720.scr  boot-hdmi720.txt  boot.ini  boot.scr  boot.txt  uImage  uInitrd  zImage

C. Linux Partition 정보확인

Mount 되는 Linux Fliesystem 정보로 Host Linux에서 확인을 해보자.

                     // offset  136314880 = 266240 x 512 bytes 
$ sudo mount -o loop,offset=136314880   /media/sf_SHARED/odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img ./tmp2
or
$ sudo mount -o loop,offset=$((512*266240)) /media/sf_SHARED/odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img ./tmp2
$ ls ./tmp2
bin  boot  dev etc  home  initrd.img  lib  lost+found media  mnt  opt  proc  root  run  sbin selinux  srv  sys  tmp usr  var  vmlinuz




4. Uboot script 


4.1 boot.scr  (ubuntu) 

ubuntu boot.scr  설치가 아닌  boot 이며,아래와 같이 기본 설정을 해준다.

setenv initrd_high "0xffffffff"
setenv fdt_high "0xffffffff"
setenv fb_x_res "1280"
setenv fb_y_res "720"
setenv hdmi_phy_res "720"
setenv bootcmd "fatload mmc 0:1 0x40008000 zImage; fatload mmc 0:1 0x42000000 uInitrd; bootm 0x40008000 0x42000000"
setenv bootargs "console=tty1 console=ttySAC1,115200n8 fb_x_res=${fb_x_res} fb_y_res=${fb_y_res} hdmi_phy_res=${hdmi_phy_res} root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro mem=2047M"
boot


4.2 boot.scr (dnw 적용) 

setenv initrd_high "0xffffffff"
setenv fdt_high "0xffffffff"
setenv bootcmd "dnw  0xc0008000; fatload mmc 0:1 0x42000000 uInitrd; bootm 0xc0008000 0x42000000"
setenv bootargs "console=tty1 console=ttySAC1,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro mem=1023M"
boot


4.3 boot.scr (printenv)
 

baudrate=115200
bootargs=fb_x_res=1280 fb_y_res=720 hdmi_phy_res=720 
bootcmd= mmc rescan 0:1; mmc rescan 0:2;  if run loadbootscript_1;     then run bootscript;  else     if run loadbootscript_2;         then run bootscript;     else         run default_bootcmd;     fi ; fi ; 
bootdelay=1
bootscript=source 40008000
default_bootcmd=echo >>> Run Default Bootcmd <<<;movi read kernel 0 40008000;movi read rootfs 0 41000000 100000;bootm 40008000 41000000
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.0.1
ipaddr=192.168.0.20
loadbootscript_1=echo >>> Load Boot Script from mmc 0:1 <<<;fatload mmc 0:1 40008000 boot.scr
loadbootscript_2=echo >>> Load Boot Script from mmc 0:2 <<<;fatload mmc 0:2 40008000 boot.scr
netmask=255.255.255.0
serverip=192.168.0.10


5. mkimage 의 Image header 제거 

mkimage를 사용할 경우 헤더가  64byte 가 사용이 되며, 이는  boot시 사용이 된다. 그리고, 이와 같은 이미지가 필요 없을 경우 아래와 같이 제거 한다.
mkimage를 사용하는 것은 ramdisk, kernel image, boot.scr이 있다.

dd if=image of=recovered file bs=64 skip=1

RAMDISK의 경우 아래와 같이 mkimage를 제거하고, 압축을 풀고 카피한 다음 분석가능

gunzip initrd.gz
mkdir init
cd init
cpio -i < ../initrd


  https://wiki.linaro.org/MichaelHope/Sandbox/DebuggingOnInitrd

9/21/2014

Porting QT on ODROID (추후 정리가 필요, TEST완료)

1. Backgraound 

QT는 Trolltech사에서 개발한 UI Interface이며 현재 임베디드에서 많이 이용이 되며, Linux 뿐만 아니라 Window 및 Mac OS, Vxworks 등에서 구동이 된다.
예전에 회사에서 QT를 몇번 Porting을 했지만 매번 까먹는것 같어 정리 좀 한다.

이제 나의 장난감 ODROID에 QT를 올려보고자 한다.

A. QT 관련회사
  • Trolltech: Qt를 개발한 노르웨이 회사
  • Digia     : 현재 QT를 인수한 회사  2012년에 인수
  • Nokia: 핸드폰 제조회사로 QT 회사인 Trolltech와 QT를  2008년에 인수 했지만 이후로 Digia가 인수. 

   http://ko.wikipedia.org/wiki/Qt_(%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC)
   http://en.wikipedia.org/wiki/Qt_(software)
   http://en.wikipedia.org/wiki/Qt_Development_Frameworks


B. ODROID 관련회사

  •  hardkernel : odroid platform을 개발 
  •  linaro : ARM 기반 Linux open source를 지향하는 비영리 단체이며 ARM, Freescale, IBM, Samsung, ST-Ericsson 및 TI가 주축으로 구성이 되어 Soc가 나올 경우 이 관련 솔루션개발. 

현재 UBUNTU Image는 Linaro에서 공급을 받고 있으며, 이를 수정

   http://ko.wikipedia.org/wiki/%EB%A6%AC%EB%82%98%EB%A1%9C


2. Cross Compile 설치

기존 사용하던 Code Sourcery로는 에러가 발생하여, 다른 Cross Compiler 사용.
무료 Version이라 hard floating point 미지원 문제인 것 같다.

apt-get install 로도 가능하나, odroid 추천사이트를 아래와 같이 찾음


- 기본 환경설정
$ sudo mkdir -p /usr/local/arm >/dev/null 
$ sudo chmod 777 /usr/local/arm
$ cd /usr/local/arm

- Down Toolchain
$ cd /usr/local/arm
$ wget https://launchpadlibrarian.net/129963014/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux.tar.xz
$ xz -d gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux.tar.xz 
$ tar -xvf gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux.tar

- 의존성 문제로 Link 사용
$ ln -s gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux /usr/local/arm/toolchain

- C-Compiler Cache 설정 (옵션)
$ cd /usr/local/arm/toolchain
$ mkdir bin-ccache
# you may already have ccache installed, but for the sake of illustration...
$ sudo apt-get install ccache
$ ln -s $(which ccache) arm-linux-gnueabihf-gcc
$ ln -s $(which ccache) arm-linux-gnueabihf-g++
$ ln -s $(which ccache) arm-linux-gnueabihf-cpp
$ ln -s $(which ccache) arm-linux-gnueabihf-c++

출처:
   http://odroid.us/mediawiki/index.php?title=Step-by-step_Cross-compiling_a_Kernel


3. Ubuntu Image

  • Download
   http://dn.odroid.com/Ubuntu_X2/

   * odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img


3.1 Modify the Image

  • IMAGE의 Partition 정보 확인

$ fdisk -l  odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img

Disk odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img: 5904 MB, 5904530944 bytes
255 heads, 63 sectors/track, 717 cylinders, total 11532287 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: 0x000c4046

                                                       Device Boot      Start         End      Blocks   Id  System
odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img1            4096      266239      131072    b  W95 FAT32
odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img2          266240    11532287     5633024   83  Linux

     A. FAT32 수정
         (kernel 및 boot.scr 변경)

// offset  2097152  = 4096 x 512 bytes
$  sudo mount -o loop,offset=2097152 /media/sf_SHARED/odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img ./tmp1
$ ls ./tmp1
board.dtb  boot  boot-hdmi1080.scr  boot-hdmi1080.txt  boot-hdmi720.scr  boot-hdmi720.txt  boot.ini  boot.scr  boot.txt  uImage  uInitrd  zImage
$ cd tmp1 
$ sudo cp boot.scr boot.scr.org   // backup 
$ vi boot.txt                    // mem=1023M 변경
$ sudo mkimage -A arm -T script -C none -n "Boot.scr for odroid" -d ./boot.txt ./boot.scr 


     B.Linux FS 수정
          (QT 복사 및 설정)

// offset  136314880 = 266240 x 512 bytes 
$ sudo mount -o loop,offset=136314880   /media/sf_SHARED/odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img ./tmp2
$ ls ./tmp2
bin  boot  dev etc  home  initrd.img  lib  lost+found media  mnt  opt  proc  root  run  sbin selinux  srv  sys  tmp usr  var  vmlinuz



3.3 Resize Image  (option)


기본에 존재하는 큰사이즈 Image를 줄이고, 필요없는 File System Partition 삭제
(NFS사용 ,SD도 4G가라 줄여야 함)

$ dd if=odroidx2_20130125-linaro-ubuntu-desktop_SDeMMC_with_HDMI.img of=newimage.img bs=1k count=200000

//FDISK로 두번째 partion 제거하고 사이즈를 아래와 같이 사이즈를 줄임
$ fdisk newimage.img
Command (m for help): d
Partition number (1-4): 2
Command (m for help): w
Command (m for help): p

Disk newimage.img: 204 MB, 204800000 bytes
255 heads, 63 sectors/track, 24 cylinders, total 400000 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: 0x000c4046

       Device Boot      Start         End      Blocks   Id  System
newimage.img1            4096      266239      131072    b  W95 FAT32

$ sudo mount -o loop,offset=2097152 ./newimage.img ./tmp1




  • DD 관련설명

   http://forum.falinux.com/zbxe/index.php?document_srl=561988&mid=lecture_tip


4. KERNEL 

4.1 Download

  • 아래의 사이트에 가서 소스를 확인하고, 각 branch를 확인 후 down

   https://github.com/hardkernel/linux

$ git clone https://github.com/hardkernel/linux.git -b odroid-3.0.y 


4.2  Build Kernel 

$ cd linux
$ ls arch/arm/configs/odroidx2*                         // 확인후 설정
arch/arm/configs/odroidx2_android_emmc_defconfig   arch/arm/configs/odroidx2_ubuntu_defconfig
arch/arm/configs/odroidx2_android_sdmmc_defconfig  arch/arm/configs/odroidx2_ubuntu_mali_defconfig

$ make  odroidx2_ubuntu_defconfig   

$ make zImage   or make                                // make는 moudles도 함께,           
$ ls arch/arm/boot/
$ make modules -j4      
$ make modules_install  INSTALL_MOD_PATH=~/tmp          // 임시설정, 위의 Android에 복사


5. QT 


5.1 Download 

구글에서 qt-everywhere-opensource-src

   http://download.qt-project.org/archive/qt/5.2/5.2.0/single/qt-everywhere-opensource-src-5.2.0.tar.gz.mirrorlist
   http://download.qt-project.org/archive/qt/5.0/5.0.2/single/qt-everywhere-opensource-src-5.0.2.tar.gz.mirrorlist
   http://download.qt-project.org/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz.mirrorlist



5.2  TSLIB 


$ ./configure prefix=/usr/local/Qt-4.8.6 --host=arm-linux CC=arm-linux-gnueabihf-gcc
$ make
$ make install 




ts_test.o: In function `main':
ts_test.c:(.text.startup+0x228): undefined reference to `rpl_malloc'
fbutils.o: In function `open_framebuffer':
fbutils.c:(.text+0x152): undefined reference to `rpl_malloc'
collect2: error: ld returned 1 exit status
make[2]: *** [ts_test] Error 1
make[2]: Leaving directory `/home/jhlee/qtwork/qtsource/tslib/tslib-1.0/tests'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/jhlee/qtwork/qtsource/tslib/tslib-1.0'
make: *** [all] Error 2


http://egloos.zum.com/sunnmoon/v/2348814
http://jiphung.com/399


5.3 QTWebkit

git clone git://gitorious.org/+qtwebkit-developers/webkit/qtwebkit.git


sudo apt-get install bison flex libqt4-dev libqt4-opengl-dev libphonon-dev libicu-dev libsqlite3-dev libxext-dev libxrender-dev gperf libfontconfig1-dev libphonon-dev g++




Ref. QTWebkit 빌드
http://webkit.sed.hu/blog/20100427/qtwebkit-cross-compilation-gcc-arm-linux
http://linuxspot.tistory.com/249
http://www.sarangnamu.net/basic/basic_view.php?no=4603&page=47&sCategory=0

5.4 Build QT 


개발전 우분투에서 설치해줘야할 Package들

 sudo apt-get install build-essential libfontconfig1-dev libfreetype6-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxrandr-dev libxrender-dev


  • vi mkspecs/qws/linux-arm-g++/qmake.conf
           :1,$s/arm-linux-/arm-linux-gnueabihf-/g 와 입력하여,
           아래와 같이 수정.

# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabihf-gcc
QMAKE_CXX               = arm-linux-gnueabihf-g++
QMAKE_LINK              = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_STRIP             = arm-linux-gnueabihf-strip

// TS Lib 설치 했을 경우 , Option
QMAKE_INCDIR += /usr/local/Qt-4.8.6/include
QMAKE_LIBDIR += /usr/local/Qt-4.8.6/lib -lts


  • 아래와 같이 QT source에 들어가 초기화하고, 설정 및 Make 

$ sudo -i  
$ cd qt-everywhere-opensource-src-4.8.4
$ make confclean
$  echo yes | ./configure -prefix /usr/local/Qt-4.8.6 -xplatform qws/linux-arm-g++ -embedded arm -little-endian  -release -no-largefile -no-accessibility -no-qt3support -qt-zlfile -no-accessibility -no-qt3support -qt-zlib -qt-libpng -no-libmng -qt-libjpeg -no-libtiff -no-nis -no-cups -qt-freetype -depths 16,24,32 -opensource




$ make confclean
$ echo yes | ./configure -prefix /usr/local/Qt-4.8.6 -xplatform qws/linux-arm-g++ -embedded arm -little-endian  -release -no-largefile -no-accessibility -no-qt3support -qt-zlib -qt-libpng -no-libmng -qt-libjpeg -no-libtiff -no-nis -no-cups -qt-freetype -depths 16,24,32 -opensource 

$ make -j 5
$ make install

//TSLibrary 추가

$echo yes | ./configure -prefix /usr/local/Qt-4.8.6 -xplatform qws/linux-arm-g++ -embedded arm -little-endian  -release   -no-largefile -no-accessibility  -no-qt3support -qt-zlib -qt-libpng  -qt-libjpeg  -qt-libtiff -qt-libmng  -qt-freetype -depths 16,24,32 -opensource  -qt-gfx-transformed -qt-mouse-tslib -qt-mouse-pc -webkit -qt-sql-qsqlite
$ make -j 5
$ make install




http://www.sereno-labs.com/Qt_4.8.3_installation_procedure_FriendlyARM_mini6410_Linux


6. QT Build ERRS 

1. ERROR-1


qtconcurrentiteratekernel.cpp:(.text+0x1a): undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status
make[1]: *** [../../lib/libQtCore.so.4.8.6] Error 1

vi  src/corelib/Makefile

 LIBS  = $(SUBLIBS)  -L/opt/qt-everywhere-opensource-src-4.8.4/lib -lpthread -lm -ldl -lrt


2. ERROR-2

make: *** [sub-examples-make_default-ordered] Error 2
           
                위의 Setting에서 기본환경 설치 확인

3. ERROR-3 (TSLIB)

참고사항
The tslib functionality test failed!
 You might need to modify the include and library search paths by editing
 QMAKE_INCDIR and QMAKE_LIBDIR in


TSLib 설치 및 QMAKE_LIBDIR 설정


4. 기타에러 

uentialanimationgroup.h -o .moc/release-shared-emb-arm/moc_qsequentialanimationgroup.cpp

compilation terminated.
make[1]: *** [.pch/release-shared-emb-arm/QtCore.gch/c++] Error 1
make[1]: *** Waiting for unfinished jobs...

이전에 permission 문제를 발견을 해서,

chown -R jhlee .
chgrp -R jhlee . 로 해결



5.6 Configure option 설명

-prefix /usr/local/Qt-4.8.6 : QT library가 설치될 장소 선정

-opensource : opensource 이 옵션일 경우 question 이 없어짐  (상용 –commercial)

-embedded arm : 임베디드 ARM 기반으로 빌드한다.

-platform /qws/linux-x86_64-g++ : Host에서 사용할 컴파일러(32비트 사용시는/qws/linux-x86-g++ 옵션을 사용)

-xplatform /qws/linux-dm368-g++ : Target에서 사용할 컴파일러(dm368일 경우)

-depths 16,24,32 : 지원되는 Bit-per-pixel. (콤마로 지원되는 값들을 구분)

-no-cups : CUPS를 지원하지 않도록 함.

-no-largefile : 대용량 파일을 지원하지 않도록 함.

-no-accessibility : Windows Active Accessibility을 지원하지 않도록 함.

-no-openssl : OPENSSL을 지원하지 않는다.

-no-gif : GIF 읽기를 지원하지 않는다.

-no-libtiff : TIFF를 지원하지 않는다.

-no-libmng :MNG를 지원하지 않는다.

-qt-gfx-transformed : 가속되지 않은 Linux Framebuffer(/dev/fb0)을 Enable한다.

-plugin-gfx-transformed : Linux Framebuffer를 런타임시에 링크시킨다.

-continue : 가능한 범위 내에서 오류를 무시하고 계속한다.

-no-mouse-pc : PC 마우스 드라이버를 사용하지 않는다.

-no-mouse-linuxtp : linuxtp 마우스 드라이버를 사용하지 않는다.

-qt-mouse-tslib : ‘tslib’ 터치 드라이버를 사용한다.

-plugin-mouse-tslib : ‘tslib’ 터치 드라이버를 런타임시에 링크한다.

-little-endian : Target 플랫폼은 little-endian으로 동작한다.

-host-little-endian : Host 플랫폼은 little-endian으로 동작한다.

-no-multimedia : Qt Multimedia 모듈을 빌드하지 않는다.

--no-svg : SVG(Scalable Vector Graphics) 모듈을 빌드하지 않는다.

-no-webkit : Webkit 모듈을 빌드하지 않는다.

-no-mmx : MMX 명령을 사용하지 않는다.

-no-3dnow : 3DNOW 명령을 사용하지 않는다.

-no-sse : SSE 명령을 사용하지 않는다.

-no-sse2 : SSE2 명령을 사용하지 않는다.

-no-qt3support : Qt3 지원을 사용하지 않는다.

-no-script : Qt Script를 사용하지 않는다.

-no-scripttools : Qt ScriptTools를 사용하지 않는다.

-qt-libpng : png 라이브러리를 사용한다.

-qt-zlib : zlib 옵션을 사용하도록 한다.(32비트에서만 필요할 것이다.)

-qconfig petra : qconfig-petra.h 를 참조하여 필요한 부분만 컴파일한다.

-release : 디버깅 모드를 사용하지 않고 릴리즈 모드로 컴파일한다.

-qt-sql-[driver-name]  : qmysql, qsqlite,
                                   
http://qt-project.org/doc/qt-4.8/sql-driver.html
http://qt-project.org/wiki/Building_Qt_for_Embedded_Linux







5.3  QT TEST 

http://processors.wiki.ti.com/index.php/Qt_Tips
http://com.odroid.com/sigong/blog/blog_list.php?bid=133

기본환경 설정


  • cat /etc/X11/xorg.conf
기존사용하던 Interface 파악, FB6 HDMI, FB0 LCD

  //FB6 HDMI  , FB0 LCD
Section "Device"
        identifier "FBDEV"
        Driver "fbdev"
        Option "fbdev" "/dev/fb6"
EndSection

Section "Screen"
        identifier "Default Screen"
        Device "FBDEV"
        DefaultDepth 16
EndSection


  • vi /etc/enviornments   or   /etc/rc.local  (/etc/rc.local 동작안함)


export QWS_DISPLAY="LinuxFb:/dev/fb6"
export LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/Qt-4.8.6/lib:/usr/local/lib
export PATH=$PATH:/usr/local/bin:/usr/local/Qt-4.8.6/demos/deform

export QWS_DISPLAY="LinuxFb:/dev/fb6"
export QWS_MOUSE_PROTO="USB:/dev/input/event1"
export LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/Qt-4.8.6/lib
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin:/usr/local/Qt-4.8.6/demos/deform
cd /usr/local/Qt-4.8.6/demos/deform
./deform -qws


  • ./deform -qws -display LinuxFb:/dev/fb6 // -display 옵션, Multi로 사용가능



  • 관련 link

QTWebKit
  http://linuxspot.tistory.com/249


ODROID QT Porting
  http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidx&kind=52&bid=1644

  http://napan.ca/ghpsdr3/index.php/Odroid

QT 4.7 Porting GUIDE
  http://www.jkelec.co.kr/img/arm/arm11/s3c6410_startkit/man/s3c6410_startkit_qt4.7.0_porting.html


QT 구조
  http://qt-project.org/doc/qt-4.8/qt-embedded-linux.html

QT 4.8 Porting GUIDE
  http://qt-project.org/doc/qt-4.8/qt-embedded-install.html
  http://qt-project.org/doc/qt-5/embedded-linux.html

QT 5.2
  https://www.ics.com/blog/building-qt-and-qtwayland-raspberry-pi#.VCKXLvl_uGE

QT 4.8.4
  http://galhui.tistory.com/38

  http://blog.csdn.net/wangpengqi/article/details/8728234

  http://stackoverflow.com/questions/19059596/cross-compiling-qt-for-pandaboard
  http://qt-project.org/forums/viewthread/16595
  http://forum.falinux.com/zbxe/index.php?document_srl=506571&mid=question

  http://chiccoder.tistory.com/36 
  (USB 모니터 및 Touchscreen example)

  • FILE SYSTEM 
추후에 직접 File system 을 만들거나 다른 BSP에서 가져와서 편집하자. 

  https://wiki.kldp.org/wiki.php/LinuxBasedOnUSB-StorageDevice
http://processors.wiki.ti.com/index.php/Creating_a_Root_File_System_for_Linux_on_OMAP35x
  https://emreboy.wordpress.com/2012/12/20/building-a-root-file-system-using-busybox/
  https://gist.github.com/chrisdone/02e165a0004be33734ac2334f215380e


  • Window에서 Image굽는 프로그램
  http://dn.odroid.com/DiskImager_ODROID/

8/24/2014

IPTIME n150ua Android WIFI HAL 기본설정

나의 장난감 ODROID위에 IPTIME n150ua의 기본 Linux Driver를  Porting 한 후 에기본적인 TEST가 진행된 후에 이일을 진행해야한다.

아래와 같이 Android의 HAL Interface의 설정을 수정해주면 Android에서도 문제없이 WIFI를 사용 할 수 있다. 
현재 이 부분은 기본적인 TEST를 마친 상황이다.

Odroid에서 IPTIME n150ua Porting 
  https://ahyuo79.blogspot.com/2014/08/android.html
Odroid  WIFI 관련 설정 및 테스트
  https://ahyuo79.blogspot.com/2014/03/dlna-upnp.html

  • vi device/hardkernel/odroidx2/BoardConfig.mk
새로 WIFI_DRIVER_MODULE를 추가하여 아래와 같이 넣어 모듈형태로 넣음 
BOARD_WIFI_VENDOR       := realtek
BOARD_WLAN_DEVICE       := rtl819xxu

WPA_SUPPLICANT_VERSION              := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER         := WEXT
BOARD_WPA_SUPPLICANT_PRIVATE_LIB    := lib_driver_cmd_rtl
WIFI_DRIVER_MODULE_NAME                 := "rtl8191su"
WIFI_DRIVER_MODULE_PATH             := "/system/lib/modules/rtl8191su.ko"
WIFI_DRIVER_MODULE_NAME2                := "rtl8192cu"
WIFI_DRIVER_MODULE_PATH2            := "/system/lib/modules/rtl8192cu.ko"
WIFI_DRIVER_MODULE_NAME3                    := "rt5370sta"
WIFI_DRIVER_MODULE_PATH3            := "/system/lib/modules/rt5370sta.ko"
WIFI_DRIVER_MODULE_NAME4                := "rt3070sta"
WIFI_DRIVER_MODULE_PATH4            := "/system/lib/modules/rt3070sta.ko" 

  • vi hardware/libhardware_legacy/wifi/wifi.c  
추가된 WIFI 모듈을 Load하기 위해서 HAL를 수정 
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 */

        char node[50] = {'\0',};
    char buf[5] = {'\0',};
        DIR *dir = opendir("/sys/bus/usb/devices/");
        struct dirent *dent;
        if (dir != NULL) {
                while ((dent = readdir(dir)) != NULL) {
            memset(node, '\0', 50);
                        sprintf(node, "/sys/bus/usb/devices/%s/idVendor", dent->d_name);
                        int vid_fd = open(node, O_RDONLY);
            memset(buf, '\0', 5);
            .... 

                                                } else if (strcmp(buf, "3070") == 0) { 
                                                        ALOGE("rt3070 Wi-Fi Module 4");
                                                        //wifi module 4 rt3070
                                                        strcpy(DRIVER_MODULE_NAME, WIFI_DRIVER_MODULE_NAME4);
                                                        strcpy(DRIVER_MODULE_TAG, WIFI_DRIVER_MODULE_NAME4 " ");
                                                        strcpy(DRIVER_MODULE_PATH, WIFI_DRIVER_MODULE_PATH4);
                                                        close(pid_fd);
                                                        close(vid_fd);
                                                        break;
                                                 }

  • vi hardware/libhardware_legacy/wifi/Android.mk
Build할 경우 동일하게 설정 
ifdef WIFI_DRIVER_MODULE_PATH
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH=\"$(WIFI_DRIVER_MODULE_PATH)\"
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH2=\"$(WIFI_DRIVER_MODULE_PATH2)\"
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH3=\"$(WIFI_DRIVER_MODULE_PATH3)\"
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH4=\"$(WIFI_DRIVER_MODULE_PATH4)\"
endif
...
ifdef WIFI_DRIVER_MODULE_NAME
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_NAME=\"$(WIFI_DRIVER_MODULE_NAME)\"
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_NAME2=\"$(WIFI_DRIVER_MODULE_NAME2)\"
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_NAME3=\"$(WIFI_DRIVER_MODULE_NAME3)\"
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_NAME4=\"$(WIFI_DRIVER_MODULE_NAME4)\"
endif


  • vi ./device/hardkernel/odroidx2/conf/init.odroidx2.rc
HAL 공유 Library만 변경
                libhardware_legacy.so

out/target/product/odroidx2/obj/SHARED_LIBRARIES/libhardware_legacy_intermediates/wifi/wifi.o


./out/target/product/odroidx2/root/init.odroidx2.rc
./out/target/product/odroidx2/system/init.odroidx2.rc

cp rt3070sta.ko  to  device/hardkernel/odroidx2/drivers/

8/23/2014

IPTIMEn150ua on ODROID (기본동작확인)

1. IPTIME n150ua Porting


1.1 개요

ODROID X2 보드 위에 다른 USB LAN을 사용하기 위해서 남은 USB LAN을 집에서 찾기 시작했지만,
내집에서는 찾지를 못하고 때마침 대전 집에서 우연히 발견된 IPTIME n150ua을 가지고 이를 시작하게됨.

  • 모델명: IPTIME n150ua
  • USB device로 동작이되는 WLAN Card 

우선 IPTIME n150ua 사의 이 칩명이 알아야 할 것 같아  아래와 같이 IPTIME 사이트에서 질문을 했더니  정확한 칩명과 관련 Driver를 제공을 해주셨다.
집에서 심심해서 우연히 시작한일인데, 정보를 제공해주신 IPTIME에 감사할 뿐이다,


1.2  IPTIME n150ua 정보 및 관련 사이트 
  1. 모델명:  RT3070  
  2. Device Driver : 2011_0107_RT3070.tar

  • IPTIME 사용되는 CHIP이름알기 
IPTIME에 아래와 같이 직접 물어보았더니, 친절하게 답변을 해주셨다.
감사할 뿐이다. 그래서 위와 같이 Linux Driver를 구하고 이 일을 시작하게됨      

오랜만에 다시 링크하니, 내가 질문한 것이 없어져서, 다른 것으로 대체, 
  http://www.iptime.co.kr/~iptime/bbs/view.php?id=qna&no=292133


  • 기능설명, WPS란?
  http://iptime.co.kr/bbs/view.php?id=faq_setup&no=266

  • Download Linux Driver
  http://www.mediatek.com/en/downloads/


2. WLAN Linux Driver 구성 


2.1 기본숙지문서

  • README_STA_usb
  • iwpriv_usage.txt 

  Driver Build 방법 및 Test 하는 방법은 인터넷 및 책에  설명이 너무 잘 나와있다
  Linux Driver의 상위 두 문서를 제대로 읽는다면, 기본 Build 및 Test 진행에 어려움이 없다.

   1.  Build  사항 및  How to install
   2.  RT2870STA.dat 설정 파일 설명


2.2 Makefile 기본구성  


Makefile                               // Main 구성 (PLATFORM 설정 및 기본 TEST)
       ./os/linux/config.mk            // 각 설정
       ./os/linux/Makefile.4 or 6      // kernel version 에 따라 설정되며, 실제 빌드

  
3. WLAN Linux Driver 환경설정 및 빌드 

수정은 아래와 같이 순서대로 하고 빌드는 make를 하면 원하는 모듈을 얻을 수 있을 것이다.
  • rt3070sta.ko

3.1 Makefile 수정

아래의 변수 PLATFORMTARGET PLATFORM은 기존의 것을 가지고 수정하여 만들면된다.
어차피 Linux Kernel source path 문제로 인하여 아래와 같이 수정해야한다.
PLATFORM을 새로 만들어서 하면, 이상하게도 내 환경변수들이 제대로 설정이 안되어서,
기존 에 존재하던 것을 수정하여 Build를 시도.
  • PLATFORM : 5VT로 선정하여 수정
  • LINUX_SRCCROSS_COMPILE  환경설정 

ifeq ($(PLATFORM),5VT)
LINUX_SRC = /home/jhlee/mywork/kernel/linux
CROSS_COMPILE = arm-none-eabi-
endif

LINUX:                                         // TARGET LINUX에서  변수 TEST  
        echo ">>> PLATFORM  $(PLATFORM)"       // 각종 변수 TEST 
        echo ">>> TEST_INC  $(TEST_INC)"
        echo ">>> LINUX_SRC  $(LINUX_SRC)"
        ....  
        echo " TEST my plaform LINUX_SRC=$(LINUX_SRC) CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH)  "  // 변수 TEST , 처음에 제대로 안들어옴
        $(MAKE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules


3.2 vi os/linux/config.mk  수정

    WPA_SUPPLICANT 기능 지원을 위해 아래와 같은 기능을 추가.
    (주의: HAS_WPA_SUPPLICANT=y 바로 옆에 주석을 달았더니, 환경변수가 미설정됨)

    # Support Wpa_Supplicant
    HAS_WPA_SUPPLICANT=y                              
    
    # Support Native WpaSupplicant for Network Maganger
    HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y  
    
    ifeq ($(PLATFORM),5VT)
    EXTRA_CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common   -DMODULE $(WFLAGS)
    endif


    3.3 vi os/linux/usb_main_dev.c 수정

      #include "rt_config.h"
      
      ......
      MODULE_AUTHOR("Paul Lin ");
      MODULE_DESCRIPTION("RT2870 Wireless Lan Linux Driver");
      MODULE_LICENSE("GPL");

      참조사항 
        http://www.linuxforums.org/forum/wireless-internet/161550-rt3070sta-module-license-unspecified-taints-kernel-solved.html

      참고사항  A. 
                    
                    CFLAG를 사용할 경우 에러,  CFLAGS -> EXTRA_CFLAGS 변경해줌

      scripts/Makefile.build:49: *** CFLAGS was changed in "/home/jhlee/mywork/2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/Makefile". Fix it to use EXTRA_CFLAGS.  Stop.
      

      참고사항 B.

                    WLAGS 값이 제대로 동작이 안되어 이를 Debugging.
      • vi os/linux/Makefile.6   (맨 아래에 추가, 각 변수확인 후 지움)

      %.o:
              echo "WLAGS=$(WLAGS)"
              echo "EXTRA_CFLAGS=$(EXTRA_CFLAGS)"

      참고사항 C.

                        아래와 같이  insmod시 에러시 MODULE_LICESE("GPL") 추가

      # insmod  /lib/modules/rt3070sta.ko                            
      [ 2152.229076] rt3070sta: Unknown symbol usb_alloc_urb (err 0)
      [ 2152.229239] rt3070sta: Unknown symbol usb_free_urb (err 0)
      [ 2152.234685] rt3070sta: Unknown symbol usb_alloc_coherent (err 0)
      [ 2152.240690] rt3070sta: Unknown symbol usb_register_driver (err 0)
      [ 2152.246849] rt3070sta: Unknown symbol usb_put_dev (err 0)
      [ 2152.252033] rt3070sta: Unknown symbol usb_get_dev (err 0)
      [ 2152.257417] rt3070sta: Unknown symbol usb_submit_urb (err 0)
      [ 2152.263094] rt3070sta: Unknown symbol usb_free_coherent (err 0)
      [ 2152.269011] rt3070sta: Unknown symbol usb_control_msg (err 0)
      [ 2152.274745] rt3070sta: Unknown symbol usb_deregister (err 0)
      [ 2152.280535] rt3070sta: Unknown symbol usb_kill_urb (err 0)


      3.4 Android 관련수정 

      Android 수정관련사항 
       http://ac100.wikispaces.com/Android+rt3070+or+rt2x00


      4. 기본 TEST on the ODROID

      RT3070이 기본이 STA로 설정이 되어있게 되어있어서, 기본 네트워크 동작을 확인을 했으며, AP는 설명했지만 Test를 하지 못했다.

      RT2870STA.dat 파일을 Loading 하는 시점은 ifconfig ra0 up 이다.그리고, 이와 관련된 설정은 iwpriv로 변경이 가능하다.
      WPS설정 iwpriv에서 command 형식으로 지원을 하는데, 이부분도 Test 못함.
      급히 다른 회사일 때문에 모든것을 마무리 했으며, 추후에 더 시간이 있다면 그때 하도록하자. 

      4.1 copy rt3070sta.ko to odroid

      on serial or adb shell
       # su
       # mount -o rw,remount -t ext4 /dev/block/mmcblk0p2 /system
       # mount -o rw,remount -t ext4 /dev/root / 

      Send the driver & data to the device on Window
      Y:\WORKS\LINUX\SHARED> adb push rt3070sta.ko     /system/lib/modules
      Y:\WORKS\LINUX\SHARED> adb push RT2870STA.dat /etc/Wireless/RT2870STA


      4.2  USB 연결확인 및 기본설정확인. 

      on serial or adb shell
      root@odroidx2:/etc/Wireless/RT3070STA # lsusb      // 연결확인                                 
      Bus 001 Device 001: ID 1d6b:0002
      Bus 002 Device 001: ID 1d6b:0001
      Bus 001 Device 002: ID 0424:3503
      Bus 001 Device 003: ID 0424:9514
      Bus 001 Device 004: ID 0424:ec00
      Bus 001 Device 006: ID 148f:3070
      
      # vi RT2870STA.dat 
      AuthMode OPEN ->WPA2
      
      # cat /data/misc/wifi/wpa_supplicant.conf  
      ctrl_interface=/data/misc/wifi/sockets
      update_config=1
      device_name=odroidx2
      manufacturer=HARDKERNEL Co., Ltd.
      model_name=ODROID-X2
      model_number=ODROID-X2
      serial_number=
      device_type=10-0050F204-5
      config_methods=physical_display virtual_push_button
      
      network={
              ssid="CWPW"
              key_mgmt=NONE
              priority=1
      }
      
      network={
              ssid="U+Net6AFB"
              psk="5000050330"
              key_mgmt=WPA-PSK
              priority=2
      }
      

      4.3  connect to AP with wpa_suppicant  

      on serial or adb shell
      # su
      # insmod  /lib/modules/rt3070sta.ko
      # ifconfig ra0 up
      
      # wpa_supplicant -Dwext -ira0 -c/data/misc/wifi/wpa_supplicant.conf -dd &
      # wpa_cli -p/data/misc/wifi/sockets   -ira0
      .....
      Interactive mode
      
      > scan
      OK
      > scan_result
      bssid / frequency / signal level / flags / ssid
      00:40:5a:9c:6a:f8 2422 -51 [WPA-PSK-TKIP][ESS] 
      00:40:5a:9c:6a:fa 2422 -55 [WPA2-EAP-CCMP][ESS] U+zone
      00:40:5a:9c:6a:f9 2422 -55 [WPA2-PSK-CCMP][ESS] U+Net6AFB
      00:26:66:a0:35:ba 2432 -73 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] iptime89
      6c:fd:b9:30:ba:82 2457 -69 [WEP][ESS] SAMSUNG
      00:24:a5:34:2f:b3 2462 -81 [WPS][ESS] 0024A5342FB3
      
      > list_network                     // wpa_supplicant.conf 의 list 
      network id / ssid / bssid / flags
      0 CWPW any 
      1 U+Net6AFB any [CURRENT]
      
      
      > select_network 1                //  list 중 선택 
      OK
      > add_network                        //  아래와 같이 WPA-PSK로 추가 가능 
      2
      > set_network 2 ssid "U+NetE3CD"  
      OK
      > set_network 2 key_mgmt WPA-PSK
      OK
      > set_network 2 psk "1122333353"     //
      OK
      > select_network 1                   // 추가했으나, 기존것으로 연결
      OK
      > status 
      bssid=00:40:5a:9c:6a:f9
      ssid=U+Net6AFB
      id=1
      mode=station
      pairwise_cipher=CCMP
      group_cipher=CCMP
      key_mgmt=WPA2-PSK
      wpa_state=COMPLETED
      address=00:26:66:41:26:12 

      관련사항
        http://sirlagz.net/2012/08/27/how-to-use-wpa_cli-to-connect-to-a-wireless-network/
        http://lists.shmoo.com/pipermail/hostap/2009-December/020817.html


      4.4 connect to AP without wpa_suppicant  

      # ifconfig ra0 up
      # iwconfig ra0 essid "U+NetE3CD"       //  iwpriv ra0 set SSID="U+NetE3CD" 동일
      # iwpriv ra0 set AuthMode=WPA2PSK  .
      # iwpriv ra0 set EncrypType=AES
      # iwpriv ra0 set WPAPSK="1000003353"
      
      # iwconfig ra0   // 확인
      ra0       Ralink STA  ESSID:"U+NetE3CD"  Nickname:"RT2870STA"
                Mode:Managed  Frequency=2.412 GHz  Access Point: 00:27:1C:CC:E3:CB 
                Bit Rate=135 Mb/s 
                RTS thr:off   Fragment thr:off
                Encryption key:533A-C4F7-1FC2-8647-DE03-0301-329D-606C [2]   Security mode:open
                Link Quality=100/100  Signal level:-29 dBm  Noise level:-32 dBm
                Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
                Tx excessive retries:0  Invalid misc:0   Missed beacon:
      
      # dhcpcd -n ra0
      dhcpcd[3816]: sending signal 14 to pid 3736
      dhcpcd[3816]: version 5.5.6 starting
      dhcpcd[3816]: ra0: sending IPv6 Router Solicitation
      dhcpcd[3816]: ra0: rebinding lease of 192.168.219.109
      dhcpcd[3816]: ra0: acknowledged 192.168.219.109 from 192.168.219.1
      dhcpcd[3816]: ra0: checking for 192.168.219.109
      dhcpcd[3816]: ra0: sending IPv6 Router Solicitation
      dhcpcd[3816]: ra0: leased 192.168.219.109 for 86400 seconds
      dhcpcd[3816]: forked to background, child pid 3850
      
      # ping 192.168.219.1
      64 bytes from 192.168.219.1: icmp_seq=1 ttl=64 time=8.91 ms
      64 bytes from 192.168.219.1: icmp_seq=2 ttl=64 time=1.93 ms
      64 bytes from 192.168.219.1: icmp_seq=3 ttl=64 time=1.92 ms
      


      4.5  관련 기타사항 기록  

      dhcpd Manual 
       http://www.daemon-systems.org/man/dhcpcd.8.html
       # iwpriv ra0 set EthConvertMode=clone
       # iwpriv ra0 set EthCloneMac="00:00:00:00:00:00"
       AuthMode=OPEN  -> WPA2

      Odroid 관련이슈 
       https://code.google.com/p/0xdroid/issues/detail?id=160

      # cat /proc/net/dev                                         
      Inter-|   Receive                                                |  Transmit
       face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
          lo:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
        sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      ip6tnl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
        eth0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
         ra0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      
      
      
       # cat /proc/net/wireless                                     
      Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE
       face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
         ra0: 0000   10.  -256   -256        0      0      0      0      0        0
      
      root@odroidx2:/ # netcfg
      lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
      sit0     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
      ip6tnl0  DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
      eth0     UP                                     0.0.0.0/0   0x00001003 1a:35:8f:c5:6e:b0
      ra0      UP                                     0.0.0.0/0   0x00001043 00:26:66:41:26:12
      
      
      
      255|root@odroidx2:/ # ifconfig ra0 up                                         
      [ 5851.355400] (Efuse for 3062/3562/3572) Size=0x2d [2d0-2fc]
      [ 5851.867774] -->RTUSBVenderReset
      [ 5851.868026] <--rtusbvenderreset p="">[ 5852.410959] RtmpOSFileOpen(): Error 2 opening /etc/Wireless/RT2870STA/RT2870STA.dat
      [ 5852.412997] Open file "/etc/Wireless/RT2870STA/RT2870STA.dat" failed!
      [ 5852.419480] 1. Phy Mode = 0
      [ 5852.422330] ERROR!!! RTMPReadParametersHook failed, Status[=0x00000001]
      [ 5852.486133] !!! rt28xx Initialized fail !!!
      error: SIOCSIFFLAGS (Operation not permitted)

      관련사항
        http://forum.samygo.tv/viewtopic.php?f=4&t=3979
        http://www.korenixembedded.com/images/support/faq/JetBox_UM_Sparklan%20WPER-150GN%20wifi_v0.0.1.pdf
        https://forums.gentoo.org/viewtopic-p-7290276.html
        http://rhdxmr.tistory.com/48