리눅스 & 안드로이드2011. 1. 31. 10:42
2011/02/01
어제 저녁, 컴파일러(혹은 어셈블러?)가 -march=armv7-a 옵션을 인식할 수 없다는 에러를 뱉어 냈다.
퇴근하면서 toolchain 버전을 의심 했었는데, 방금 (심지어 업무 시작시간 전!) 확인 해 보니, 예상이 적중!
toolchain arm-eabi v.4.2.1을 사용하고 있었는데, arm-eabi 4.4.0으로 변경하니 해당 부분을 문제 없이 pass! 어제 집에서 희망의 끈이 점점 가늘어져 간다고 생각하고 있었는데, 다시 굵어(?)지게 된건가?-0-



2011/01/31
문제점 #1 해결) warning: choice value used outside its choice group
: 인터넷을 찾아보면 무시하고 넘어가라고 하지만, 찜찜한 마음에 Kconfig 파일을 확인 해 본 결과,
MSM framebuffer 관련 설정들이 froyo에서는 drivers/video/에 있었으나, gingerbread에서는 drivers/staging/에 추가.
물론 dependency에서 상호 exclusive하게 추가되도록 조건이 되어 있는 것 같지만, 어디에 추가되어도 별 문제는 없어보여서, drivers/staging에서 제거.(이렇게 해도 될런지는 확실하지 않음-_-;)
문제점 #2 해결) 문제점 #1과 연관성이 있는지는 잘 모르겠지만, 환경변수에 arm-eabi-* path를 추가하니 해결 됨.

드디어 빌드가 시작되고, 컴파일 경고/에러들을 보여주는것이 이렇게 반가울 수가 없다ㅜ.ㅜ
이제 인고의 시간이 시작되었다!-0-

빌드가 시작되고, warning 두 개 확인하는데 몇 시간이 걸림-_-;

include/config/auto.conf: line 525: KERNEL_LOCAL_VERSION: command not found
: 이 경고는 아무리 찾아봐도 관련된 자료를 찾아볼 수 없었다...
(아마도 uname의 출력으로 버전이 안나오는정도가 아닐까? 라고 스스로 위안을 삼으며 또다시 pass-0-)

warning: "COHERENT_IS_NORMAL" is not defined
: 이 경고는, 아마도 기존 소스에서 kernel patch를 하면서 추가되었던 부분 같은데, kernel update가 되면서 전면적으로 정리된 부분인듯. 기존 memory manager 관련 code를 함부로 수정할 수 없어 define을 적절한(?)위치에 추가.

이제 퇴근시간. 퇴근시간이 되어서야 첫번째 compile error를 확인할 수 있게 되었음ㅜ.ㅜ

error: implicit declaration of function 'dma_cache_maint'
: 이 한 줄이 그렇게 큰 문제를 드러낼 줄이야...-_-; 위 문제점#1에서 해결했던 방법이 적절하지 않은 것 같다.
MSM framebuffer 관련 코드들이 대대적(?)으로 수정된 것 같다. drivers/video/에 있던 코드들을 drivers/staging으로 머지하고, Kconfig에서도 설정을 변경 해 주어야 할듯. 이거 점점 가능성이 희박해 지는 분위기-_-; 다시 머지 합시다!-0-



2011/01/28
빌드를 시작 했으나, menuconfig 부터 벽에 부딪힘.

Android Kernel 빌드 명령어:
1) # make mrproper
2) # make distclean
3) # make *_defconfig ARCH=arm
4) # make ARCH=arm CROSS_COMPILE=arm-eabi-

문제점 #1) 단계 3)에서 계속 수동으로 menuconfig를 진행하는 부분이 나오고, 경고를 보여준다.
warning: choice value used outside its choice group
문제점 #2) 단계 4)에서 CROSS_COMPILE의 실제 경로를 명시 했으나, arm-eabi-* 를 찾을 수 없다는 에러를 보여준다.

만삭의 아내가 집에서 기다리고 있어, 월요일에 확인하기로 결정!-0-



2011/01/27
kernel source merge 완료.
Linux와 Windows 둘 사이의 file system 차이의 큰 특징인 case sensitivity를 간과한 사실을 발견.
Samba를 이용해 Windows에서 BC2(beyond compare 2)를 이용해 비교 및 merge를 했는데, 머지작업 막바지에 이르러 문제가 있을 수 있다는 것을 알게 되었지만 pass.
이상하게 동일한 이름을 갖는 두 개의 파일이 각각 대/소문자로 존재하고, 내용은 다른 경우가 있음.
(kernel/net/netfilter의 몇몇 파일들-0-)



2011/01/24
성공보다는 실패할 확률이 높은 작업을 시작.
진작에 시작 했어야 하는데, 세미나 준비 때문에 약간 딜레이 됨.
일단 커널버전 업데이트를 위해, kernel source merge 부터 시작하기로 결정.
(잘 알지 못해서 좀 무식한 방식으로 진행할 예정 ㅜ.ㅜ)

'리눅스 & 안드로이드' 카테고리의 다른 글

Android Self Q&A (업데이트 중...)  (0) 2011.02.07
Redirect stderr to stdout  (0) 2011.01.31
How to make Android binary images  (1) 2011.01.19
Makefile example for JNI  (0) 2011.01.17
VIM(Vi IMproved) settings  (0) 2011.01.17
Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 19. 11:23
TOOLS=out/host/linux-x86/bin
TARGET=out/target/product/[target device]
 

