User Tools

Site Tools


android

cross compile tool

armv4t-eabi

Sourcery G++ lite 설치

export PATH=~/apps/toolchains/arm-2009q1/bin:$PATH
  • man alias 설치 ~/.bash_aliases
alias armman="MANPATH=~/apps/toolchains/arm-2009q1/share/doc/arm-arm-none-eabi/man/ man"
  • Makefile에 환경변수 전달
$ make uImage ARCH=arm CROSS_COMPILE=/path/to/toolchain/prefix-

ARM 버젼별 컴파일러 옵션

  • ARMv4 - Little-Endian, Soft-Float
    • Command-line option(s): default
    • Library subdirectory: ./
  • ARMv4 Thumb - Little-Endian, Soft-Float
    • Command-line option(s): -mthumb
    • Library subdirectory: thumb/
  • ARMv7 Thumb-2 - Little-Endian, Soft-Float
    • Command-line option(s): -mthumb -march=armv7 -mfix-cortex-m3-ldrd
    • Library subdirectory: thumb2/
  • ARMv6-M Thumb - Little-Endian, Soft-Float
    • Command-line option(s): -mthumb -march=armv6-m
    • Library subdirectory: armv6-m/

binutils 설명

참조

  • ar - Create, modify, and extract from archives
  • nm - List symbols from object les
  • objcopy - Copy and translate object les
  • objdump - Display information from object les
  • ranlib - Generate index to archive contents
  • readelf - Display the contents of ELF format les.
  • size List - le section sizes and total size
  • strings - List printable strings from les
  • strip - Discard symbols
  • c++filt - Demangle encoded C++ symbols (on MS-DOS, this program is named cxxfilt)
  • addr2line - Convert addresses into le names and line numbers

컴파일시 define 되었나 알아보기

<noth> suapapa_m12, gcc -DNOTH -dM -E hello.c | grep NOTH
<noth> #define NOTH 1

target boards

minimal requierment for android

  • 32MB RAM
  • 32MN Flash Memory
  • 200MHz Online Processor

rebis

기타 판매중인 보드들

  • ARMv5 S3C2440 LCD포함 40만원 미만
  • ARMv6 S3C6410 LCD포함 100만원 미만

uboot

기존 u-boot는 gcc version 4.3.3 (Sourcery G++ Lite 2009q1-161) 에서 컴파일 에러. 아래 패치를 적용하여 코드 수정

$ tar xvzf mds-u-boot.tar.gz
...
$ cd mds-u-boot-rebis
$ patch -p1 < ../u-boot_compile_with_sourcery_g++.patch 
patching file Makefile
patching file common/cmd_nand_s3c2440a.c
patching file cpu/arm920t/config.mk
patching file net/net.c
patching file net/tftp.c

nand 부팅 빌드

$ make distclean
...
$ make clean
...
$ make rebis_atm322a_config
...
$ CROSS_COMPILE=arm-none-eabi- make
...

빌드 결과물 확인

$ ls u-boot*
u-boot  u-boot.bin  u-boot.map  u-boot.srec
$ file u-boot
u-boot: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
$ arm-none-eabi-readelf -h u-boot |grep Flags
  Flags:                             0x5000002, has entry point, Version5 EABI

tftp로 커널바이너리와 ramdisk 밀어넣기

REBIS# set ethaddr 12:34:56:65:43:21 MAC address
REBIS# set serverip 192.168.1.1 Host IP address
REBIS# set ipaddr 192.168.1.2 Target IP address
REBIS# t 30800000 ramdisk-8.gz ramdisk download
REBIS# t 32000000 zImage kernel download
REBIS# go 32000000 start
REBIS# nandw 0 200000 32000000 kernel Fusing
REBIS# nandw 100 340000 30800000 ramdisk Fusing
REBIS# set bootcmd nandr 0 200000 32000000\; nandr 100 340000 30800000\;g 32000000

kernel

make uImage ARCH=arm CROSS_COMPILE=…

trouble shooting

SEGMENT_SIZE 디파인 되어있지 않다고 에러 뿜을때

// NOSTDINC_FLAGS에 -Dlinux 추가...
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) -Dlinux
CHECKFLAGS     += $(NOSTDINC_FLAGS) 

T32 cmm

$ find ./ -name *.cmm
./Document/Emulator/TRACE32/flash/rebis_flash_atmel.cmm
./Document/Emulator/TRACE32/terminal.cmm
./Document/Emulator/TRACE32/rebis_init.cmm
./Document/Emulator/TRACE32/linux/start_linux.cmm
./Document/Emulator/TRACE32/linux/rebis_INIT.cmm
./Document/Emulator/TRACE32/win.cmm

references

소스 다운로드

소스저장소

플랫폼 다운로드

mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync

tricks

android.txt · Last modified: 2013/08/03 05:04 (external edit)