7/31/2014

repo 기본 사용법

1. repo란? 

Android에서 Build를 전체하고자 한다면, PDK(Plaform Development Kit) 알아야 할 기본 Tool이 repo이다.
repo는 python program으로 XML의 기반의 manifest를 이용하여 git project를 묶어서 하나의 project로 관리하고 있다.

repo를 정확히 이해하기 위해서 다음과 같은사항을 알아두자.

  1. manifest.xml의 규칙
  2. git 명령

1.1 Repo 설치 및 설정

처음 repo 가 설치가 되어있지 않았다면, 반드시 download하고 환경설정해야 사용하기가 편한다.
그리고 더불어 python은 설치가 되어야 있어야 한다.
  • repo download 

$ sudo apt-get install curl
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
or
$ curl https://android.git.kernel.org/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

  • repo 환경설정 

$ vi ~/.bashrc or vi ~/.bash_profile or vi ~/.profile  // 가능하면 .profile or .bash_profile 
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

or
$ export PATH=~/bin:${PATH}

  • repo 구성 및 version 확인
repo의 python script를 보고 싶다면, 간단히 vi ~/bin/repo 로 확인.

$ vi ~/bin/repo
....
VERSION = (1, 22)
....

기본설치가 되었다면, repo는 내부적으로 git을 이용하기 때문에 이제 git 설정을 해야한다.

  • Google의 repo 설치 및 Git 기본설정사항
구글 매뉴얼이 볼때마다 업그레이드 되므로, 나중에 이것을 보면 될 것 같다.
  http://source.android.com/source/downloading.html


1.2 Git 기본개념

repo는 위에서 설명했듯이 여러 git를 관리해주는 python script로 기본적으로 정확한 동작을 이해하려면 git의 기본명령을 알아야 하겠다.

GIT의 기본개념 
  https://ahyuo79.blogspot.com/2014/07/git-for-window_20.html

GIT의 기본명령어 
   https://ahyuo79.blogspot.com/2014/07/git.html?zx=2a45dd959990440a

  • Pro-Git 책으로 Git에 관련된 세부사항 
Git에 대해 세부적으로 좀 더 알고 싶다면, 각 사용법을 보자.
  https://git-scm.com/book/en/v2
  https://git-scm.com/docs
  https://git-scm.com/docs/git-fetch


1.3 Gerrit (Git Review) 개념

web-based code를 GIT를 사용하는 system이라고 하며, Google Web Toolkit 이라고 한다. 
GIT의  review 하기위한 tool이라고 하며, Gerrit/Git Review는 GIT의 사용을 집중화시켜준다고 하는데,정확한 용도파악 되지 않았다.

아래의 개념을 보면, remote repository에게 update가 가능한걸로 보여지면, 이것을 어떻게 사용하는지는 정확히 파악을 못하겠다.
GIT의 Remote Repository를  Web base 로 보여주고 이를 관리하는 것으로 보이며, 일단 넘어가자.
Gerrit은 추후 다시 보강 

Github에서 .gitreview 사용법예제 

Git review 사용시 필요한 Package
  http://www.mediawiki.org/wiki/Gerrit/git-review


1.4 Repo 이용한 개발방법 

아래의 기본설명은 repo와 git를 이용한 소스관리방법으로 android에서 소개한 자료이며,
만약 download (git pull) 만 진행을 할 것이면 이부분 까지는 이해 할 필요는 없을 것 같다.



Command Description
repo init Initializes a new client.
repo sync Syncs client to repositories.
repo start Starts a new branch.
repo status Shows status of current branch.
repo upload Uploads changes to the review server.
git add Stages files.
git commit Commits staged files.
git branch Shows current branches.
git branch [branch] Creates new topic branch.
git checkout [branch] Switches HEAD to specified branch
git merge [branch] Merges [branch] into current branch.
git diff Shows diff of unstaged changes.
git diff --cached Shows diff of staged changes.
git log Shows history of current branch.
git log m/[codeline].. Shows commits that are not pushed.

구글메뉴얼 설치 및 개발

구글메뉴얼 repo 사용법
  https://source.android.com/setup/develop/repo


2. Repo의 기본활용 


2.1 Repo 사용방법

Repo프로젝트를 만들기 위해서는 manifest.xml이 필요하다.
하지만, 기존에 있는 존재하던 project의 manifest.xml 있다면, 그 위치로 설정을 하고,
초기화를 진행을 한다.

먼저 사용법을 잘 모를 경우, repo --help or repo init --help 치면 자세한 사용법이
나오며, 각 명령어 마다 --help를 이용하면 된다.

  • repo init     
처음 반드시 실행하여 설정하며, 설정시 .repo 디렉토리 안에 모든 기본구성파일 설정된다.
XML for manifest

repo init -u url [options] 
repo init --help 확인가능

Manifest options Description
-u URL, --manifest-url=URL manifest repository location
-m NAME.xml, --manifest-name=NAME.xml initial manifest file 다른 manifest.xml 지정가능 ( 기본: default.xml)
-b REVISION, --manifest-branch=REVISION manifest branch or revision
  • repo sync
repo init을 한 후 , repo 파일들이 생성된 후 , project 파일들을 받기위해서 각 Server sync 작업을 하는 명령어
처음 실행시에는 git clone과 동일하고,
두번째 실행시에는 아래의 git 명령처럼 remote git repository가 update한 상태를 적용 

$ git remote update
$ git rebase origin/BRANCH

BRANCH 는 현재 checkout 된 local branch 이며 local branch가 remote branch를 tracking 하고 있지 않을 경우 sync 가 이루어지지 않는다.
repo sync 중 git rebase command 에서 conflict 가 발생할 경우 개별적으로 conflict 를 해결하고
git rebase --continue 명령을 실행해야 한다

옵션
-j 작업속도, 동시에 작업을 진행을 한다 (default 4)

  • repo start
소스는 branch와 tag를 만들게 되는데, 이때, 특정 branch 에서 시작할 수 있게 도와준다.

  • repo forall 
소스를 다운받기 위해서 사용한다고 하는데, 정확한 사용용도는 아직파악 못함.
         
repo forall -c git reset --hard 4412_vx.x
     
-c    command도 그 뒤는 argument이다,
       위 실행은 특정 tag를 다운받기 위해서 사용이 되어진다고 한다.

repo download 명령도 있어, 아직 정확한 이해를 못했다.

Android Opensource
  https://android.googlesource.com/platform/
  https://android.googlesource.com/?format=HTML

Repo 사용법
  https://source.android.com/source/using-repo.html
  http://www.dreamy.pe.kr/zbxe/CodeClip/163418

Android Download
  http://source.android.com/source/downloading.html

Android Repo 설정 및 사용법888
  https://source.android.com/setup/build/downloading
  https://source.android.com/setup/develop/index.html


2.2 Repo 사용법 및 구조 

Odroid기반으로 Android 관련소스를 받기 위해서 아래와 같이 설정을 해보며 분석해본다.

// Github 의 GIT 주소 설정한 후 branch 설정하면, 해당 default.xml 로 진행  
$ repo init -u https://github.com/hardkernel/android.git -b 4412_4.4.4_master

//상위에서 설정된 manifest.xml 기반으로 remote 와 project 기반으로 download  
$ repo sync

//일반적으로 repo sync까지 만 사용하며, 이는 별도의 branch 를 생성하기 위해서 실행  
$ repo start 4412_4.4.4_master --all

2.3 repo init 분석  

  • ODROID의 default.xml 과 비교하면서 분석 (repo init 설정) 
아래의 default.xml 분석
<?xml version="1.0" encoding="UTF-8"?>
<manifest>

//구글에서 제공하는 remote AOSP로 다양한 project들이 존재하며, GIT fetch 가능
  <remote  name="aosp"
           fetch="https://android.googlesource.com" />

//Hard Kernel에서 제공하는 remote로 들이 존재하며, Git fetch/push 가능
  <remote  name="origin"
           fetch="https://github.com/codewalkerster"
           push="https://github.com/codewalkerster" />

//CyanogenMod로 Android Community 다양한 Android Project 제공 fetch/review 제공
  <remote  name="github"
           fetch="https://github.com/CyanogenMod"
           review="review.cyanogenmod.org" />

/*
      - 기본 remote를 aosp로 설정 
      - 기본 project들의 revision을  refs/tags/android-4.4.2_r2 설정적용 
      - 아래의 project들은 이 기본 값으로 설정됨
*/
  <default revision="refs/tags/android-4.4.2_r2"
           remote="aosp"
           sync-j="4" />