ramdisk.img
Target: $(TARGET)/ramdisk.img

# $(TOOLS)/mkbootfs $(TARGET)/root | $(TOOLS)/minigzip $(TARGET)/ramdisk.img
 
 
boot.img
Target: $(TARGET)/boot.img
 
# $(TOOLS)/mkbootimg --kernel $(TARGET)/kernel --ramdisk $(TARGET)/ramdisk.img \
   --cmdline "console=ttyMSM2, 115200n8" --base 0x20000000 --pagesize 2048 \
   --output $(TARGET)/boot.img
 
* TODO: --cmdline, --base, --pagesize 옵션은 확인이 필요해 보임;;
 

system.img
Target:
$(TARGET)/obj/PACKAGING/systemimage_unopt_intermediates/system.img
 

# $(TOOLS)/mkyaffs2image -f -s 2048 $(TARGET)/system \
   $(TARGET)/obj/PACKAGING/systemimage_unopt_intermediates/system.img
 
* TODO: -s 옵션은 확인이 필요해 보임;;
 
 

Install: $(TARGET)/system.img
 
# $(TOOLS)/acp -fpt $(TARGET)/obj/PACKAGING/systemimage_unopt_intermediates/system.img \
   $(TARGET)/system.img
# chmod a+r $(TARGET)/system.img
 
 
userdata.img
Target:
$(TARGET)/userdata.img
 
# $(TOOLS)/mkyaffs2image -f -s 2048 $(TARGET)/data $(TARGET)/userdata.img
# chmod a+r $(TARGET)/userdata.img
 
* TODO: -s 옵션은 확인이 필요해 보임;;

'리눅스 & 안드로이드' 카테고리의 다른 글

Redirect stderr to stdout  (0) 2011.01.31
Android Gingerbread Porting 작업일지  (0) 2011.01.31
Makefile example for JNI  (0) 2011.01.17
VIM(Vi IMproved) settings  (0) 2011.01.17
JNI header files path on Mac  (0) 2011.01.17
Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 17. 23:57
CC=g++
JAVA_HOME=/usr/lib/jvm/java-6-openjdk
CFLAGS=-c -I$(JAVA_HOME)/include
LFLAGS=-shared
JAVA_FILES=JniFuncMain.java JniTest.java

all: java lib

java:
@echo
@echo Compiling Java codes: ${JAVA_FILES}
@javac ${JAVA_FILES}
@echo
@echo Generating header file for JNI
@javah JniTest

lib:
@echo
@echo Compiling the native codes
@$(CC) ${CFLAGS} jnifunc.cpp
@echo
@echo Building shared library: libjnifunc.so
@$(CC) ${LFLAGS} -o libjnifunc.so jnifunc.o

clean:
@rm -f *.o
@rm -f *.so
@rm -f *.class

Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 17. 23:52
VIM(Vi IMproved) settings (.vimrc)

set autoindent
set cindent
set smartindent
set shiftwidth=4
set tabstop=4
set number

if has("syntax")
syntax on
endif

set visualbell

Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 17. 23:50
Ubuntu랑 뭐 이렇게 다르냐-_-;

/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks \
/JavaVM.framework/Versions/CurrentJDK/Headers

'리눅스 & 안드로이드' 카테고리의 다른 글

Makefile example for JNI  (0) 2011.01.17
VIM(Vi IMproved) settings  (0) 2011.01.17
Java 실행 시, library path 설정방법  (0) 2011.01.17
Linux에서 shared library 생성방법  (0) 2011.01.17
Android Porting 실습  (0) 2011.01.17
Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 17. 23:45
//1. Linux 환경변수 설정
# export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

또는

//2. java option으로 property 설정
# java -Djava.library.path=. target.class

'리눅스 & 안드로이드' 카테고리의 다른 글

VIM(Vi IMproved) settings  (0) 2011.01.17
JNI header files path on Mac  (0) 2011.01.17
Linux에서 shared library 생성방법  (0) 2011.01.17
Android Porting 실습  (0) 2011.01.17
remount ro filesystem to rw filesystem  (0) 2011.01.17
Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 17. 23:41
// Compile
# gcc -fPIC -c hellojni.c

// Generate shared libray
# gcc -shared -o libhellojni.so hellojni.o

'리눅스 & 안드로이드' 카테고리의 다른 글

VIM(Vi IMproved) settings  (0) 2011.01.17
JNI header files path on Mac  (0) 2011.01.17
Java 실행 시, library path 설정방법  (0) 2011.01.17
Android Porting 실습  (0) 2011.01.17
remount ro filesystem to rw filesystem  (0) 2011.01.17
Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 17. 23:39
Posted by 세월의돌
리눅스 & 안드로이드2011. 1. 17. 23:24
cmd> adb remount (option)
cmd> adb shell
$ su
# mount -o rw,remount /system
# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
또는
mount -o rw,remount -t yaffs2 /dev/block/mtdblock0 /system

'리눅스 & 안드로이드' 카테고리의 다른 글

VIM(Vi IMproved) settings  (0) 2011.01.17
JNI header files path on Mac  (0) 2011.01.17
Java 실행 시, library path 설정방법  (0) 2011.01.17
Linux에서 shared library 생성방법  (0) 2011.01.17
Android Porting 실습  (0) 2011.01.17
Posted by 세월의돌