본문 바로가기
[Developer]/Android

Linux4Android 2nd Afternoon

by 해피빈이 2010. 11. 10.

 

NFS는 원격에 있는 디렉토리를 내 하나의 특별한 File System처럼 보이도록 mount 시키는 작업을 하기위해 필요한 시스템이다.

 

커널이미지

1) bzImage : PC나 서버용

2) zImage : 일반적으로 Embedded용

3) uImage : universial -> u-boot라는 toos/mkimage 명령으로 만들어지는 이미지이다.

4) Image

5) piggy

 

u-boot는 uImage만 인식한다. uImage는 로딩되면서 압축이 풀린다.

만약에 u-boot에서 zImage를 인식하게 하려면, u-boot에서 일정 수정을 가해야만 한다.

uImage는 bootm의 매개변수를 읽을 수 있다.

 

nfsroot를 이용하면 PC에 있는 특정 이미지를 네트워크화 시켜서 연결하여 타겟에서 PC로 부트이미지를 읽어들여서 부팅이 가능하다.

 

** sudo /etc/init.d/nfs-kernel-server restart

= sudo service nfs-kernel-server restart

같은 말이다.

 

$ sudo mount -t nfs -o nolock localhost:/opt/RootFS-android/ /mnt

 -o nolock : 이 옵션을 하면 lock에 관계없이 mount가 가능하게 한다.

 

$ dhclient : 자동으로 ip를 읽어올 수 있는 명령어

 

리눅스의 directory에는 x퍼미션이 반드시 들어가야 한다. 그래야 안으로 들어갈 수 있다.

 

리눅스 directory

bin : 실행파일

lib : 라이브러리

 

리눅스에서 block은 4kb이다.

 

$ sudo chattr +i aaaa

이렇게 하면 aaaa라는 파일은 root라도 삭제할 수 없다. 지우려면 -i라고 해야한다.

 

mount <-> umount 이다.(이라고 쓰고 unmount라고 읽는다.)

 

<<root file system의 구성>>

/bin은 일반명령어이고, /sbin은 시스템 명령어들이다.

/boot안에 들어가면 커널이 압축된 파일들로 들어있다.

System.map~ : 모든 시스템함수들이 table로 들어있다.

 

/dev, /proc 들은 파일이 없어도 부팅시에 파일이 생성된다.

/tmp에는 socket 파일들이 만들어진다.

/usr에는 일반적인 응용프로그램들이 들어간다.

/sys에는 device 정보들이 들어간다.

/lost+found는 partition에 만들어진다. 이 디렉토리 안에 숫자가 들어가면 그 데이터나 block이 망가진것이라고 보면 된다.

fsck(File System ChecK) 손상된 블럭을 복원시키는 역할을 한다. 이 명령은 반드시 unmount 시켜서 해야한다. mount된 상태에서 실행하면 더 깨지게 된다.

 

VFS -> file_operations 구조체와 연관이 있다.

2.6커널에서는 Buffer Cache가 잔재만 남아있고, Page Cache로 바뀌어있다.

 

Device Drivers 중에 있는 loop는 file을 File System(Block device)처럼 취급을 하기위해 존재하는 것이다.

 

file이라는 명령어를 치면(ex: file /bin/mount) file에 대한 정보가 나온다. 혹시나 무엇으로 압축되었는지 알아볼 수 도 있고... 등등..

strip이라는 명령을 치면 불필요한 정보들(symbol 등)을 전부 잘라준다. 즉, 개발 완료된 프로그램에 대해서 용량을 줄이는데 쓰일 수 있다.

 

Cross toolchains에 포함되어 있는 Binutils!! 이 안에 있는 주요 명령어

as - 어셈블러

ld - 링커

nm - 오브젝트 파일의 심볼을 출력한다.

size - section별로 크기를 출력한다.

gprof - 실제로 실행하지 않고도 실행시간을 측정가능하다.

 

안드로이드 플랫폼 안에 gdb가 내장되어 있어서 원격으로 디버깅이 가능하다.

 

buildroot. gpe - root file system을 만들기 위해 필요함.

ELDK(http://www.denx.de/wiki/DULG/ELDK)

codesourcery 툴체인을 쓰면(삼성제외) 상당히 안정적이다.

ARM EABI란??

컴파일러 버전은 GCC 4.x대를 사용한다.

 

Data의 안정성은 차곡차곡 쌓을 수 있는 NOR에 있기 때문에 국방시스템에서는 NOR를 쓰는 편이다.

일반적으로 NOR 부트모드에서 개발을 하는 편이지만, 양산시에는 NAND Flash로만 사용하는 편이다.

 

Blob을 이용하는 부트로더는 PX계열에서만 쓴다.(USB Network구성)

 

U-Boot - 네트워크를 이용하여 부팅이 가능하다.

 

vi의 옵션 추가

.vimrc에..

set nu

set ai

set smartindent

이렇게 넣으면 좀 더 편하게 vi를 쓸 수 있다.(나름 커스터마이징.ㅋ)

 

 커널으로 들어가자!!!

make config 하면...(물론 그 전에 libncurses5-dev가 설치되어있어야 한다.) 커널 빌드때의 설정을 셋팅할 수 있다.

 

sudo minicom -s

# help

# printenv

# setenv bootcmd tftp c0008000 zImage\;bootm c0008000

# saveenv

# setenv bootargs console=ttySAC1,115200n81 mem=256M root=/dev/mtdblock0 rootfstype=yaffs rw init=/init

# saveenv

이 글은 스프링노트에서 작성되었습니다.

반응형

'[Developer] > Android' 카테고리의 다른 글

Linux4Android 3rd Afternoon  (0) 2010.11.10
Linux4Android 3rd Morning  (0) 2010.11.10
Linux4Android 2nd Morning  (0) 2010.11.09
Linux4Android 1st Afternoon  (0) 2010.11.09
Linux4Android 1st Morning  (0) 2010.11.08

댓글