Virtualbox Ubuntu에서 adb devices 안잡힐 때

Posted in 개인/ㄴAndroid by

Virtualbox는 USB 2.0를 사용하기 위해선 Virtualbox Extension Pack을 설치해줘야한다.


https://www.virtualbox.org/wiki/Downloads

위 사이트에서 Oracle VM VirtualBox Extension Pack을 다운받는다.

Virtualbox 관리자를 실행시키고 파일-환경설정-확장에서 패키지 추가를 통해 다운받은 파일을 추가해준다.

그리고 해당 가상머신에서 설정-USB-USB 2.0 EHCI 컨트롤러 사용하기를 선택한 후 사용할 USB장치를 추가시켜주면 된다.


Android JellyBean 4.2 Source Build

Posted in 개인/ㄴAndroid by

안드로이드 젤리빈 4.2 소스 빌드 컴파일 


소스 검색 및 빌드에 필요한 소프트웨어의 설치
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils python-software-properties xsltproc libx11-dev:i386 gcc-4.5 g++-4.5 gcc-4.5-multilib g++-4.5-multilib


libGL.so 심볼릭 링크 만들기
Emulator 용 빌드를 할 경우 필요합니다.
$ sudo ln -s libGL.so.1 /usr/lib/i386-linux-gnu/mesa/libGL.so
$ sudo ln -s mesa/libGL.so /usr/lib/i386-linux-gnu/libGL.so

JDK6 설치
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java6-installer (oracle-java7-installer)

USB 설정
# Android 단말과 PC를 연결하기 위한 설정
$ sudo vi /etc/udev/rules.d/51-android.rules

# 51-android.rules에 아래 내용을 기입
SUBSYSTEM=="usb", ATTRS{idVendor}=="####:####", SYMLINK+="android_adb", MODE="0666" GROUP="plugdev"
TEST=="/var/run/ConsoleKit/database", RUN+="udev-acl --action=$env{action} --device=$env{DEVNAME}"

# udev를 다시 실행한다
sudo /etc/init.d/udev restart

repo 설정
$ mkdir ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

#repo 경로설정
$ vi ~/.bashrc
export PATH=$PATH:~/bin < - 기입
$ source ~/.bashrc

AOSP에서 Android 소스 코드 다운로드
# 작업 폴더 만들기
$ mkdir ~/jellyBean
$ export ANDROID_ROOT=~/jellyBean

# android-4.2.1_r1의 소스를 다운로드
$ cd $ANDROID_ROOT
$ repo init -u https://android.googlesource.com/platform/manifest android-4.2.1_r1
$ repo sync -j4

Android 소스 코드 빌드
$ cd $ANDROID_ROOT 
$ source build/envsetup.sh 
$ lunch full-eng
$ make -j4

안드로이드 오디오 시스템 구성 요소

Posted in 개인/ㄴAndroid by


1. 어플리케이션 프레임워크 계층 : 자바 어플리케이션들이 오디오 시스템을 사용하기 위한 자바 API들이 존재하는 곳

구성요소

설  명 

 AudioTrack(Java)

오디오 출력을 담당하는 자바 클래스이다. AudioTrack(Java)은 파일이나 네트워크로부터 PCM데이터를 추출한 후, 네이티브 계층의 AudioTrack(C++)으로 PCM데이터를 전달하여 소리를 출력한다. 

 AudioRecord(Java)

오디오 입력 장치로부터 PCM데이터를 받아오기 위한 자바 클래스이다. AudioRecord(Java)는 네이티브 계층의 AudioRecord(C++)를 통해 PCM 데이터를 획득한 후 압축 파일로 저장하거나 네트워크를 통해서 소리를 다른 곳으로 전달할 수 있다. 

 AudioManager(Java)

오디오 시스템에서 볼륨을 조정하거나 오디오 출력 장치를 결정하는 등의 오디오 시스템 제어를 위한 자바 클래스이다. 


2. JNI 계층 : 어플리케이션 프레임워크 계층의 자바 클래스들이 C++ 클래스를 사용하기 위한 인터페이스를 정의한 곳

구성요소

설  명 

android_media_AudioTrack

네이티브 계층의 AudioTrack(C++) 클래스를 사용하기 위한 JNI정의

android_media_AudioRecord

네이티브 계층의 AudioRecord(C++) 클래스를 사용하기 위한 JNI정의

android_media_AudioSystem