/*
    상위 remote fetch 내부의  Git project (*.git) 모두 download 함 
    아래의 project name과 동일한 것들을 이제 실제 project path와 함께 적용 (project name은 반드시 unique) 
    revision을 설정으로 추가 tag or branch를 설정가능하며 기본은 상위 default 값에 정의  
    
    1. Google의 경우 Git의 Project Name을 보면 platform/xx/xx  이런식으로 관리를 하므로 쉽게 구분이 가능. 
    2. CyanogenMod 의 경우 Github 이다보니 Google 같은 구성이 되지 않으며,   (e.g android_bionic )
    3. Hardkernel 의 경우 Github 이다보니  동일하게구성  (e.g android_hardware_amlogic_wifi) 
*/

  <project path="build" name="android_build" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" >
    <copyfile src="core/root.mk" dest="Makefile" />
  </project>
  <project path="abi/cpp" name="platform/abi/cpp" groups="pdk" />
  <project path="art" name="platform/art" />
  <project path="bionic" name="android_bionic" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="bootable/bootloader/legacy" name="platform/bootable/bootloader/legacy" />
  <project path="bootable/diskinstaller" name="platform/bootable/diskinstaller" />
  <project path="bootable/recovery" name="platform/bootable/recovery" groups="pdk" />
  <project path="cts" name="platform/cts" groups="cts" />
  <project path="dalvik" name="platform/dalvik" />
  <project path="developers/build" name="platform/developers/build" />
  <project path="developers/demos" name="platform/developers/demos" />
  <project path="developers/docs" name="platform/developers/docs" />
  <project path="developers/samples/android" name="platform/developers/samples/android" />
  <project path="development" name="platform/development" />
  <project path="device/asus/deb" name="device/asus/deb" groups="device,flo" />
  <project path="device/asus/flo" name="device/asus/flo" groups="device,flo" />
  <project path="device/asus/flo-kernel" name="device/asus/flo-kernel" groups="device,flo" />
  <project path="device/asus/grouper" name="device/asus/grouper" groups="device,grouper" />
  <project path="device/asus/tilapia" name="device/asus/tilapia" groups="device,grouper" />
  <project path="device/common" name="device/common" />
  <project path="device/generic/armv7-a-neon" name="device/generic/armv7-a-neon" groups="pdk" />
  <project path="device/generic/common" name="device/generic/common" groups="pdk" />
  <project path="device/generic/goldfish" name="device/generic/goldfish" groups="pdk" />
  <project path="device/generic/mips" name="device/generic/mips" groups="pdk" />
  <project path="device/generic/mini-emulator-armv7-a-neon" name="device/generic/mini-emulator-armv7-a-neon" groups="pdk" />
  <project path="device/generic/mini-emulator-mips" name="device/generic/mini-emulator-mips" groups="pdk" />
  <project path="device/generic/mini-emulator-x86" name="device/generic/mini-emulator-x86" groups="pdk" />
  <project path="device/generic/x86" name="device/generic/x86" groups="pdk" />
  <project path="device/google/accessory/arduino" name="device/google/accessory/arduino" groups="device" />
  <project path="device/google/accessory/demokit" name="device/google/accessory/demokit" groups="device" />
  <project path="device/lge/hammerhead" name="device/lge/hammerhead" groups="device,hammerhead" />
  <project path="device/lge/hammerhead-kernel" name="device/lge/hammerhead-kernel" groups="device,hammerhead" />
  <project path="device/lge/mako" name="device/lge/mako" groups="device,mako" />
  <project path="device/lge/mako-kernel" name="device/lge/mako-kernel" groups="device,mako" />
  <project path="device/sample" name="device/sample" groups="pdk" />
  <project path="device/samsung/manta" name="device/samsung/manta" groups="device,manta" />
  <project path="device/hardkernel/odroidu" name="android_device_hardkernel_odroidu" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" />
  <project path="device/hardkernel/odroidx" name="android_device_hardkernel_odroidx" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" />
  <project path="device/hardkernel/odroidx2" name="android_device_hardkernel_odroidx2" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" />
  <project path="device/hardkernel/proprietary" name="android_device_hardkernel_proprietary" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" >
    <copyfile src="build_android.sh" dest="build_android.sh" />
  </project>
  <project path="docs/source.android.com" name="platform/docs/source.android.com" />
  <project path="external/aac" name="platform/external/aac" groups="pdk" />
  <project path="external/android-clat" name="platform/external/android-clat" />
  <project path="external/android-mock" name="platform/external/android-mock" />
  <project path="external/ant-glob" name="platform/external/ant-glob" />
  <project path="external/antlr" name="platform/external/antlr" />
  <project path="external/apache-harmony" name="platform/external/apache-harmony" />
  <project path="external/apache-http" name="platform/external/apache-http" />
  <project path="external/apache-qp" name="platform/external/apache-qp" />
  <project path="external/apache-xml" name="platform/external/apache-xml" />
  <project path="external/arduino" name="platform/external/arduino" />
  <project path="external/bison" name="platform/external/bison" groups="pdk" />
  <project path="external/blktrace" name="platform/external/blktrace" />
  <project path="external/bluetooth/bluedroid" name="platform/external/bluetooth/bluedroid" groups="pdk" />
  <project path="external/bouncycastle" name="platform/external/bouncycastle" />
  <project path="external/bsdiff" name="platform/external/bsdiff" groups="pdk" />
  <project path="external/bzip2" name="platform/external/bzip2" groups="pdk" />
  <project path="external/busybox" name="android_external_busybox" remote="github" revision="refs/heads/stable/cm-11.0" />
  <project path="external/ceres-solver" name="platform/external/ceres-solver" />
  <project path="external/checkpolicy" name="platform/external/checkpolicy" groups="pdk" />
  <project path="external/chromium" name="platform/external/chromium" />
  <project path="external/chromium-libpac" name="platform/external/chromium-libpac" />
  <project path="external/chromium-trace" name="platform/external/chromium-trace" groups="pdk" />
  <project path="external/chromium_org" name="platform/external/chromium_org" />
  <project path="external/chromium_org/sdch/open-vcdiff" name="platform/external/chromium_org/sdch/open-vcdiff" />
  <project path="external/chromium_org/testing/gtest" name="platform/external/chromium_org/testing/gtest" />
  <project path="external/chromium_org/third_party/WebKit" name="platform/external/chromium_org/third_party/WebKit" />
  <project path="external/chromium_org/third_party/angle_dx11" name="platform/external/chromium_org/third_party/angle_dx11" />
  <project path="external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" name="platform/external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" />
  <project path="external/chromium_org/third_party/freetype" name="platform/external/chromium_org/third_party/freetype" />
  <project path="external/chromium_org/third_party/icu" name="platform/external/chromium_org/third_party/icu" />
  <project path="external/chromium_org/third_party/leveldatabase/src" name="platform/external/chromium_org/third_party/leveldatabase/src" />
  <project path="external/chromium_org/third_party/libjingle/source/talk" name="platform/external/chromium_org/third_party/libjingle/source/talk" />
  <project path="external/chromium_org/third_party/libphonenumber/src/phonenumbers" name="platform/external/chromium_org/third_party/libphonenumber/src/phonenumbers" />
  <project path="external/chromium_org/third_party/libphonenumber/src/resources" name="platform/external/chromium_org/third_party/libphonenumber/src/resources" />
  <project path="external/chromium_org/third_party/mesa/src" name="platform/external/chromium_org/third_party/mesa/src" />
  <project path="external/chromium_org/third_party/openssl" name="platform/external/chromium_org/third_party/openssl" />
  <project path="external/chromium_org/third_party/opus/src" name="platform/external/chromium_org/third_party/opus/src" />
  <project path="external/chromium_org/third_party/ots" name="platform/external/chromium_org/third_party/ots" />
  <project path="external/chromium_org/third_party/skia/gyp" name="platform/external/chromium_org/third_party/skia/gyp" />
  <project path="external/chromium_org/third_party/skia/include" name="platform/external/chromium_org/third_party/skia/include" />
  <project path="external/chromium_org/third_party/skia/src" name="platform/external/chromium_org/third_party/skia/src" />
  <project path="external/chromium_org/third_party/smhasher/src" name="platform/external/chromium_org/third_party/smhasher/src" />
  <project path="external/chromium_org/third_party/yasm/source/patched-yasm" name="platform/external/chromium_org/third_party/yasm/source/patched-yasm" />
  <project path="external/chromium_org/tools/grit" name="platform/external/chromium_org/tools/grit" />
  <project path="external/chromium_org/tools/gyp" name="platform/external/chromium_org/tools/gyp" />
  <project path="external/chromium_org/v8" name="platform/external/chromium_org/v8" />
  <project path="external/clang" name="platform/external/clang" groups="pdk" />
  <project path="external/compiler-rt" name="platform/external/compiler-rt" groups="pdk" />
  <project path="external/dexmaker" name="platform/external/dexmaker" />
  <project path="external/dhcpcd" name="platform/external/dhcpcd" />
  <project path="external/dnsmasq" name="platform/external/dnsmasq" groups="pdk" />
  <project path="external/doclava" name="platform/external/doclava" />
  <project path="external/dropbear" name="platform/external/dropbear" />
  <project path="external/droiddriver" name="platform/external/droiddriver" />
  <project path="external/e2fsprogs" name="android_external_e2fsprogs" groups="pdk" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/easymock" name="platform/external/easymock" />
  <project path="external/eclipse-basebuilder" name="platform/external/eclipse-basebuilder" />
  <project path="external/eclipse-windowbuilder" name="platform/external/eclipse-windowbuilder" />
  <project path="external/eigen" name="platform/external/eigen" />
  <project path="external/elfutils" name="platform/external/elfutils" />
  <project path="external/embunit" name="platform/external/embunit" />
  <project path="external/emma" name="platform/external/emma" />
  <project path="external/esd" name="platform/external/esd" />
  <project path="external/exfat" name="android_external_exfat" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/expat" name="platform/external/expat" groups="pdk" />
  <project path="external/eyes-free" name="platform/external/eyes-free" />
  <project path="external/fdlibm" name="platform/external/fdlibm" />
  <project path="external/flac" name="platform/external/flac" groups="pdk" />
  <project path="external/freetype" name="platform/external/freetype" groups="pdk" />
  <project path="external/fsck_msdos" name="android_external_fsck_msdos" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/fuse" name="android_external_fuse" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/ganymed-ssh2" name="platform/external/ganymed-ssh2" />
  <project path="external/gcc-demangle" name="platform/external/gcc-demangle" groups="pdk" />
  <project path="external/genext2fs" name="platform/external/genext2fs" />
  <project path="external/giflib" name="platform/external/giflib" />
  <project path="external/google-diff-match-patch" name="platform/external/google-diff-match-patch" />
  <project path="external/grub" name="platform/external/grub" />
  <project path="external/gtest" name="platform/external/gtest" groups="pdk" />
  <project path="external/guava" name="platform/external/guava" />
  <project path="external/hamcrest" name="platform/external/hamcrest" />
  <project path="external/harfbuzz" name="platform/external/harfbuzz" />
  <project path="external/harfbuzz_ng" name="platform/external/harfbuzz_ng" />
  <project path="external/hyphenation" name="platform/external/hyphenation" />
  <project path="external/icu4c" name="platform/external/icu4c" groups="pdk" />
  <project path="external/iproute2" name="platform/external/iproute2" groups="pdk" />
  <project path="external/ipsec-tools" name="platform/external/ipsec-tools" />
  <project path="external/iptables" name="platform/external/iptables" />
  <project path="external/iputils" name="platform/external/iputils" />
  <project path="external/jack" name="platform/external/jack" />
  <project path="external/javasqlite" name="platform/external/javasqlite" />
  <project path="external/javassist" name="platform/external/javassist" />
  <project path="external/jdiff" name="platform/external/jdiff" />
  <project path="external/jhead" name="platform/external/jhead" groups="pdk" />
  <project path="external/jmdns" name="platform/external/jmdns" />
  <project path="external/jmonkeyengine" name="platform/external/jmonkeyengine" />
  <project path="external/jpeg" name="platform/external/jpeg" groups="pdk" />
  <project path="external/jsilver" name="platform/external/jsilver" />
  <project path="external/jsr305" name="platform/external/jsr305" />
  <project path="external/junit" name="platform/external/junit" />
  <project path="external/kernel-headers" name="platform/external/kernel-headers" />
  <project path="external/koush/Superuser" name="Superuser" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="external/koush/Widgets" name="Widgets" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/libcap-ng" name="platform/external/libcap-ng" />
  <project path="external/libffi" name="platform/external/libffi" />
  <project path="external/libgsm" name="platform/external/libgsm" groups="pdk" />
  <project path="external/liblzf" name="platform/external/liblzf" groups="pdk" />
  <project path="external/libmtp" name="platform/external/libmtp" />
  <project path="external/libncurses" name="android_external_libncurses" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/libnfc-nci" name="platform/external/libnfc-nci" groups="pdk" />
  <project path="external/libnfc-nxp" name="platform/external/libnfc-nxp" groups="pdk" />
  <project path="external/libnl-headers" name="platform/external/libnl-headers" groups="pdk" />
  <project path="external/libogg" name="platform/external/libogg" />
  <project path="external/libpcap" name="platform/external/libpcap" />
  <project path="external/libphonenumber" name="platform/external/libphonenumber" />
  <project path="external/libpng" name="platform/external/libpng" groups="pdk" />
  <project path="external/libppp" name="platform/external/libppp" />
  <project path="external/libselinux" name="platform/external/libselinux" groups="pdk" />
  <project path="external/libsepol" name="platform/external/libsepol" groups="pdk" />
  <project path="external/libusb" name="platform/external/libusb" />
  <project path="external/libusb-compat" name="platform/external/libusb-compat" />
  <project path="external/libvorbis" name="platform/external/libvorbis" />
  <project path="external/libvpx" name="platform/external/libvpx" groups="pdk" />
  <project path="external/libxml2" name="platform/external/libxml2" />
  <project path="external/libxslt" name="platform/external/libxslt" />
  <project path="external/libyuv" name="platform/external/libyuv" groups="libyuv" />
  <project path="external/linux-tools-perf" name="platform/external/linux-tools-perf" />
  <project path="external/littlemock" name="platform/external/littlemock" />
  <project path="external/llvm" name="platform/external/llvm" groups="pdk" />
  <project path="external/lzma" name="platform/external/lzma" />
  <project path="external/marisa-trie" name="platform/external/marisa-trie" />
  <project path="external/markdown" name="platform/external/markdown" />
  <project path="external/mdnsresponder" name="platform/external/mdnsresponder" groups="pdk" />
  <project path="external/mesa3d" name="platform/external/mesa3d" />
  <project path="external/mksh" name="platform/external/mksh" groups="pdk" />
  <project path="external/mockito" name="platform/external/mockito" />
  <project path="external/mockwebserver" name="platform/external/mockwebserver" />
  <project path="external/mp4parser" name="platform/external/mp4parser" />
  <project path="external/mtpd" name="platform/external/mtpd" />
  <project path="external/naver-fonts" name="platform/external/naver-fonts" />
  <project path="external/netcat" name="platform/external/netcat" />
  <project path="external/netperf" name="platform/external/netperf" />
  <project path="external/neven" name="platform/external/neven" />
  <project path="external/nist-pkits" name="platform/external/nist-pkits" />
  <project path="external/nist-sip" name="platform/external/nist-sip" />
  <project path="external/noto-fonts" name="platform/external/noto-fonts" />
  <project path="external/ntfs-3g" name="android_external_ntfs-3g" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/oauth" name="platform/external/oauth" />
  <project path="external/objenesis" name="platform/external/objenesis" />
  <project path="external/okhttp" name="platform/external/okhttp" />
  <project path="external/open-vcdiff" name="platform/external/open-vcdiff" />
  <project path="external/opencv" name="platform/external/opencv" />
  <project path="external/openfst" name="platform/external/openfst" />
  <project path="external/openssh" name="platform/external/openssh" />
  <project path="external/openssl" name="platform/external/openssl" groups="pdk" />
  <project path="external/oprofile" name="platform/external/oprofile" />
  <project path="external/pixman" name="platform/external/pixman" />
  <project path="external/ppp" name="platform/external/ppp" />
  <project path="external/proguard" name="platform/external/proguard" groups="pdk-java" />
  <project path="external/protobuf" name="platform/external/protobuf" groups="pdk" />
  <project path="external/qemu" name="platform/external/qemu" />
  <project path="external/qemu-pc-bios" name="platform/external/qemu-pc-bios" />
  <project path="external/regex-re2" name="platform/external/regex-re2" />
  <project path="external/replicaisland" name="platform/external/replicaisland" />
  <project path="external/robolectric" name="platform/external/robolectric" />
  <project path="external/safe-iop" name="platform/external/safe-iop" groups="pdk" />
  <project path="external/scrypt" name="platform/external/scrypt" groups="pdk" />
  <project path="external/sepolicy" name="platform/external/sepolicy" groups="pdk" />
  <project path="external/sfntly" name="platform/external/sfntly" />
  <project path="external/sil-fonts" name="platform/external/sil-fonts" />
  <project path="external/skia" name="platform/external/skia" />
  <project path="external/smack" name="platform/external/smack" />
  <project path="external/smali" name="platform/external/smali" />
  <project path="external/sonivox" name="platform/external/sonivox" groups="pdk" />
  <project path="external/speex" name="platform/external/speex" groups="pdk" />
  <project path="external/sqlite" name="platform/external/sqlite" groups="pdk" />
  <project path="external/srec" name="platform/external/srec" />
  <project path="external/srtp" name="platform/external/srtp" />
  <project path="external/stlport" name="platform/external/stlport" groups="pdk" />
  <project path="external/strace" name="platform/external/strace" />
  <project path="external/stressapptest" name="platform/external/stressapptest" />
  <project path="external/svox" name="platform/external/svox" />
  <project path="external/tagsoup" name="platform/external/tagsoup" />
  <project path="external/tcpdump" name="platform/external/tcpdump" />
  <project path="external/timezonepicker-support" name="platform/external/timezonepicker-support" />
  <project path="external/tinyalsa" name="platform/external/tinyalsa" groups="pdk" />
  <project path="external/tinycompress" name="platform/external/tinycompress" groups="pdk" />
  <project path="external/tinyxml" name="platform/external/tinyxml" groups="pdk" />
  <project path="external/tinyxml2" name="platform/external/tinyxml2" groups="pdk" />
  <project path="external/tremolo" name="platform/external/tremolo" groups="pdk" />
  <project path="external/v8" name="platform/external/v8" />
  <project path="external/valgrind" name="platform/external/valgrind" groups="pdk" />
  <project path="external/vim" name="android_external_vim" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/webp" name="platform/external/webp" />
  <project path="external/webrtc" name="platform/external/webrtc" groups="pdk" />
  <project path="external/wpa_supplicant_8" name="android_external_wpa_supplicant_8" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="external/xmlwriter" name="platform/external/xmlwriter" />
  <project path="external/xmp_toolkit" name="platform/external/xmp_toolkit" />
  <project path="external/yaffs2" name="platform/external/yaffs2" groups="pdk" />
  <project path="external/zlib" name="platform/external/zlib" groups="pdk" />
  <project path="external/zxing" name="platform/external/zxing" />
  <project path="frameworks/av" name="android_frameworks_av" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="frameworks/base" name="android_frameworks_base" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="frameworks/compile/libbcc" name="platform/frameworks/compile/libbcc" groups="pdk" />
  <project path="frameworks/compile/mclinker" name="platform/frameworks/compile/mclinker" groups="pdk" />
  <project path="frameworks/compile/slang" name="platform/frameworks/compile/slang" groups="pdk" />
  <project path="frameworks/ex" name="platform/frameworks/ex" />
  <project path="frameworks/mff" name="platform/frameworks/mff" />
  <project path="frameworks/ml" name="platform/frameworks/ml" />
  <project path="frameworks/native" name="android_frameworks_native" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="frameworks/opt/calendar" name="platform/frameworks/opt/calendar" />
  <project path="frameworks/opt/carddav" name="platform/frameworks/opt/carddav" />
  <project path="frameworks/opt/colorpicker" name="platform/frameworks/opt/colorpicker" />
  <project path="frameworks/opt/datetimepicker" name="platform/frameworks/opt/datetimepicker" />
  <project path="frameworks/opt/emoji" name="platform/frameworks/opt/emoji" />
  <project path="frameworks/opt/inputmethodcommon" name="platform/frameworks/opt/inputmethodcommon" />
  <project path="frameworks/opt/mailcommon" name="platform/frameworks/opt/mailcommon" />
  <project path="frameworks/opt/mms" name="platform/frameworks/opt/mms" />
  <project path="frameworks/opt/net/voip" name="platform/frameworks/opt/net/voip" />
  <project path="frameworks/opt/photoviewer" name="platform/frameworks/opt/photoviewer" />
  <project path="frameworks/opt/timezonepicker" name="platform/frameworks/opt/timezonepicker" />
  <project path="frameworks/opt/telephony" name="platform/frameworks/opt/telephony" groups="pdk" />
  <project path="frameworks/opt/vcard" name="platform/frameworks/opt/vcard" />
  <project path="frameworks/rs" name="platform/frameworks/rs" groups="pdk" />
  <project path="frameworks/support" name="platform/frameworks/support" />
  <project path="frameworks/testing" name="platform/frameworks/testing" />
  <project path="frameworks/uiautomator" name="platform/frameworks/uiautomator" />
  <project path="frameworks/volley" name="platform/frameworks/volley" />
  <project path="frameworks/webview" name="platform/frameworks/webview" />
  <project path="frameworks/wilhelm" name="platform/frameworks/wilhelm" />
  <project path="hardware/akm" name="platform/hardware/akm" />
  <project path="hardware/broadcom/libbt" name="platform/hardware/broadcom/libbt" groups="pdk" />
  <project path="hardware/broadcom/wlan" name="platform/hardware/broadcom/wlan" groups="broadcom_wlan" />
  <project path="hardware/hardkernel" name="android_hardware_hardkernel" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="hardware/invensense" name="platform/hardware/invensense" groups="invensense" />
  <project path="hardware/libhardware" name="android_hardware_libhardware" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="hardware/libhardware_legacy" name="android_hardware_libhardware_legacy" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="hardware/qcom/audio" name="platform/hardware/qcom/audio" groups="qcom" />
  <project path="hardware/qcom/bt" name="platform/hardware/qcom/bt" groups="qcom" />
  <project path="hardware/qcom/camera" name="platform/hardware/qcom/camera" groups="qcom" />
  <project path="hardware/qcom/display" name="platform/hardware/qcom/display" groups="qcom" />
  <project path="hardware/qcom/keymaster" name="platform/hardware/qcom/keymaster" groups="qcom" />
  <project path="hardware/qcom/media" name="platform/hardware/qcom/media" groups="qcom" />
  <project path="hardware/qcom/msm8960" name="platform/hardware/qcom/msm8960" groups="qcom_msm8960" />
  <project path="hardware/qcom/msm8x74" name="platform/hardware/qcom/msm8x74" groups="qcom_msm8x74" />
  <project path="hardware/qcom/power" name="platform/hardware/qcom/power" groups="qcom" />
  <project path="hardware/qcom/sensors" name="platform/hardware/qcom/sensors" groups="qcom" />
  <project path="hardware/qcom/wlan" name="platform/hardware/qcom/wlan" groups="qcom_wlan" />
  <project path="hardware/realtek" name="android_hardware_realtek" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="hardware/ril" name="platform/hardware/ril" groups="pdk" />
  <project path="hardware/samsung_slsi/exynos4" name="android_hardware_samsung_slsi_exynos4" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="hardware/samsung_slsi/exynos5" name="platform/hardware/samsung_slsi/exynos5" groups="exynos5" />
  <project path="hardware/ti/omap3" name="platform/hardware/ti/omap3" />
  <project path="hardware/ti/omap4xxx" name="platform/hardware/ti/omap4xxx" groups="omap4" />
  <project path="hardware/ti/wlan" name="platform/hardware/ti/wlan" />
  <project path="hardware/ti/wpan" name="platform/hardware/ti/wpan" />
  <project path="libcore" name="platform/libcore" />
  <project path="libnativehelper" name="platform/libnativehelper" groups="pdk-java" />
  <project path="ndk" name="platform/ndk" />
  <project path="packages/apps/BasicSmsReceiver" name="platform/packages/apps/BasicSmsReceiver" />
  <project path="packages/apps/Bluetooth" name="platform/packages/apps/Bluetooth" />
  <project path="packages/apps/Browser" name="platform/packages/apps/Browser" />
  <project path="packages/apps/Calculator" name="platform/packages/apps/Calculator" />
  <project path="packages/apps/Calendar" name="platform/packages/apps/Calendar" />
  <project path="packages/apps/Camera" name="platform/packages/apps/Camera" />
  <project path="packages/apps/Camera2" name="platform/packages/apps/Camera2" />
  <project path="packages/apps/CellBroadcastReceiver" name="platform/packages/apps/CellBroadcastReceiver" />
  <project path="packages/apps/CertInstaller" name="platform/packages/apps/CertInstaller" />
  <project path="packages/apps/Contacts" name="platform/packages/apps/Contacts" />
  <project path="packages/apps/ContactsCommon" name="platform/packages/apps/ContactsCommon" />
  <project path="packages/apps/DeskClock" name="platform/packages/apps/DeskClock" />
  <project path="packages/apps/Dialer" name="platform/packages/apps/Dialer" />
  <project path="packages/apps/Email" name="platform/packages/apps/Email" />
  <project path="packages/apps/Exchange" name="platform/packages/apps/Exchange" />
  <project path="packages/apps/Gallery" name="platform/packages/apps/Gallery" />
  <project path="packages/apps/Gallery2" name="platform/packages/apps/Gallery2" />
  <project path="packages/apps/HTMLViewer" name="platform/packages/apps/HTMLViewer" />
  <project path="packages/apps/InCallUI" name="platform/packages/apps/InCallUI" />
  <project path="packages/apps/KeyChain" name="platform/packages/apps/KeyChain" />
  <project path="packages/apps/Launcher2" name="platform/packages/apps/Launcher2" />
  <project path="packages/apps/Launcher3" name="platform/packages/apps/Launcher3" />
  <project path="packages/apps/LegacyCamera" name="platform/packages/apps/LegacyCamera" />
  <project path="packages/apps/Mms" name="platform/packages/apps/Mms" />
  <project path="packages/apps/Music" name="platform/packages/apps/Music" />
  <project path="packages/apps/MusicFX" name="platform/packages/apps/MusicFX" />
  <project path="packages/apps/Nfc" name="platform/packages/apps/Nfc" />
  <project path="packages/apps/OdroidUpdater" name="android_packages_apps_OdroidUpdater" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/OneTimeInitializer" name="platform/packages/apps/OneTimeInitializer" />
  <project path="packages/apps/PackageInstaller" name="platform/packages/apps/PackageInstaller" />
  <project path="packages/apps/Phone" name="platform/packages/apps/Phone" />
  <project path="packages/apps/PhoneCommon" name="platform/packages/apps/PhoneCommon" />
  <project path="packages/apps/Protips" name="platform/packages/apps/Protips" />
  <project path="packages/apps/Provision" name="platform/packages/apps/Provision" />
  <project path="packages/apps/QuickSearchBox" name="platform/packages/apps/QuickSearchBox" />
  <project path="packages/apps/Settings" name="android_packages_apps_Settings" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/SmartCardService" name="platform/packages/apps/SmartCardService" />
  <project path="packages/apps/SoundRecorder" name="android_packages_apps_SoundRecorder" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/SpareParts" name="platform/packages/apps/SpareParts" />
  <project path="packages/apps/SpeechRecorder" name="platform/packages/apps/SpeechRecorder" />
  <project path="packages/apps/Stk" name="platform/packages/apps/Stk" />
  <project path="packages/apps/Tag" name="platform/packages/apps/Tag" />
  <project path="packages/apps/UnifiedEmail" name="platform/packages/apps/UnifiedEmail" />
  <project path="packages/apps/Utility" name="android_packages_apps_Utility" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/VideoEditor" name="platform/packages/apps/VideoEditor" />
  <project path="packages/apps/VoiceDialer" name="platform/packages/apps/VoiceDialer" />
  <project path="packages/experimental" name="platform/packages/experimental" />
  <project path="packages/inputmethods/LatinIME" name="platform/packages/inputmethods/LatinIME" />
  <project path="packages/inputmethods/OpenWnn" name="platform/packages/inputmethods/OpenWnn" />
  <project path="packages/inputmethods/PinyinIME" name="platform/packages/inputmethods/PinyinIME" />
  <project path="packages/providers/ApplicationsProvider" name="platform/packages/providers/ApplicationsProvider" />
  <project path="packages/providers/CalendarProvider" name="platform/packages/providers/CalendarProvider" />
  <project path="packages/providers/ContactsProvider" name="platform/packages/providers/ContactsProvider" />
  <project path="packages/providers/DownloadProvider" name="platform/packages/providers/DownloadProvider" />
  <project path="packages/providers/MediaProvider" name="platform/packages/providers/MediaProvider" />
  <project path="packages/providers/PartnerBookmarksProvider" name="platform/packages/providers/PartnerBookmarksProvider" />
  <project path="packages/providers/TelephonyProvider" name="platform/packages/providers/TelephonyProvider" />
  <project path="packages/providers/UserDictionaryProvider" name="platform/packages/providers/UserDictionaryProvider" />
  <project path="packages/screensavers/Basic" name="platform/packages/screensavers/Basic" />
  <project path="packages/screensavers/PhotoTable" name="platform/packages/screensavers/PhotoTable" />
  <project path="packages/screensavers/WebView" name="platform/packages/screensavers/WebView" />
  <project path="packages/services/Telephony" name="platform/packages/services/Telephony" />
  <project path="packages/wallpapers/Basic" name="platform/packages/wallpapers/Basic" />
  <project path="packages/wallpapers/Galaxy4" name="platform/packages/wallpapers/Galaxy4" />
  <project path="packages/wallpapers/HoloSpiral" name="platform/packages/wallpapers/HoloSpiral" />
  <project path="packages/wallpapers/LivePicker" name="platform/packages/wallpapers/LivePicker" />
  <project path="packages/wallpapers/MagicSmoke" name="platform/packages/wallpapers/MagicSmoke" />
  <project path="packages/wallpapers/MusicVisualization" name="platform/packages/wallpapers/MusicVisualization" />
  <project path="packages/wallpapers/NoiseField" name="platform/packages/wallpapers/NoiseField" />
  <project path="packages/wallpapers/PhaseBeam" name="platform/packages/wallpapers/PhaseBeam" />
  <project path="pdk" name="platform/pdk" groups="pdk" />
  <project path="prebuilts/clang/darwin-x86/3.1" name="platform/prebuilts/clang/darwin-x86/3.1" groups="pdk,darwin" />
  <project path="prebuilts/clang/darwin-x86/3.2" name="platform/prebuilts/clang/darwin-x86/3.2" groups="pdk,darwin" />
  <project path="prebuilts/clang/darwin-x86/arm/3.3" name="platform/prebuilts/clang/darwin-x86/arm/3.3" groups="darwin,arm" />
  <project path="prebuilts/clang/darwin-x86/host/3.3" name="platform/prebuilts/clang/darwin-x86/host/3.3" groups="darwin" />
  <project path="prebuilts/clang/darwin-x86/mips/3.3" name="platform/prebuilts/clang/darwin-x86/mips/3.3" groups="darwin,mips" />
  <project path="prebuilts/clang/darwin-x86/x86/3.3" name="platform/prebuilts/clang/darwin-x86/x86/3.3" groups="darwin,x86" />
  <project path="prebuilts/clang/linux-x86/3.1" name="platform/prebuilts/clang/linux-x86/3.1" groups="pdk,linux" />
  <project path="prebuilts/clang/linux-x86/3.2" name="platform/prebuilts/clang/linux-x86/3.2" groups="pdk,linux" />
  <project path="prebuilts/clang/linux-x86/arm/3.3" name="platform/prebuilts/clang/linux-x86/arm/3.3" groups="linux,arm" />
  <project path="prebuilts/clang/linux-x86/host/3.3" name="platform/prebuilts/clang/linux-x86/host/3.3" groups="linux" />
  <project path="prebuilts/clang/linux-x86/mips/3.3" name="platform/prebuilts/clang/linux-x86/mips/3.3" groups="linux,mips" />
  <project path="prebuilts/clang/linux-x86/x86/3.3" name="platform/prebuilts/clang/linux-x86/x86/3.3" groups="linux,x86" />
  <project path="prebuilts/devtools" name="platform/prebuilts/devtools" />
  <project path="prebuilts/eclipse" name="platform/prebuilts/eclipse" groups="pdk" />
  <project path="prebuilts/eclipse-build-deps" name="platform/prebuilts/eclipse-build-deps" groups="notdefault,eclipse" />
  <project path="prebuilts/eclipse-build-deps-sources" name="platform/prebuilts/eclipse-build-deps-sources" groups="notdefault,eclipse" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-eabi-4.7" name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.7" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.7" name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.7" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/host/headers" name="platform/prebuilts/gcc/darwin-x86/host/headers" groups="pdk,darwin" />
  <project path="prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1" name="platform/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1" groups="pdk,darwin" />
  <project path="prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" groups="pdk,darwin,mips" />
  <project path="prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.7" name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.7" groups="pdk,darwin,mips" />
  <project path="prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" groups="pdk,darwin,x86" />
  <project path="prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.7" name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.7" groups="pdk,darwin,x86" />
  <project path="prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.7" name="platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.7" groups="pdk,darwin,x86" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.6" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.4.3" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.4.3" groups="pdk,linux" />
  <project path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" groups="pdk,linux" />
  <project path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" groups="pdk,linux" />
  <project path="prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.6" name="platform/prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.6" groups="pdk,linux,mips" />
  <project path="prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.7" name="platform/prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.7" groups="pdk,linux,mips" />
  <project path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6" groups="pdk,linux,x86" />
  <project path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" groups="pdk,linux,x86" />
  <project path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.7" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.7" groups="pdk,linux,x86" />
  <project path="prebuilts/misc" name="platform/prebuilts/misc" groups="pdk" />
  <project path="prebuilts/ndk" name="platform/prebuilts/ndk" groups="pdk" />
  <project path="prebuilts/python/darwin-x86/2.7.5" name="platform/prebuilts/python/darwin-x86/2.7.5" groups="darwin" />
  <project path="prebuilts/python/linux-x86/2.7.5" name="platform/prebuilts/python/linux-x86/2.7.5" groups="linux" />
  <project path="prebuilts/qemu-kernel" name="platform/prebuilts/qemu-kernel" groups="pdk" />
  <project path="prebuilts/runtime" name="platform/prebuilts/runtime" />
  <project path="prebuilts/sdk" name="platform/prebuilts/sdk" groups="pdk" />
  <project path="prebuilts/tools" name="platform/prebuilts/tools" groups="pdk,tools" />
  <project path="sdk" name="platform/sdk" />
  <project path="system/core" name="android_system_core" remote= "origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="system/extras" name="android_system_extras" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="system/media" name="platform/system/media" groups="pdk" />
  <project path="system/netd" name="platform/system/netd" groups="pdk" />
  <project path="system/security" name="platform/system/security" groups="pdk" />
  <project path="system/vold" name="android_system_vold" groups="pdk" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="tools/adt/eclipse" name="platform/tools/adt/eclipse" groups="notdefault,tools" />
  <project path="tools/adt/idea" name="platform/tools/adt/idea" groups="notdefault,tools" />
  <project path="tools/base" name="platform/tools/base" groups="notdefault,tools" />
  <project path="tools/build" name="platform/tools/build" groups="notdefault,tools" />
  <project path="tools/emulator" name="platform/tools/emulator" groups="notdefault,tools" />
  <project path="tools/external/fat32lib" name="platform/tools/external/fat32lib" groups="tools" />
  <project path="tools/external/gradle" name="platform/tools/external/gradle" groups="tools" />
  <project path="tools/idea" name="platform/tools/idea" groups="notdefault,tools" />
  <project path="tools/motodev" name="platform/tools/motodev" groups="notdefault,motodev" />
  <project path="tools/studio/cloud" name="platform/tools/studio/cloud" groups="notdefault,tools" />
  <project path="tools/swt" name="platform/tools/swt" groups="notdefault,tools" />
  <project path="vendor/ralink" name="android_vendor_ralink" remote="origin" revision="refs/heads/odroid_4412_master" />
