2010년 8월 25일 수요일

A special character in MAKEFILE

본 문서는 Makefile의 특수문자의 의미에 대해서 기술 한다.

1. Makefile 특수 문자

 $@  현재 만들고 싶은 Output 이름
 $^  재료들의 이름

예)
===========================================================================
TARGET=spaghetti.bin
ELF_TARGET=spaghetti.elf
BINTOOL=fromelf
CC=tcc

$(TARGET): $(ELF_TARGET)
$(BINTOOL) -bin -o $@ $^              --------------> ①

$(ELF_TARGET): spaghetti.o manipulation.o
$(CC) -o $@ $^                             --------------> ②

spaghetti.o: spaghetti.c
$(CC) -c @^                                  --------------> ③

manupulation.o: manupulation.c
$(CC) -c @^                                  --------------> ④
===========================================================================

① $@ : spaghetti.bin
    $^  : spaghetti.elf
② $@ : spaghetti.elf
    $^  : spaghetti.o manipulation.o
③ $@ : spaghetti.o
    $^  : spaghetti.c
④ $@ : manipulation.o
    $^  : manipulation.c

2. 추가 특수 문자

"=" 와 ":="의 차이

TEMP := $(CC) temp
CC = tcc
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == temp 이와 같이 됩니다.

CC = tcc
TEMP := $(CC) temp
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == tcc temp 이와 같이 됩니다.

TEMP = $(CC) temp
CC = tcc
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == tcc temp 이와 같이 됩니다.

"?="와 "+="
CC?=tcc
CC+=gcc
CC?=cc

CC에는 값이 어떻게 들어 있는가?
CC == "tcc gcc"
이렇게 들어 있습니다.

이유는 ?=는 CC가 선언되어 있지 않으면 선언하는 것입니다.
+=는 공백을 포함하여 CC에 내용을 추가합니다.
따라서, 결과는 "tcc gcc"입니다.

@명령

all :
        @echo "It's me! make"
결과 :
        It's me! make

all :
        echo "It's me! make"
결과 :
        echo It's me! make
        It's me! make

2010년 8월 24일 화요일

Android build id

Android 의 build id는 아래 파일에서 확인 할 수 있다.

build id는 system image의 버전 정보이다.

 

android/build/core/build_id.mk:22:export BUILD_ID=FRF91


 

2010년 8월 23일 월요일

Change JAVA heap size in Android platform

Android 에서 Signing을 하다 보면, 아래와 같은 Error가 발생한다.

 

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:136)
 at com.android.signapk.SignApk.main(SignApk.java:481)

 

이 문제는 Java의 가상 메모리가 부족하여 발생하는 에러이다. 이를 해결 하기 위해서

 

/LINUX/android/build/tools/releasetools/common.py 파일의 SignFile 함수의 아래 부분들을 수정합니다.

(Heap 사이즈를 512mb에서 1024mb로 변경)

 

  cmd = ["java", "-Xmx512m", "-jar",
           os.path.join(OPTIONS.search_path, "framework", "signapk.jar")]


 

  cmd = ["java", "-Xmx1024m", "-jar",
           os.path.join(OPTIONS.search_path, "framework", "signapk.jar")]

 

 

 

2010년 8월 19일 목요일

THUMB Mode of ARM assembler code

ADR r0, THUMB+1

위에서 THUMB+1을 한 이유는
THUMB Mode와 ARM  Mode는 어짜피 2Byte와 4Byte이기 때문에 모든 주소가 짝수 값이다.
따라서, Branch할 때 THUMB와 ARM Mode를 구분하기 위해서 Branch하려는 주소가 홀수면 THUMB Mode, 짝수면 ARM Mode로 구분한다.

하지만, 실제로 실행 할때는 주소값에서 1을 뺀 짝수 값에서 실행을 하게 된다.
예를 들어, 0x1001로 Branch 했다면, 0x1000에서 THUMB Mode로 수행 하게 된다.
CPSR의 ARM/Thumb bit만 Thumb으로 설정한다.

2010년 8월 18일 수요일

iPad with iPhone

TangoRemote, TouchRummy, Scrabble, iBrainstorm, Camera A B, Transfer

2010년 8월 10일 화요일

MOVE-ON Suitcase Collection by AGENT.

MOVE-ON Suitcase Collection by AGENT. from AGENT. on Vimeo.

Nokia Kinetic

Jeremy innes-hopkins 가 디자인한 제품