네이티브 계층의 AudioSystem(C++) 클래스를 사용하기 위한 JNI정의


3. 네이티브 계층 : 오디오 시스템의 핵심 동작을 수행하는 계층 / 크게 오디오 출력, 오디오 입력, 오디오 제어 동작을 수행


3-1. 네이티브 프록시 : 어플리케이션이 시스템 서비스에 접근하기 위한 방법을 정의

구성요소

설  명 

AudioTrack(C++)

오디오 출력을 담당하는 서비스 클라이언트의 클래스이다. AudioTrack(C++)는  IAudioTrack 서비스 프록시를 통해 AudioFlinger 서비스에게 오디오 출력을 요청한다.

 AudioRecord(C++)

오디오 입력을 담당하는 서비스 클라이언트의 클래스이다. AudioFlinger 서비스는 하드웨어로부터  PCM데이터를 받아 RecordTrack을 통해 애플리케이션으로 전달한다. AudioRecord(C++)는 IAudioRecord 서비스 프록시를 통해 AudioFlinger 서비스에게 오디오 입력을 요청한다.

 AudioSystem(C++)

오디오 제어 요청을 담당하는 서비스 클라이언트의 클래스이다. 오디오 라우팅, 오디오 볼륨 조정 등 제어에 관한 동작을 AudioPolicyService에게 요청한다.


3-2. 서비스 프록시 : 오디오 시스템의 네이티브 프록시가 시스템 서비스를 사용하기 위한 인터페이스

구성요소

설  명 

 IAudioFlinger

서비스 클라이언트가 서비스 서버의 AudioFlinger 클래스에 접근하기 위해 사용한다.

IAudioTrack

트랙 핸들 리모트 서비스를 사용하기 위한 서비스 프록시이다. 서비스 서버의 TrackHandle클래스에 접근하기 위해 사용한다.

IAudioRecord

레코드 트랙 핸들 리모트 서비스를 사용하기 위한 서비스 프록시이다. 서비스 서버의 RecordHandle 클래스에 접근하기 위해 사용한다.

IAudioPolicyService

서비스 서버의 AudioPolicyService 클래스에 접근하기 위해 사용한다.


3-3. 시스템 서비스 : 서비스 서버에서 오디오 시스템의 동작을 실제로 수행하는 서비스들

구성요소

설  명 

AudioFlinger

오디오 시스템의 중추적 역활을 하는 시스템 서비스이다. 크게 오디오 출력, 입력 역활을 가지고 왔으며, 오디오 HAL을 통해 오디오 하드웨어에 접근이 가능하다.

AudioPolicyService

네이티브 프록시로부터 오디오 시스템의 제어 요청(볼륨 조정, 라우팅, 포커싱 등)을 받아서 처리하는 서비스이다. 제조사 고유의 오디오 시스템 정책을 추가할 수도 있다. 그리고 실제 정책을 하드웨어 혹은 현재의 동작에 적용하도록 AudioFlinger 서비스에게 요청한다.


3-4. 트랙 핸들 리모트 서비스 : 서비스 클라이언트가 서비스 프록시를 통해 접근하는 서비스

구성요소

설  명 

TrackHandle

트랙에 접근하기 위한 트랙 핸들이다. AudioTrack(C++)은 TrackHandle 클래스를 통해 Track 클래스의 함수를 접근한다.

Track

AudioTrack(C++)이 서비스 서버로 전달한 PCM데이터를 관리하는 역활을 한다. AudioTrack(C++) 클래스를 통해 생성 가능하다.

AudioMixer

트랙들이 가진 PCM 데이터에 대한 리샘플링 작업과 믹싱작업을 한다.

MixerThread

믹서 쓰레드는 트랙들의 PCM 데이터를 얻어온 후, 오디오 믹서에게 전달한다. 또한 오디오 믹서에 의해 믹싱된 PCM 데이터를 오디오 HAL에게 전달하여 소리로 출력한다.


3-5. 레코드 핸들 리모트 서비스 : 서비스 클라이언트가 서비스 프록시를 통해 접근하는 서비스

구성요소

설  명 

RecordHandle

AudioRecord(C++)에서 트랙에 접근하기 위한 트랙 핸들이다. AudioRecord(C++)는 RecordHandle 클래스를 통해 RecordTrack 클래스의 함수에 접근한다.

RecordTrack