</manifest>

관련소스 

  • repo init 설정 및 확인  
repo init -u  했을 경우, .repo 디렉토리 및 manifest.xml 생성된다. 
그리고, 정보 입력을 요구하는데 Name, E-Mail, Path  확인하자,
아래와 같이, branch 및 tag 정보 확인이 가능하다.

Get https://github.com/hardkernel/android.git  // default.xml로 동작 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
curl: (22) The requested URL returned error: 404
Server does not provide clone.bundle; ignoring.
remote: Counting objects: 1097, done.
remote: Compressing objects: 100% (456/456), done.
remote: Total 1097 (delta 446), reused 1097 (delta 446)
Receiving objects: 100% (1097/1097), 434.98 KiB | 181 KiB/s, done.
Resolving deltas: 100% (446/446), done.
From https://github.com/hardkernel/android
 * [new branch]      4412_4.1.2_master -> origin/4412_4.1.2_master
 * [new branch]      4412_4.4.3_master -> origin/4412_4.4.3_master
 * [new branch]      4412_4.4.4_master -> origin/4412_4.4.4_master
 * [new branch]      4412_L_master -> origin/4412_L_master
 * [new branch]      5410_4.2.2_master -> origin/5410_4.2.2_master
 * [new branch]      odroid_4412_master -> origin/odroid_4412_master
 * [new branch]      odroid_5410_master -> origin/odroid_5410_master 