전화가 오면 자동으로 핸드폰이 일어난다.
신기한 핸드폰이군.(http://www.jeremyinneshopkins.com/index.php?/product/nokia)

BMW supports iPod Out by Apple

Sony RayModeler, a 360-Degree Autostereoscopic Display Prototype

Augmented hyper reality

Augmented (hyper)Reality: Domestic Robocop from Keiichi Matsuda on Vimeo.

.PHONY of MAKEFILE

본 문서는 Makefile의 PHONY에 대해서 간단히 설명한다.

.PHONY는 가짜 타겟으로 실제 target file을 만들어 내지 않는다는 의미이다.
단, 주의할 점은 .PHONY target은 절대 다른 target의 재료로 들어가서는 안된다.

A SUFFIX rule of MAKEFILE

본 문서는 Makefile의 SUFFIX rule에 대해서 간단히 기술 한다.

1. 개요
 - SUFFIX rule은 특정 확장자 이름의 소스 파일들과 또 다른 특정 확장자 이름의 결과 파일들 전체를 %기호로 대치 하는 것이다.

2. 특정 파일들을 컴파일 하기

===========================================================================
TARGET=spaghetti.bin
ELF_TARGET=spaghetti.elf
BINTOOL=fromelf
CC=tcc

$(TARGET): $(ELF_TARGET)
$(BINTOOL) -bin -o $@ $^

$(ELF_TARGET): spaghetti.o manipulation.o
$(CC) -o $@ $^

%o: %c                                        --------------> ①
$(CC) -c $@ $<                            --------------> ②
===========================================================================

*.c 파일들을 $(CC) == tcc 를 통해서 *.o 파일로 만들라는 명령
① %o : *.o 파일들, %c: *.c 파일들
② 주의점은 SUFFIX rule에서는 재료는 " $^ " 대신에 " $< "을 쓴다는 것이다.

3. 한 디렉토리의 모든 파일을 컴파일 하기
- Makefile은 한 디렉토리의 컴파일 되어야 하는 파일이 전부 *.c 파일이라면 아래와 같은 방법으로 소스 파일들을 특정 변수에 전부 넣은 후, 오브젝트 파일들을 소스파일에서 .c 만을 .o로 변경하여 특정변수에 넣어 작업 할 수 있도록 해준다.

SRC = $(wildcard *.c)
OBJECT = $(SRC:.c=.o)


 

2010년 8월 6일 금요일

Linker Rule

본 글은 Global Symbol들이 같은 이름으로 여러군데에 선어되어 있는 경우 컴파일러가 만든 2가지 타입에 의해 Linker가 어떤 선택을 하게 되는지에 대한 글입니다.
 
Glossary
Global Symbol: 여기서 이야기 하는 Global Symbol에서 Symbol의 의미는 컴파일러가 절대적 주소를 알고 있는 변수 또는 함수를 의미 한다. 따라서, 함수나 글로벌 변수 등이 이에 해당 될 수 있다.
 
Compiler에게는 2가지 타입의 Global Symbol이 있음
  1. Strong Type Global Symbol
    •  Functions, Initialized Global Variables는 Strong Type으로 분류
  2. Weak Type Global Symbol
    •  Uninitialized Global Variables는 Weak Type으로 분류

Linker의 선택 Rule
  1. 여러개의 Strong Symbol은 말이 되지 않는다.
    • link error를 발생시킨다.
    • 즉, 같은 이름의 function이 여러군데 정의 되어 있거나, 같은 이름의 전역 변수가 초기화 되어 선언되어 있는 경우다.
  2. 하나의 Strong Symbol과 여러 개의 Weak Symbol이 있다면, Strong Symbol을 선택한다.
  3. 여러 개의 Weak Symbol이 있다면, 아무거나 하나 골라서 선택 한다.

A meaning of static

  • 전역 변수에 사용
    •  전역 변수의 앞에 static을 사용하면, 현재 파일에서만 해당 전역 변수를 사용할 수가 있다.
    •  즉, 다른 파일에서는 해당 전역 변수를 사용할 수 없다(보이지 않는다).
  • LOCAL 변수에 사용
    •  현재 파일 안에서 함수나 {}가 끝나더라도 해당 값을 유지 하고 있다.

A meaning of the each section in ELF format

  • .data
    •  RW가 가능한 Symbol들
    •  즉, 초기화가 되어 있는 전역 변수들이 들어
  • .bss(Block Started by Symbol)
    •  ZI인 전역 변수들
    •  즉, 초기화 되지 않은 전역 변수이나 0으로 초기화 된 전역 변수
    • Block Started by Symbol로 이름이 정해 진 이유는 bss영역에 들어가는 Zero Initialized 변수들은 ROM영역에 실제로 잡히지 않고, "$$" 심볼로 시작과 끝만 알려주고 말기 때문에 이러한 이름이 붙었다.
  • .constdata
    •  const로 선언된 전역 변
  • .text
    •  실제 함수의 code