오디오 하드웨어가 전달한 PCM 데이터를 AudioRecord(C++)로 전달하는 역활을 한다. 서비스 서버에서 오디오 입력을 담당하는 클래스이다. AudioRecord(C++) 클래스를 통해 생성 가능하며, 단 하나의 레코드 트랙만 존재한다.

AudioResampler

오디오 입력시 PCM 데이터에 대한 리샘플링을 수행한다.

RecordThread

RecordThread는 오디오 HAL에서 PCM 데이터를 얻어 온 후 AudioResampler에게 전달한다. 오디오 입력 리셈플러에서 리샘플된 PCM 데이터는 서비스 클라이언트로 전달된다.


4. 오디오 HAL 계층 : 제조사마다 다른 오디오 하드웨어를 안드로이드 플랫폼이 동일한 인터페이스를 통해 사용할 수 있도록 해줌


5. 리눅스 커널 및 하드웨어 계층 : 오디오 입출력을 위한 오디오 하드웨어 및 이를 구동하기 위한 디바이스 드라이버가 존재하는 계층



참조 : 안드로이드 미디어 프레임워크 - 4장 안드로이드 오디오 시스템

Odroid X-2 SDcard에 U-boot쓰기

Posted in 개인/ㄴAndroid by

# 출처 : http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidx&kind=52&bid=1329



# toolchain 다운로드기
http://www.mentor.com/ 에 가입(가입해야 툴체인 다운로드 가능)
로그인후 https://sourcery.mentor.com/GNUToolchain/release1294?lite=arm 에서 IA32 GNU/Linux TAR 또는 IA32 GNU/Linux Installer 다운로드

 

# toolchain 설치
하드커널에서 본 어떤 페이지에서 진저브레드 이후는 64bit OS에서 컴파일 해야 된다는걸 얼핏봐서, 우분투 64bit 를 설치했었습니다. 64bit 환경에서는 32bit 라이브러리가 없어 툴체인이 작동을 제대로 안하거나 설치가 안되니 32bit 라이브러리를 설치해줘야 합니다. OS를 32bit 로 설치하신경우는 상관 없을듯합니다.

-IA32 GNU/Linux Installer 를 이용해 설치하는경우 아래와 같은 에러 메세지가 뜹니다.
-----------------------------------------------------------------------------------------
Error: Missing 32-bit libraries on 64-bit Linux host

Your 64-bit Linux host is missing the 32-bit libraries
required to install and use Sourcery G++.

Please follow this Knowledge Base entry to install the
required 32-bit libraries:
https://support.codesourcery.com/GNUToolchain/kbentry62

Once you have installed the 32-bit libraries, please restart
the installer.
-----------------------------------------------------------------------------------------

-IA32 GNU/Linux TAR 를 이용해 압축을 풀어 설치한 경우는 arm-none-eabi-gcc 파일을 실행하면 그런 파일을 찾을수 없다는 에러가 뜹니다. 분명 경로지정이 제대로 되있는데도 불구하고 실행하면 파일을 찾을수 없다는 에러만 계속 뜸



# 32bit 라이브러리 설치(우분투가 64bit인 경우만)
sudo apt-get install ia32-libs

 

# toolchain 설치 & path 추가
- IA32 GNU/Linux Installer 로 설치하는경우
sudo chmod a+x arm-2010q1-188-arm-none-eabi.bin
sudo dpkg-reconfigure -plow dash
./arm-2010q1-188-arm-none-eabi.bin
GUI 설치화면이 뜹니다.

- IA32 GNU/Linux TAR 경우는 원하는곳에 압출을 풀기만 하면됩니다.

- path 추가(경로는 자신이 툴체인 설치한곳의 bin 디렉토리를 지정)
cat >> ~/.bashrc <<EOF
export ARCH=arm 
export CROSS_COMPILE=arm-none-eabi-
PATH=$PATH:/home/odroid/CodeSourcery/Sourcery_G++_Lite/bin;
EOF

- path 갱신(갱신을 해줘야 바로 path가 적용됨)
source ~/.bashrc

 

# u-boot 빌드 전 p4412_s_fwbl1.bin , p4412_s_tzsw.bin 백업(uboot/sd_fuse/ 에 있음, make distclean 하면 사라짐)

 

# 빌드
make distclean
make smdk4412_config
make

 

# bl2 생성
./mkbl2 u-boot.bin bl2.bin 14336

 