...........

repo init을 한후 .repo를 보면 다음과 같이 구성 

$ tree .repo
.repo
├── manifest.xml -> manifests/default.xml
├── manifests
│   ├── default.xml
│   └── .git  // 아래의 manifests.git link로 구성
├── manifests.git        // 상위 default.xml GIT download 했기 때문에 Git 정보
│   ├── FETCH_HEAD
│   ├── HEAD
│   ├── branches
│   ├── config
│   ├── description
│   ├── hooks
│   │   ├── applypatch-msg.sample
│   │   ├── commit-msg -> ../../repo/hooks/commit-msg
│   │   ├── commit-msg.sample
│   │   ├── post-update.sample
│   │   ├── pre-applypatch.sample
│   │   ├── pre-auto-gc -> ../../repo/hooks/pre-auto-gc
│   │   ├── pre-commit.sample
│   │   ├── pre-rebase.sample
│   │   ├── prepare-commit-msg.sample
│   │   └── update.sample
│   ├── info
│   │   └── exclude
│   ├── logs
│   │   └── refs
│   │       └── remotes
│   │           └── origin
│   │               ├── 4412_4.1.2_master
│   │               ├── 4412_4.4.3_master
│   │               ├── 4412_4.4.4_master
│   │               ├── 4412_L_master
│   │               ├── 5410_4.2.2_master
│   │               ├── 5422_4.2.2_master
│   │               ├── 5422_4.4.2_master
│   │               ├── 5422_4.4.4_master
│   │               ├── odroid_4412_master
│   │               ├── odroid_5410_master
│   │               ├── s805_4.4.2_master
│   │               └── s905_5.1.1_master
│   ├── objects
│   │   ├── info
│   │   └── pack
│   │       ├── pack-156a343f25e111fb8e411eb1d779fe669997e79d.idx
│   │       └── pack-156a343f25e111fb8e411eb1d779fe669997e79d.pack
│   ├── packed-refs
│   ├── refs
│   │   ├── heads
│   │   │   └── default
│   │   ├── remotes
│   │   └── tags
│   ├── rr-cache
│   └── svn
└── repo           // repo 관련된 phython program 
    ├── COPYING
    ├── SUBMITTING_PATCHES
    ├── color.py
    ├── color.pyc
    ├── command.py
    ├── command.pyc
    ├── docs
    │   └── manifest-format.txt  // manifest-format.xml 문법설명 및 사용법 
    ├── editor.py
    ├── editor.pyc
    ├── error.py
    ├── error.pyc
    ├── git_command.py
    ├── git_command.pyc
    ├── git_config.py
    ├── git_config.pyc
    ├── git_refs.py
    ├── git_refs.pyc
    ├── git_ssh
    ├── gitc_utils.py
    ├── gitc_utils.pyc
    ├── hooks
    │   ├── commit-msg
    │   └── pre-auto-gc
    ├── main.py
    ├── manifest_xml.py
    ├── manifest_xml.pyc
    ├── pager.py
    ├── pager.pyc
    ├── progress.py
    ├── progress.pyc
    ├── project.py
    ├── project.pyc
    ├── pyversion.py
    ├── pyversion.pyc
    ├── repo
    ├── repoc
    ├── subcmds
    │   ├── __init__.py
    │   ├── __init__.pyc
    │   ├── abandon.py
    │   ├── abandon.pyc
    │   ├── branches.py
    │   ├── branches.pyc
    │   ├── checkout.py
    │   ├── checkout.pyc
    │   ├── cherry_pick.py
    │   ├── cherry_pick.pyc
    │   ├── diff.py
    │   ├── diff.pyc
    │   ├── diffmanifests.py
    │   ├── diffmanifests.pyc
    │   ├── download.py
    │   ├── download.pyc
    │   ├── forall.py
    │   ├── forall.pyc
    │   ├── gitc_delete.py
    │   ├── gitc_delete.pyc
    │   ├── gitc_init.py
    │   ├── gitc_init.pyc
    │   ├── grep.py
    │   ├── grep.pyc
    │   ├── help.py
    │   ├── help.pyc
    │   ├── info.py
    │   ├── info.pyc
    │   ├── init.py
    │   ├── init.pyc
    │   ├── list.py
    │   ├── list.pyc
    │   ├── manifest.py
    │   ├── manifest.pyc
    │   ├── overview.py
    │   ├── overview.pyc
    │   ├── prune.py
    │   ├── prune.pyc
    │   ├── rebase.py
    │   ├── rebase.pyc
    │   ├── selfupdate.py
    │   ├── selfupdate.pyc
    │   ├── smartsync.py
    │   ├── smartsync.pyc
    │   ├── stage.py
    │   ├── stage.pyc
    │   ├── start.py
    │   ├── start.pyc
    │   ├── status.py
    │   ├── status.pyc
    │   ├── sync.py
    │   ├── sync.pyc
    │   ├── upload.py
    │   ├── upload.pyc
    │   ├── version.py
    │   └── version.pyc
    ├── tests
    │   ├── fixtures
    │   │   ├── gitc_config
    │   │   └── test.gitconfig
    │   ├── test_git_config.py
    │   └── test_wrapper.py
    ├── trace.py
    ├── trace.pyc
    ├── wrapper.py
    └── wrapper.pyc

