오픈 소스 삼성에 있는 방법을 그대로 했는데, 갤탭에 이미지를 굽는 것만 하고 그 이상이 되지 않는다.  결국 컴파일만 한 것 같다.

먼가 더 있는 것 같은데.. 찾기 어렵다.  하여튼 실패기도 넣는 것도 좋을 것 같아서 적어본다.

 

--------------------------------

 

기존 정보는 오픈소스 삼성 싸이트(https://opensource.samsung.com)에 공개되어 있다.

갤럭시탭 소스는 두가지 버전이 있다. 해외버전인 gt-p1000과 국내버전인 SHW-M180 버전이 있다. 나는 국내버전의 LGT 용만 가지고 테스트하려고 한다.


https://opensource.samsung.com/reception/receptionSub.do?method=search&searchValue=gt-p1000
https://opensource.samsung.com/reception/receptionSub.do?method=search&searchValue=m180

 

<운영체제 확인>

$ dpkg -s libc6  | grep Archite
Architecture: i386

이러면  32 비트, amd64가 나오면 64비트이다.

진저브레드 이상 컴파일하려면 64비트에서 돌리는 것이 편하다.

다운로드 링크 –> http://www.ubuntu.com/download/ubuntu/download

 

* 참고 32비트에서 컴파일 하려면. 좀 귀찮은 작업을 해야 한다.

아래와 같은 에러 문구가 나와서 여기저기 손봐야 한다.

build/core/main.mk:76: ************************************************************
build/core/main.mk:77: You are attempting to build on a 32-bit system.
build/core/main.mk:78: Only 64-bit build environments are supported beyond froyo/2.2.
build/core/main.mk:79: ************************************************************
build/core/main.mk:80: *** stop.  Stop.

1. 32비트 운영체제일 때는  ./build/core/main.mk 파일을 아래와 같이 주석을 추가한다. .

73 ifeq ($(BUILD_OS),linux)
74 build_arch := $(shell uname -m)
75 ifneq (64,$(findstring 64,$(build_arch)))
76 $(warning ************************************************************)
77 $(warning You are attempting to build on a 32-bit system.)
78 $(warning Only 64-bit build environments are supported beyond froyo/2.2.)
79 $(warning ************************************************************)
80 $(error stop)
81 endif
82 endif

=>

73 #ifeq ($(BUILD_OS),linux)
74 #build_arch := $(shell uname -m)
75 #ifneq (64,$(findstring 64,$(build_arch)))
76 #$(warning ************************************************************)
77 #$(warning You are attempting to build on a 32-bit system.)
78 #$(warning Only 64-bit build environments are supported beyond froyo/2.2.)
79 #$(warning ************************************************************)
80 #$(error stop)
81 #endif
82 #endif

 

2. 다음 mk 파일에서 m64->m32로 변경한다.

./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk

LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += –m64

->

LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += –m32

 

 

 

<갤탭 소스 다운로드>

LGT 의 갤럭시탭 소스를 다운받는다.

https://opensource.samsung.com/reception/receptionSub.do?method=search&searchValue=m180

image

 

최신버전은 update3을 다운받는다. 다운받아서 내용을 보면, 달랑 kernel과 readme.txt 파일밖에 없다.

image

 

readme.txt 파일에 따르면, update2.zip 파일에 있는 플랫폼 파일을 다운받으라고 한다. 다운받고 커널 파일과 플랫폼 파일을 합친다.

<NOTICE>

The Platform opensource code is the same as that of TF09 version.

Get TF09 version opensource code - filename: SHW-M180L_Opensource_Update2.zip
(download site: opensource.samsung.com)
Unzip it, then you will see the file SHW-M180L_Platform_Gingerbread.tar.gz

 

파일을 모아본다.

image

 

tar.gz으로 묶인 플랫폼 소스의 readme.txt 파일을 보면, build 설명 방법이 잘 나와 있다.

How to build


1. Get android open source.
    : version info - Android gingerbread 2.3.3
    ( Download site : http://source.android.com )

2. Overwrite modules that you want to build.
- \external\iproute2 : Write "ip \" into "build\core\user_tags.mk" so that add this module.
- \external\webkit  : Delete this source tree at Android gingerbread and then copy & execute "clean build".
- \external\alsa-lib : Write "libasound \" into "build\core\user_tags.mk" so that add this module.

3. Add the following lines at the end of build/target/board/generic/BoardConfig.mk

BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_BCM_BTLA := true
BT_ALT_STACK := true
BRCM_BT_USE_BTL_IF := true
BRCM_BTL_INCLUDE_A2DP := true
BOARD_USES_ALSA_AUDIO := true

4. make
- ./build.sh user

 

ubuntu 11.10 amd64 비트를 기반으로 설명한다.


<소스 다운로드>

* 참고자료
http://source.android.com/source/downloading.html

* jdk 6 설치

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

 

* 필요 패키지 설치

$ 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  lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc lib32readline-gplv2-dev

(원래 문서에서는 lib32z-dev를 설치하라고 되어 있지만, Ubuntu 11.10 64비트에서는 해당 모듈을 설치할 수 없다. 따라서 대안인 lib32readline-gplv2-dev을 설치한다.)

$ sudo apt-get install libx11-dev:i386

 

* repo 설치

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

 

* 안드로이드 2.3.3 소스 다운로드
$ mkdir android-2.3.3-galtab
$ cd android-2.3.3-galtab
$ repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.3_r1
$ repo sync

 

* LGT 삼성 갤탭 소스 복사
vmware player에서 소스가 있는 곳을 공유(/mnt/hgfs/vmware-share)해서 복사한다.


$ tar zxvf /mnt/hgfs/vmware-share/SHW-M180L_Platform_Gingerbread.tar.gz –C .

$ tar zxvf /mnt/hgfs/vmware-share/SHW-M180L_Kernel_Gingerbread.tar.gz –C .

$ mv Platform/ android-2.3.3-galtab-platform

$ mv Kernel/ android-2.3.3-galtab-kernel

 


<커널 소스 빌드>

* 툴체인 (Tool Chain) 설치

$ cd /usr/local
$ wget http://www.codesourcery.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ tar xvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

* build.sh 파일 수정

$ cd ~/android-2.3.3-galtab-kernel
$ vi build_kernel.sh

1. TOOLCHAIN과 TOOLCHAIN_PREFIX 변수를 수정한다.

TOOLCHAIN=~/opt/toolchains/arm-2009q3/bin/
TOOLCHAIN_PREFIX=arm-none-eabi-
=>
TOOLCHAIN=/usr/local/arm-2009q3/bin/  
TOOLCHAIN_PREFIX=arm-none-linux-gnueabi-        

2. 28번째 줄에 있는 ^M은 삭제한다. (빌드시 에러처럼 보일 수 있어서.)

output 디렉토리를 확인한다.

ANDROID_OUT_DIR=`pwd`/Android/out/target/product/SHW-M180L

* Kernel 빌드

$ cd ~/android-2.3.3-galtab-Kernel/Kernel

$ make menuconfig

General setup->Initramfs source file->exit->exit->Yes 하고 설정을 save 한다.

image

(initramfs 적용방법과 적용하지 않는 방법 둘 다 써도 문제임)

$ cd ..

$ ./build_kernel.sh

(sh 내부에 ARCH=arm, tool chain 확인)

빌드 결과는 zImage과 커널 모듈파일이다. 커널 이미지가 제대로 있는지 확인한다.

$ ls ~/android-2.3.3-galtab-kernel/Kernel/arch/arm/boot/zImage

커널 모듈 파일이 제대로 있는지 확인한다.

$ ls -al ~/android-2.3.3-galtab-kernel/Kernel/drivers/*/*

 

* 나중에 이 파일을 이용하면 성능 효과를 높일 수도 있을 수 있을 것 같아서 우선 기억해둔다.

arch/arm/configs/p1_kor_M180L_defconfig 

* Clean 하기

$ ./build_kernel.sh Clean

 

<커널 파일을 tar로 만들기>

$ cd ~

$ tar cvf SHW-M180L-kernel.tar android-2.3.3-galtab-kernel/Kernel/arch/arm/boot/zImage
android-2.3.3-galtab-kernel/Kernel/arch/arm/boot/zImage

기존 이미지를 풀어서 새로 컴파일한 zImage 파일만 replace  해 본다.

image

 

그리고, 윈도우에서 7zip으로 tar 파일로 만들면 upload failed 가 뜬다. ubuntu에서 tar로 묶는다.

image

tar로 묶은 후 Odin으로 굽는다.

image

image

 

갤탭 로고는 나오는데, 무한 부팅되면서 이미지 upload 실패했다.

zImage 크기가 순정과 컴파일 이후의 것이 800kb가 차이날 정도로 다르다. 먼가 더 있는 것 같은데. 잘 모르겠다.

 

 

<안드로이드 소스 빌드>

$ cd ~/android-2.3.3-galtab

ubuntu 11.10에서 에러가 발생할 수 있으니. 일부 make 파일을 수정해야 한다.

$ vi frameworks/base/libs/utils/Android.mk

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

=>

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive

-fpermissive에 대한 설명은 gcc 4.1 이슈로서, 자세한 내용은 링크(http://nineye.com/blog/archives/543)를 참조한다.

$ vi build/core/combo/HOST_linux-x86.mk

HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0   
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

FORTIFY_SOURCE에 대한 설명은 링크(http://studyfoss.egloos.com/5280245)를 참조한다.


$ source build/envsetup.sh

$ lunch full-eng

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.3
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRI40
============================================

$ make

….
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
Installed file list: out/target/product/generic/installed-files.txt

 

 

<플랫폼 소스 수정 및 빌드>

$ cd ~/android-2.3.3-galtab-platform/

$ vi build/target/board/generic/BoardConfig.mk

다음을 추가한다.
BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_BCM_BTLA := true
BT_ALT_STACK := true
BRCM_BT_USE_BTL_IF := true
BRCM_BTL_INCLUDE_A2DP := true
BOARD_USES_ALSA_AUDIO := true

$ vi build.sh

안드로이드 컴파일했던 디렉토리를 PLATFORMPATH로 수정한다.

export PLATFORMPATH="/home/kimyonghwan/android-2.3.3-galtab"

$ cd ~/android-2.3.3-galtab-platform/

$ ./build.sh user

Posted by '김용환'
,





Amazon에서 Nosql 인 Dynamo DB를 출시했다.

http://aws.amazon.com/dynamodb/
http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/Introduction.html?r=5435



모든 데이터는 SSD에 저장하고 AZ 에 자동으로 복제가 되게 하여 HA가 되게 했다고 한다.

가격도 상당히 싸다.




Amazon의 CTO 분의 블로그(http://www.allthingsdistributed.com/2012/01/amazon-dynamodb.html) 에 자세힌 내용이 담겨있다. 내 눈에 눈의 띈 부분을 발췌하면 다음과 같다. (역시 관찰력이 Creative하게 하는 것 같다..)

2007년 21st ACM Symposium on Operating Systems Principles 에서 발표한 Dynamo: Amazon’s Highly Available Key-value Store에 대한 정체 ("http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf")를 발표했었는데. 드디어 그 결실을 맺었다. 

DynamoDB의 가장 중요한 요구사항은 Scale과 성능상 Predictable 이었다. SimpleDB를 운영하면서 고객들이 어디서 불편함을 느꼈는지 하나하나 잘 분석했다.

고객들이 Simple DB를 쉽게 사용할 수 있다는 점, 복잡한 쿼리나 TX를 쓰지 않는 부분을 많이 성공했는데, 고객들은 Scale 이슈나 용량 제한으로 인해서 많이 부담을 느꼈다고 한다. 또한 성능 예측성, Consistency, 가격의 합리성(Pricing Complexity) 관점에서 수정하려고 애를 썼다.

이렇게 해서 DynamoDB가 출시되었다. 



마치며..
DynamoDB 가 나오면서 기존 DB 사로부터의 강력한 라이벌이 되지 않을까 생각이 든다. 가격이 생각보다 Reasonable했고 그동안의 Amazon의 Simple DB가 거의 장애가 나지 않았음을 볼 때 시장에 엄청난 일이 벌어지지 않을까 생각이 된다.


Posted by '김용환'
,