# 부트로더 SD메모리에 기록(기록 하기 전에 아까 백업한 p4412_s_fwbl1.bin , p4412_s_tzsw.bin 두개 파일을 sd_fuse 디렉토리로 다시 복사해주세요.), /dev/sdb 는 자신의 SD리더에 맞는 장치파일을 적어주시면됩니다.
cd sd_fuse
./sd_fusing_4412.sh /dev/sdb
-------------------------SD에 기록하는 모습--------------------
Exynos4412 BL1 fusing
[sudo] password for odroid: 
32+0 records in
32+0 records out
16384 bytes (16 kB) copied, 0.0992948 s, 165 kB/s
16+0 records in
16+0 records out
8192 bytes (8.2 kB) copied, 0.0929718 s, 88.1 kB/s
Exynos4412 BL2 fusing
28+0 records in
28+0 records out
14336 bytes (14 kB) copied, 0.127858 s, 112 kB/s
Exynos4412 bootloader fusing
541+1 records in
541+1 records out
277128 bytes (277 kB) copied, 1.68265 s, 165 kB/s
Exynos4412 tzsw fusing
320+0 records in
320+0 records out
163840 bytes (164 kB) copied, 1.04169 s, 157 kB/s
U-boot image is fused successfully.
Eject SD card and insert it again.
----------------------------------------------------------------
다른 장치들은 bl1 기록하고 바로 그다음에 u-boot를 기록하고 끝나는데 특이하게 Exynos4412용 스크립트는

1.부트섹터 초기화 
2.p4412_s_fwbl1.bin -> bl1
3.bl2.bin -> bl2
4.u-boot.bin -> u-boot
5.p4412_s_tzsw.bin -> tzsw(일종의 키파일인거 같습니다)

순으로 SD메모리에 기록합니다.

sd_fusing_4412.sh 라는 스크립트를 통해 SD메모리에 기록할때 p4412_s_fwbl1.bin , p4412_s_tzsw.bin 는 sd_fuze 디렉토리에 위치하고 u-boot.bin과 bl2.bin은 그 상위디렉토리에 파일이 있는걸로 경로를 참조합니다. bl2.bin과 u-boot.bin을 sd_fuze 디렉토리로 복사안하셔도됩니다.

 

# 우분투 64bit 환경에서 위와 같이 빌드하고 u-boot만 SD메모리에 기록한 상태로 minicom에서 정상적으로 u-boot 작동하는거 확인했습니다.

Android build setting

Posted in 개인/ㄴAndroid by

## 패키지 업데이트 & 업그레이드 ##

$sudo apt-get update

$sudo apt-get upgrade


## Oracle JDK 6 설치 ##

http://eldora.tistory.com/97


## 빌드하는데 필요한 패키지 파일들 설치 ##

$sudo apt-get install git-core gnupg flex bison gperf build-essential

$sudo apt-get install zip curl zlib1g-dev libc6-dev lib32ncurses5-dev

$sudo apt-get install ia32-libs x11proto-core-dev libx11-dev xsltproc

$sudo apt-get install lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev

$sudo apt-get install g++-multilib mingw32 tofrodos python-markdown libxml2-utils


## Libx11-dev:i386 설치 ##

$sudo apt-get install libx11-dev:i386 –yes


## gcc4.4, g++ 4.4 설치 ##

sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib

echo "export CC=gcc-4.4 CXX=g++-4.4" >> ~/.bashrc

source ~/.bashrc

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 50


## U-boot-tools 설치 ##

sudo apt-get install u-boot-tools


## Sourcery G++ Lite 2010q1-188 for ARM GNU/Linux 설치 ##

아래 URL에서 IA32 GNU/Linux Installer 다운로드

https://sourcery.mentor.com/sgpp/lite/arm/portal/release1294


cd ~/다운로드

sudo chmod a+x arm-2010q1-188-arm-none-eabi.bin

sudo dpkg-reconfigure -plow dash


dash 환경설정 - 아니오 - Enter

./arm-2010q1-188-arm-none-eabi.bin

계속 다음을 누르면서 설치


## CrossCompile 환경설정 ##

vi ~/.bashrc

맨아래 코드3줄 입력

export CROSS_COMPILE=arm-none-eabi-

export ARCH=arm

export PATH=$PATH:/home/본인계정/CodeSourcery/Sourcery_G++_Lite/bin;

source ~/.bashrc


참고 : http://source.android.com