2.4 repo sync 분석  

  • repo sync 동작 후 구조파악     
project-object 와 project 그리고, project.list 기반으로 분석
  1. project-object : source를 미제공하며 *.so 로 제공 및 module로 제공 
  2. project: 소스형태로 제공  

상위 default.xml의 project에 존재하지 않는 것을 가지고 있는 것으로 보아 remote를 전체를 download 한 것으로 보인다. 
아래 상위 default.xml의 project name에 없는 것들은 주로 CyanogenMod 와 Hardkernel 검색가능

$ tree -t -L 2 --charset unicode .repo/  
.repo/
|-- repo // repo 관련된 phython program 이므로 sub는 삭제 
|
|-- manifests
|   `-- default.xml         
|-- manifest.xml    // -> manifests/default.xml (repo init -u 의 정보)  
|-- manifests.git   // 상위 default.xml 저장된 곳의 GIT 정보 
|   |-- branches
|   |-- description
|   |-- HEAD
|   |-- hooks
|   |-- info
|   |-- objects
|   |-- logs
|   |-- refs
|   |-- config
|   |-- packed-refs
|   |-- rr-cache
|   |-- svn
|   `-- FETCH_HEAD
|-- project-objects     // project의 name 기반으로 GIT 구성 (아래 다시세부분석)  
|   |-- android_hardware_libhardware.git
|   |-- android_hardware_backports.git   //project name 없음, HardKernel 존재 
|   |-- android_system_extras.git
|   |-- android_frameworks_native.git
|   |-- android_device_hardkernel_odroidu.git
|   |-- android_frameworks_av.git
|   |-- android_device_hardkernel_odroidx.git
|   |-- android_external_ntfs-3g.git
|   |-- android_packages_apps_SoundRecorder.git
|   |-- android_device_hardkernel_proprietary.git
|   |-- android_build.git
|   |-- android_hardware_hardkernel.git
|   |-- android_external_ppp.git     //project name 없음, CyanogenMod 존재 
|   |-- android_hardware_ril.git     //project name 없음, CyanogenMod 존재 
|   |-- android_hardware_wifi_realtek_drivers_8192cu.git  //project name 없음, HardKernel 존재 
|   |-- android_system_core.git
|   |-- android_external_wpa_supplicant_8.git
|   |-- android_hardware_libhardware_legacy.git
|   |-- android_external_exfat.git
|   |-- android_external_libusb.git  //project name 없음, CyanogenMod 존재
|   |-- android_device_rockchip.git  //project name 없음, HardKernel 존재
|   |-- android_external_vim.git
|   |-- android_frameworks_base.git
|   |-- android_packages_apps_OdroidUpdater.git
|   |-- android_bionic.git
|   |-- android_external_busybox.git
|   |-- device               // Git directory 
|   |-- Superuser.git
|   |-- android_external_fsck_msdos.git
|   |-- android_external_fuse.git
|   |-- android_hardware_amlogic_wifi.git   //project name 없음, CyanogenMod 존재 
|   |-- android_external_bluetooth_bluedroid.git //project name 없음, HardKernel 존재
|   |-- Widgets.git
|   |-- android_device_hardkernel_odroidx2.git
|   |-- android_hardware_broadcom_libbt.git  //project name 없음, HardKernel 존재
|   |-- android_external_libncurses.git
|   |-- android_packages_apps_Bluetooth.git  //project name 없음, HardKernel 존재
|   |-- android_packages_apps_Settings.git
|   |-- android_vendor_ralink.git
|   |-- android_frameworks_opt_vcard.git   //project name 없음, HardKernel 존재
|   |-- android_packages_apps_Utility.git
|   |-- linux.git                   //project name 없음, HardKernel 존재 
|   |-- android_dalvik.git          //project name 없음, HardKernel 존재 
|   |-- android_hardware_samsung_slsi_exynos4.git
|   |-- android_external_e2fsprogs.git
|   |-- android_system_vold.git
|   `-- platform                    // Git directory 
|-- projects   // project의 source 형태 
|   |-- tools
|   |-- docs
|   |-- device
|   |-- abi
|   |-- packages
|   |-- bootable
|   |-- vendor
|   |-- hardware
|   |-- developers
|   |-- frameworks
|   |-- prebuilts
|   |-- system
|   |-- external
|   |-- art.git
|   |-- bionic.git
|   |-- build.git
|   |-- cts.git
|   |-- dalvik.git
|   |-- development.git
|   |-- kernel.git
|   |-- libcore.git
|   |-- libnativehelper.git
|   |-- ndk.git
|   |-- pdk.git
|   `-- sdk.git
`-- project.list  // project의 name 의 list 확인가능   


7/30/2014

ODROID X2 관련 소스 정보 및 링크자료


  • ODROID 에 관련된 ANDROID SOURCE SITE들
  http://source.android.com/    (기본 AOSP)
  http://www.cyanogenmod.org/about      (설명)
  http://download.cyanogenmod.org/       (Download)
              

OEMPlatformRepositories/Resources
GooglevariousGoogle's Git Repository Nexus binary blobs
HTCvariousDev Center
LGvariousLG Open Source Code Distribution
MotorolavariousMotorola Open Source Center
NvidiaTegraTegra's GitWeb
QualcommMSM/QSDCode Aurora Forum
SamsungvariousSamsung Open Source Release Center
Texas InstrumentsOMAPwww.omapzoom.com , Omappedia

  • Download Source (Android, Kernel, Uboot)
  https://github.com/hardkernel
  https://github.com/codewalkerster
  https://github.com/CyanogenMod


Porting Guide
  http://wiki.cyanogenmod.org/w/Doc:_porting_intro                         ( porting info)
  http://wiki.cyanogenmod.org/w/Doc:_integrated_kernel_building      ( kernel building )

Porting Discuss
  https://groups.google.com/forum/?fromgroups#!forum/android-porting
  http://forum.cyanogenmod.org/topic/15492-general-cyanogenmod-porting-discussion/


ODROID Porting GUIDE
  http://badawave.tistory.com/entry/Android-422-in-ODROID-X2
  http://badawave.tistory.com/entry/OdroidX2-CyanogenMod-10-CM101-%EB%B9%8C%EB%93%9C


  • ODROID 기본 설정 및 빌드방법

Uboot Info (ODROID)
  http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidxu&bid=3838
  http://badawave.tistory.com/entry/ODROID-X2-U2-UBoot-%EB%B9%8C%EB%93%9C%ED%95%98%EA%B8%B0


ODROID 매거진
  http://magazine.odroid.com/


ODROID-U2 Build GUIDE
  http://www.funtoo.org/ODROID_U2
  https://docs.google.com/file/d/1j_7Y6GaqocWX-PXVjThiz38hswpgrsOiUNmFrJx2desFbSlzi9vlWxHz_Gge/edit?hl=en

  http://www.netmite.com/android/mydroid/development/pdk/docs/index.html

ODROID-X2 포럼
  https://forum.odroid.com/viewforum.php?f=129&sid=9eb986d60eef568ddc466f89ffa58651

ODROID-X2 포럼 변경된 주소
  https://com.odroid.com/sigong/nf_board/nboard.php?brd_id=odroid-x2

KITKAT 이슈
  https://medium.com/marojuns-android/1ecb94c24694

ODROID-X2 Download
  http://appmarkers.tistory.com/category/Embedded/ODROID-X2
  http://appmarkers.tistory.com/entry/%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-ODROIDX2-%EC%86%8C%EC%8A%A4-%EC%BB%B4%ED%8C%8C%EC%9D%BC
  https://com.odroid.com/sigong/nf_file_board/nfile_board.php?keyword=&tag=ODROID-X2&page=1
  https://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?keyword=&tag=&bid=228

7/23/2014

WIFI Tool(WE/WEXT)을 이용한 환경설정

1. WIFI TEST(WE/WEXT) Tool 설명  

Linux에서 WIFI를 Control 하기위해서 사용되는 Tool은 사용되는 iwconfig,iwlist, iwpriv등 존재한다. 
이는 Wireless-Extension (WE or WEXT)를 위한 wpa_supplicant test tool 일 뿐아니라, WIFI Device의 관련정보들을 가지고 있다. 
WE or Wext의 기본 interface는 ioctl이기에 이 test tool도 동일하게 구성이 되어있으며,

향후 cfg80211/nl80211 interface를 사용할 경우 다른 tool를 사용해야 한다고 한다.

WE/WEXT 주요기능설명
  1. iwconfig  : wlan를 설정하는 tool로 client 접속과 설정을 담당한다.
  2. iwlist       : ap 검색 및 등
  3. iwpriv      : Driver 환경값 설정.
dhcp 관련 Tool
    dhclient/dhcpcd :  dhcp client tool  

Ref.
  http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html
  http://wireless.kernel.org/en/developers/Documentation/Wireless-Extensions
  http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Linux.Wireless.pdf
         
  • Download Wireless-tools For wext
Android에서 사용할수 있는 Wireless tool source, 이며, 사용법은, externel 안에 넣고 compile하면된다.

Download site
  https://github.com/nvamelichev/wireless-tools-android
  https://github.com/CyanogenMod/android_external_wireless-tools

  • 설치 및 Build Wiress-Tool 
 위 사이트에서 Download 한 후, externel에 압축풀기 
# cd android          // Android Main 위치변경.

WIFI TOOL 만 빌드 (부분 빌드, 위치 Android Main ) 
# source build/envsetup.sh 
# export TARGET_PRODUCT=odroidx2
# mmm /external/wireless-tools 

  • WINDOW or LINUX 에서 ADB로 IWMULTICALL 로 FILE만 전송 (Embeded 용 Util )
adb push iwmulticall /system/xbin 

  • Serial or ADB Shell 에서 Embedded 용 WIFI Tool 설정
# cd /system/xbin

# chmod 755 iwmulticall

# ln -s /system/xbin/iwmulticall iwconfig
# ln -s /system/xbin/iwmulticall iwlist
# ln -s /system/xbin/iwmulticall iwspy
# ln -s /system/xbin/iwmulticall iwpriv
# ln -s /system/xbin/iwmulticall iwgetid

2. WIFI Tool을 이용하여  Client에서 AP접속 방법

iwconfig, iwlist 는 wext 로 연결된 interface것 만 가능하다.


2.1 AP에  직접접속할 경우 (인증이 필요없는 경우)  

1.   # iwconfig                 //기본 무선랜 장치확인 

wlan0     unassociated  Nickname:"rtl_wifi"
           Mode:Auto  Access Point: Not-Associated   Sensitivity:0/0
           Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

lo        no wireless extensions.

eth0      no wireless extensions.

2.  # ifconfig wlan0 up         //   wlan0 활성화 시킨다. 
3.  # iwlist scanning            //   각 AP를 검색을 한다.

          Cell 04 - Address: 00:01:3F:20:A1:DC
                    ESSID:"CWPW"
                    Protocol:IEEE 802.11bg
                    Mode:Master
                    Frequency:2.472 GHz (Channel 13)
                    Encryption key:off
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                              18 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 12 Mb/s
                              24 Mb/s; 48 Mb/s
                    Signal level=100/100

4.  # iwconfig wlan0 essid "CWPW"  // * 원하는 AP로 바로 접속 및 연결설정 
5.  # iwconfig                                // 접속된 것을 확인, 아래의 ESSID 부분확인.

wlan0     IEEE 802.11bg  ESSID:"CWPW"  Nickname:"rtl_wifi"
          Mode:Managed  Frequency:2.472 GHz  Access Point: 00:01:3F:20:A1:DC
          Bit Rate:54 Mb/s   Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=96/100  Signal level=100/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

6.  # dhclient wlan0        // dhcp client 로 IP주소를 받아온다.  
or  # dhcpcd wlan0  &        ( dhcpd -n  , 문제가 일을 경우 renew )


2. 인증을 통한 AP 접속 

iwpriv를 통해서, wpa_supplicant 도움 없이도 인증을 통해 AP를 접속 가능한 Driver들이 존재 
이는 각 Driver의 Manual 참조 


2.2 AP에 WEP 인증하여 사용 접속할때  (WEP만 지원)
       
          # iwconfig wlan0 key restricted XXXX-XXXX-XX


2.3 AP WPA-PSK 인증 필요 할 경우   ,

//TEST 다 진행 못함.
wpa_supplicant가 tool이 필요하며, wpa_supplicant.conf 설정을 해야한다.

#wpa_passphrase GK_1234  // 입력과 동시에 password를 입력하라고 나온다 
#reading passphrase from stdin  
12345678      
network={
 ssid="GK_1234"
 #psk="12345678"
 psk=133da4b2310ed9fe920dfb61c03c271f7f583656cc2b185b118a93bea788b703
}        

         기존의 값을 유지하고 싶으면  wpa_supplicant.conf에 추가해준다.
         아니면 아래와 같이 다시한번 실행해서 wpa_supplicant.conf 초기화한다.
   
# wpa_passphrase ssid_name > /etc/wpa_supplicant/wpa_supplicant.conf
# cat /etc/wpa_supplicant/wpa_supplicant.conf        
      
# iwconfig wlan0 essid "GK_1234"
# wpa_supplicant -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
rfkill: Cannot open RFKILL control device
wlan0: Failed to initialize driver interface

# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
위와 같은 에러 발생, rfkill 문제와 wlan 문제발생
    
3. Network 설정예제

//타사이트 설정  TEST못해봤음 , 자동으로 설정해주는 것 같음.
#  vi /etc/network/interfaces
auto wlan0
iface wlan0 inet dhcp
wireless-essid 사용할ssid
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf1

//안드로이드 설정
#  vi /etc/wifi/wpa_supplicant.conf
update_config=1
ctrl_interface=wlan0
eapol_version=1
ap_scan=1
fast_reauth=1

4. 기타사항 

Tool 사용시 숙지내용
  • set WPA IE for AssocReq with private ioctl
  • set SSID with SIOCSIWESSID
  • set channel/frequency with SIOCSIWFREQ
  • set BSSID with SIOCSIWAP (this last ioctl will trigger the driver to request association)

  http://lxr.free-electrons.com/source/include/uapi/linux/wireless.h#L282

5. 이외 유용한 WIFI Tool 및 관련 TEST  


iw (cfg80211/dl80211 위한 Test tool)
iw list /event 등 다양한 정보및 쉽게 테스트 가능 
  http://wireless.kernel.org/en/users/Documentation/iw

Test wifi shell program by using iw
상위 iw를 이용하여 wifi test 하는 것으로 추후 테스트 시 이용 
  http://wireless.kernel.org/en/developers/Testing/wifi-test#Wifi_test_1.0
 
EAP peer 와 RADIUS client test
  http://w1.fi/wpa_supplicant/devel/testing_tools.html

6. Wireless 관련자료

- Wireless tool 기본구성
  http://en.wikipedia.org/wiki/Wireless_tools_for_Linux

- WIFI 설정 쉡 스크립트
  http://rhdxmr.tistory.com/158

- 각종 파일 설정 예시 및 (wpa_supplicant.conf 설정)
  http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=4&chap=4#doc_chap2

- WEP KEY 보안 접속 예제
  http://mandrivausers.org/index.php?/topic/21736-iwconfig-wlan0-essid-doesnt-work-solved/

- Test ICS WIFI Configuration
   https://wiki.linaro.org/Resources/HowTo/SamsungWlanInOrigenAndroid

- iwconfig 설정 설명
  http://jake9999.tistory.com/47

- 기본용어설명
  http://www.cwnp.com/forums/forum-posts.php?postNum=288446

- WPA-PSK 보안 접속 예제1
  http://pracon.tistory.com/48

- WPA-PSK 보안 접속 예제2
  http://webnautes.tistory.com/141

-iwconfig 문제이슈 해결
  https://kldp.org/node/122317

- RFKILL 관한설명
  https://access.redhat.com/documentation/ko-KR/Red_Hat_Enterprise_Linux/6/html/Power_Management_Guide/RFKill.html

7/22/2014

ODROIDX2에 Android 설치 및 Gapps 설치 (ODROID X2)

1. ODROID Board에 새로운 Image를 Write

Odroid를 2012년 말에 샀는데, 드디어 어찌되었든, Kitkat이 나왔으니, 아래와 같이 설치를 해서 ODROID로 NAS형태로 써보고, 
하드디스크 연결해서, Settop 박스처럼도 써보자.
Image write 하는 방법은 간단하며,지금 odroid-x2 인 경우, 부트하는 방법이 두가지 모드이다.

  • How To Write the Image on Wins 
  http://odroid.us/mediawiki/index.php?title=Step-by-step_Ubuntu_SD_Card_Setup_--_for_Windows_Users


emmc 모드와 sd카드 모드 부팅을 하지만, SD카드는 직접 구우면 되지만, emmc 보드의 끝부분 interface가 microSD이나, board가 너무 두꺼워서
나의 microSD adapter 에도 연결이 되지 않는데, 다른 converter를 사야할 것 같다. 
현재 ODROID에서 제공해주는 Image는 아래와 같다.

  • ODROID X2 Android Release Image 종류
  1. emmc_self_installer.zip   : Image를 emmc에  굽고, emmc에 모든것이 설치됨.
  2. sd2emmc_installer.zip    :  Image를 SD카드에 굽고, emmc에 모든것이 설치됨.
  3. sd_self_installer.zip        : Image를 SD카드에 굽고  SD카드에 모든것이 설치됨.

한번 더 압축되어 있고, installer가 있기에 맘대로 설치장소가 변경가능하다.
이부분은, Image를 구우면, 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"

eMMC와 SD Card version 이 두 버전이 존재하는데, emmc가 더 속도가 빠르므로, emmc로 사용하고 있으며, SD Card는 오직 테스트 버전 


2. GApps 이란

GMS(Google Mobile Service) or GApps라고 하며 주로 개발용, 즉 AOSP를 설치할 경우 이를 포함하고 있지 않다.

Gapps를 포함해서 배포를 하게된다면 구글에게 라이센스를 주어야 한다고 하며, 그래서 개발용 AOSP(Android Open Source Project)는 
GApps를 포함이 되어 있지 않고 별도로 설치해야한다.

GAPPS는 구글에서 제공하는 Application 이며, Gmail 포함하여 관련된 Service App들 

GApps 관련자료
  https://namu.wiki/w/%EA%B5%AC%EA%B8%80%20%EC%95%B1%EC%8A%A4
  https://github.com/opengapps/opengapps/wiki/Package-Comparison

공식 Download
  https://opengapps.org/


이제 playstore와 google에서 기본으로 제공해주는 프로그램들을 설치해서 태블릿 처럼 맘대로 쓰자


2.1 GAPPS 설치 및 Download 

ODROID에 가서 아래의 파일을 Down

필요파일
  • Google Apps (Stock package) :     
pa_gapps-stock-4.4.4-20140620-signed.zip
        
위의  App에 Google의 기본 App 과  Play Store 가 있기에 아래와 같이 설치하고,
설치후 Playstore에서 추후 다운받아 설치를 진행하면 되겠다.

       
2.2 GAPPS 설치방법 

(Window에서 adb를 설치했음)
Window에서 cmd로 Terminal창을 연 후 아래와 같이 실행한다.

cd Y:\ODROID\Play Store APK\pa_gapps-stock-4.4.4-20140620-signed

adb remount

adb push system /system  

  http://www.thedroid.net/download-android-4-4-kitkat-apps/
  http://www.thedroid.net/download-google-apps-gapps-android-kitkat/

7/21/2014

GITHub Site 및 Github Program 사용방법

1. Github 관한 소개

Github는 GIT를 공개 웹호스팅이며, 최근 3년사이에 사이트가 많이 변경이 되어 Manual도 다시 Update한다.
별도의 Github에서 Window Program을 제공하지만, 이것보다는 Source Tree가 더 쓰기가 괜찮은 것 같다.

2. Github의 기본구성 

더 이상 Bootcamp는 제공하지 않으며, Guide와 Start Project로 간단하게 구성되어있다.
그리고, 본인의 프로젝트와 Fork된 프로젝트가 아이콘으로 구분이 되어 표시되어진다.

  • Github  기본사이트 
  https://github.com/




  • 이전메뉴



  • 본인의 실제 Github 
  https://github.com/JeonghunLee
  1. Gist :  소스를 공개적으로 쉽게 쓸 수 있고 공개 할수 있다. 
  2. Git  :  Server를 무료로 사용해주게 해준다.  



  • GIT 기본사용서 
       http://rogerdudler.github.io/git-guide/index.ko.html
  • Github Help
       https://help.github.com/
  • Gist 의 설명 
       https://help.github.com/articles/about-gists/
  • wiki 의 설명
       https://help.github.com/articles/about-github-wikis/
  • Remote repositories
       https://help.github.com/articles/about-remote-repositories/

  • Git Command의 일반적인 작업 
모든 Command는 다 안나왔지만, 일반적인 작업순서이므로 금방이해가 된다.

https://blog.osteele.com/2008/05/my-git-workflow/


3.  Github에서 Project 시작방법  

Github 사이트가서  Start repository  한 후 하고 Repository 이름을 정하자.
그리고, git init 와 git clone으로 이를 down load를 한다.

  • Linux 에서 Git 설치 및 준비 
 $ sudo apt-get install git 

**HTTPS 할 경우, Username과 Password 입력 ( Username Github 주소 표시)

**SSH 일 경우 ssh-keygen을 이용하여 key 생성후 이를 Github에 Setting->SSH Keys 등록

나의 경우, SSH가 편하고 좋으며, 한번 Key 생성 후 등록하면 걱정할 필요없다. 

  • Window 에서 설치 (선택)
  1. Github Program  설치 
  2. Source Tree  설치 ( 다시 설명)
현재 Source Tree를 자주 사용하다 보니, Linux 명령어도 아래의 사이트를 참조해서 보면쉽게 이해가능하다.
  https://www.atlassian.com/git/tutorials/syncing


  • GIT 기본설정  (SSH/HTTPS 반드시 먼저설정)
기본으로 본인이 사용하는 Github의 계정정보를 넣어주고 설정한다. 

$ git config --global user.email "you@example.com"  //Github 설정된 email 
$ git config --global user.name "JeonghunLee"       //Github UserName 

  • GIT 설정확인 
폴더 안에 .git

$ git config --list    // 현재 설정된 부분 확인  
user.email=xxxxxxxxx    // 상위에서 설정한 Github 설정된 email 
user.name=JeonghunLee   // 상위에서 설정한 Github Username 
......
remote.origin.url=https://github.com/JeonghunLee/xxxx.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master


  • GIT Remote 확인 
$ git remote -v  // Remote Repository와 좌측 이름 확인 
origin https://github.com/JeonghunLee/Ubuntu1804_Basic.git (fetch)
origin https://github.com/JeonghunLee/Ubuntu1804_Basic.git (push)

// 상위 remote.master.remote=origin 되었으면, remote -v의 좌측역시 동일하게 되어야함 



3.1  Github에서 Remote New Repository 생성   

아래와 같이 Github Site에 로그인을 한 다음에 Repository로 가서 New or Start Project  본인이 직접 새로운 Github의 Remote Repository를 생성한다.


A. Github 사이트에서 Remote Repository 생성   

Github에서 Remote Repository 생성시 아래와 같이 간단히 사용법을 알려준다.




B. 본인이 작업한 소스를 Local Repository에 생성 및 등록 Update한다  
  1. git init :  Git Local Repository를 구성한다
  2. git add : add로  Index(Head)에 등록한다 
  3. git commit -m : Commit으로 최종적으로 Local Repository 등록.
  4. git status : 현재 GIT 상태를 파악  

  • GIT Project 생성 및 파일추가 와 Local Repository에 Commit 

echo "# ahyuo.github.io" >> README.md
git init
git add README.md               // STAGE/INDEX 에 File 등록 
git commit -m "first commit"    // Local Repository에 Commit 
git status                      // 현재 GIT 상태확인 및 다음해야할 Command 추천 



C. Remote Repository와 등록 및 Push. 
  1. git remote add orgin : 현재 만들어진 new repository를 추가등록
  2. git push -u orgin master  : Local Repository와 Remote Repository를 Sync 즉 Update 

$ git remote add origin https://github.com/JeonghunLee/test
$ git remote -v                         // 등록된 remote Repository 확인 
$ git push -u origin master


상위에서 설명한 Remote Repository 설정확인


3.2 Github에서 Remote Repository를 가져올 경우  

직접 만들지 않고 기존에 존재하는 Remote Repository에서 Source를 Download하여 사용하는 경우이다.
보통 본인이 하던 작업 or 다른 Github 사람 작업 가져오기 경우가 될 수 있겠다.


$ git clone https://github.com/JeonghunLee/test.git   //소스 가져오기  

본인 Repository를 수정을 한 후 update 하고 싶다면 상위와 동일하다.

$ git add *                                    // Local Index(Stage) 에 등록 
$ git commit -m "added my functtion commit"    // Local Repository 등록 

$ git remote -v   // 등록된 remote Repository 확인 


$ git remote add origin https://github.com/JeonghunLee/test.git
$ git push -u origin master


만약 push가 되지 않는다면, 상위에서 설명한 Remote Repository 설정확인


3.3 Web에서 Github 의 Repository를 수정/추가 한 경우

아래와 같이 본인의 작업환경에가서 Remote Repository가 변경이 되어있으므로,
Local Repository도 아래와 같이 Sync를 맞춰준다.


$ cd test                    // 본인의 Local Repository 이동
$ git pull https://github.com/JeonghunLee/test.git  // 나의 Github의 Repository와 Sync를 맞춰어주는 작업 


3.4 Remote Repository 등록 과 Update(push) 할 경우 

이제 상위에서 기본 사용법을 익혔으니, 실제 HTTPS or SSH로 이용하여 Remote Repository에 이용해보자
이미 Local Repository 가 생성이 되어있다고 가정하고, 아래 방법으로 Update만 하면된다.
git init 중요 (Local Repository 생성)

  • A. HTTPS로 했을 경우 
중요한것은 본인의 Username과 Password를 알아둬야 가능하다.

// Github에서 이미 Remote Repository를 생성 
$ git remote add origin https://github.com/JeonghunLee/test.git            // Remote Repository 등록 (Github Remote 등록)
$ git remote -v                                                            // 등록된 remote Repository 확인 
$ git push -u origin master                                                // Local Repository 와 Remote Repository Push 하여 Sync
Username for 'https://github.com': 
Password for 'https://xxxxx@github.com':

  • B. SSH로 했을 경우
SSH는 Key 기반으로 동작하기 때문에 우선 아래의 Key를 생성하여 Github에 등록하자.
// Github에서 이미 Remote Repository를 생성 
$ git remote add origin git@github.com:JeonghunLee/test.git                // Remote Repository를  origin 등록 
$ git push -u origin master                                                // origin의 등록된 Remote Repository의 master에 Push 

1. SSH Key 생성하는방법 (본인 email 사용)

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"   // RSA 기반으로 나의 Github Email 기반으로 Key생성
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jhlee/.ssh/id_rsa): 
Created directory '/home/jhlee/.ssh'.

2. Password 두번 입력

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/jhlee/.ssh/id_rsa.        // Private Key (Base64 Encoding)
Your public key has been saved in /home/jhlee/.ssh/id_rsa.pub.        // Public Key  (Base64 Encoding)
The key fingerprint is:
cf:bf:e0:59:f4:e5:9b:c5:6d:f9:17:df:1d:7c:f4:c0 your_email@example.com
The key's randomart image is:
+--[ RSA 4096]----+
|    .oo.         |
|.    .oo         |
|o . +o* .        |
| + + O.+         |
|  o o * S        |
|     . *         |
|      E .        |
|     .           |
|                 |
+-----------------+


3. Key를 확인하고 Github의 개인설정 Setting->SSH Key 등록


$ cat ~/.ssh/id_rsa.pub     // 이정보를 전체 입력 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLRdkIhvX5JZmRjaz6r19sdvHj+iDWskd+e8EWkFjrhuPFQdtd5KuFpgpDnchpgLNSxIYug0KzELqiiYMBk0MakVjvAlv9G5jo+VioHFsk9Hql9mAJUTQJ9sMAcu+JLY+3gGChNRbHTcnUK1Jm5SnPETmkasflA2Miv3ifhsr6Odmdc2VXtj6jqGrPGp47i21SXscszmGAdPtaUffo9xmfX9XKOOXjml2exNDPKl58Qu9OAF8Bn4Izxou34ctozA+UflJYOwCgcPf+dt3pa7SvnfpnzZpk4QsVh/ertjmUxno7Go71TgZRiwRe/lnK6xSmm0PDWjX2zquqagOaCkz/ your_email@example.com

4. 개인설정 (Setting->SSH Keys 등록) 후 확인
  https://github.com/settings/profile

Github 암호 없이  SSH Key 기반으로 접속이 가능

4. SSH-Agent 를 실행

$ eval "$(ssh-agent -s)"
Agent pid 2612

5. SSH에서 Key 추가 후 git push 실행

$ ssh-add ~/.ssh/id_rsa    
Enter passphrase for /home/jhlee/.ssh/id_rsa:             
Identity added: /home/jhlee/.ssh/id_rsa (/home/jhlee/.ssh/id_rsa)


Key 생성방법 및 추가방법 (Github 설명)
  https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

Key 확인방법
  https://help.github.com/articles/checking-for-existing-ssh-keys/


추후 관리는 git tag  version 관리를 진행하고 git push remote와 sync를 맞추고새로운 file이 있을 경우 git add로 등록을 해주고 git commit으로 반영하고
remote와 sync를 맞추자.
사실 Tool로 관리하는 것이 편하긴 편하다.


3.5 Github 의 Repository Setting 

개별 Repository 의 Setting 의 기능에 대해 기본적으로 알아보자.

  1. Repository 이름 변경
  2. Repository 삭제 가능





4. 상대방과 협업 

Local repository 라는 본인의 개별 공간을 생성도 가능하지만, 상대방 Remote repository 와 나의 Remote Repository를 이용하여 협업도 가능하며,
상대방 Remote Repository에서도 협업이 가능하다.
  1. Fork는 상대방 Repository를 내 Repository로 그대로 복사해 오는 것
  2. Pull Request는 상대방 Repository 와 내 Remote Repository와 Merge하지하기 위해 요청하는 것

  • Fork
보통 상대방의 유용한 Repository를 Fork를 통하여 나의 Repository로 쉽게 가져올수 있다.
다만 이때 라이센스를 확인을 하고 가져오고 사용하자.
그리고, 이제 가져온 Repository는 내 맘대로 수정이 가능하며 권한도 내가 가지고 있다.
만약 수정을 하여 상대방이 내 소스가 좋다고 느껴 Pull Request를 할지도 모른다.
그러나, 보통 보면, 이것을 많이 거절하는 것 추세로 가는 것 같다.
그래도 반드시 참조와 라이센스는 중요하다.

  • Pull Request 
내 Repository를 상대방들이 Fork를 해서 가져가서 소스를 고치며, 내가 이제 Pull Request 가 가능하다.
이것을 이용하여 소스를 Merge하고 협업이 가능한 것이다.
Git의 pull command라는 것이 fetch하고 merge하는 기능이기에 일종의 상대방 Repository와 내 Remote Repository를 싱크를  맞추는 요청이다. (pull command)
                 
if you are hoping to contribute back to the original fork, you can send the original author a pull request    


5.  Github에서 Download 하는 방법  

Github 계정이 있다면,  상대방의 Public Github를 가져오는 방법은 Fork로 가져오면된다.
본인의 Github 소스를 Download 하고 싶다면  git clone을 이용하자.


6. Github Desktop 설정 및 기본사용법

아래 설정은 참고만 하고, 기본적으로 거의 고칠필요는 없다.
추후 이 챕터는 다시 작성.

  • 설정->Repository Setting
       현재 설정을 유지하지만, 만약 문제가 발생을 한다면, 아래의 설정을 수정한다.   
           .gitattributes 설정  // Line endings and attributes 변경
           .gitignore의설정   // Ignored files
 
  • 설정->Option 
  1. Configure git    기본환경설정 
  2. Clone Path :  my window repository path 
  3. Shell 설정 


Configure git는  GIT Command (git config --global user.name , user.email) 동일하며,  이며, 추후 여기에 설정되는 값들은 git config에 반영이 되므로, git config --list 로
확인하자.





이 Tool에서  쉽게 clone과 init을을 할 수 있는데, create 는  git init 과 동시에 폴더 생성이 되며, Clone도 git init 과 clone을 폴더 생성이다. 참 편하다.



여기서 create를 해주고, 파일들을 등록하고, 마지막에 Publish Repository를 해주면,이를 github에 자동으로 등록해주고, Github에 Remote Repository를 생성해준다.
물론 난 Public으로 생성

그런데,  Publish 하는 도중 Error  Failed to publish this branch 에러가 발생하는 경우가 발생한다. 이녀석이 https로만 통신을 하는데, 뭔가 문제가 발생을 한다.
내쪽에서 그래서 Proxy Server를 사용하면 해결이 된다고 하는데, 해보지 않았다.

지금 이 Tool이 https로만 동작하기에 , 설정에서 Repository Setting 에서 변경 불가능 해결책은 두가지다.
Proxy Server를 이용하거나, Shell을 이용하여, 직접 ssh주소로 연결하여 push하는거다.


1. Proxy Server 해결방법.

git config --global http.proxy http[s]://userName:password@proxyaddress:port

관련내용.
  http://stackoverflow.com/questions/13894387/github-failed-to-publish-this-branch-error-on-windows


2. Terminal에서 ssh주소로 직접 연결 

나는 귀찮아서, 이 방법으로 선택했으며, git command도 익힐 겸 해서  아래와 같이다 git command로 작성해서 해결을 했다.
이 문제가 발생하면,  github와 통신이 제대로 안되다 보니, Tool에서 제공하는 clone 기능과 sync기능 역시 제대로 안된다. 직접 command로 해야한다.  
다행히,Github에 자동으로 Repository까지는 생성이 되어서 귀찮게 Github사이트에 만들 필요가 없었다.



위와 같이 Github 사이트에서 나의 새로운 프로젝트를 확인을 하고, SSH주소를 확인을 한다.
지우고 싶다면, Setting -> Danger Zone의 Delete this repository 를 사용하면된다.

아래와 같이 한 이유는 origin 이미  https 주소로 사용되어있기에, ssh로 새로 사용.

$ git remote add ssh git@github.com:xxxxxx.

$ git push ssh master    // ssh remote주소에  master branch를 push한다.