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 |
댓글