본문 바로가기
[Developer]/Android

Linux4Android 3rd Morning

by 해피빈이 2010. 11. 10.

 

 Kernel tuning

  1. linux-2.6/Documentation/kernel-parameters.txt
  2. /proc/sys/kernel/*
    /sysctl/....vm, net
  3. 커널패치=> kernel.org/pub/libux/kernel/people/*
                   mingo....                           mcp
  4. 소스 수정(좀 안다면..)
    동기화, 커널 내부구조

 

 

kernel.org 에 있는 파일을 수정하면 안된다. 이것을 수정한다고해서 절대로 성능이 좋아지지 않는다.

리누스토발즈는 안정성을 가장 우선으로 따지고 이끌어가고 있다.

 

ftp.redhat.com -> ..... /RHEL/linux-kernel-2.6.....src와 rpm이 있다.

 

cat /proc/sys/kernel/modprobe를 해보면, /sbin/modprobe가 이 안에 들어있는 것을 볼 수 있다.

 

ARM EABI - 활성화 되어있으면 물리적으로 커널에는 float pointing 연산이 되지 않으나, 이것을 가능하게 한다. 멀티미디어에서는 실수연산이 필요하기 때문에 이 기능을 켜면 좋다.

udev는 User Device File System - device driver - 이라는 뜻이다. 이것은 커널과 통신시 netlink를 사용한다.

Networking 세팅때에는 TCP/IP는 꼭 들어가야 한다.

 

netfilter.org를 참고하자.

iptables를 쓰면 쓸데없는 패킷은 필터링시킬 수 있다.

 

  1. make menuconfig로 옵션 설정
  2. linux-2.6/.config 옵션 내용이 들어가있다. 이 곳에는 옵션 활성화/비활성화 내용만 들어있다.
  3. 이것을 다 하면 make, make zImage를 한다.

    1. 이렇게 하면 컴파일러 체크, 버전 체크(Makefile안에 버전 정의, include/linux/version.h내용 참조)를 먼저 실행하고
    2. .config를 이용하여 linux-2.6/include/linux/autoconf.h
    3. 컴파일 진행. .config와 autoconf.h, version.h를 읽어서 해당 Makefile과 매치.

 

이렇게 하면 커널 바깥에 대한 설정을 할 수 있는 것이다.

 

arch/arm/KConfig안에 보면....

config ARM (옵션 심볼은 항상 대문자로)

 

.config

CONFIG_MMU=y

CONFIG_GENERIC_HARDIRQ=y

 

이곳에서 Spinlock과 Semaphore는 커널에서 중요한 동기화 기법이다.(둘의 차이는 wait queue의 사용여부이다.)

 

<< 커널 컴파일!>>

  •  zImage 컴파일
    make zImage
    make modules;make modules_install(이것은 embedded 커널 컴파일할땐 쓰지 마라. 잘못되면 PC의 커널을 덮어쓰는 경우가 있다.)
  • 컴파일된 커널의 위치
    arch/arm/boot/ 디렉토리에 위치한다.

    arch/arm/boot/compressed/ 이 밑의 파일을 봐야 한다.

    arch/arm/boot/Makefile에 추가해 놓으면 tftpboot로 복사를 자동으로 할 수 있으니 편하다.

    -> cp -f arch/arm/boot/zImage /tftpboot

 

- mach-s5pc100 수정해보자.

 

  • 출력이 잘 안되면 /kernel 밑에 printk.c파일을 보자.
  • /init 밑에 가서 main.c파일을 확인하자. do_mounts.c파일도.
  • /lib 아래에서는 kobject.c가 중요하다. device model에서 중요하게 쓰인다. .ko가 만들어지는데 영향을 준다. 이곳에서 손댈일은 별로 없지만, 참고하고 볼 줄은 알아야 한다.
    그리고 이곳에서 kernel_lock.c 파일도 참고하자. 동기화에 관련된 내용이 이 안에 들어있다.
  • /fs에서 device driver를 위해 필요한 것은 block_dev.c, char_dev.c 파일이다. 이유는 filesystem 밑에 driver가 있기 때문이다.
  • char_device_struct 구조체를 기억하자.
  • /net
    uc-os2에 lwip, uIp를 올려서 사용한다. TCP/IP의 축소판.
  • /arch/arm/include/asm/param.h에 들어가서 HZ에 대한 define을 수정해야 한다. 100으로 default되어 있다면 1000으로 수정해보자.
  • /kernel/timerconst.pl 파일을 열어보면 최대 HZ에 대한 정의가 되어 있다. 이것을 참고해서 올리면 된다.

 

<<S5PC100 커널의 구조>>

  • arch/arm/plat-s5pc1xx 안을 보자.
  • 커널이 올라가는 메모리의 위치 : arch/arm/mach-s3c2410/Makefile.boot
    Kernel parameter tag를 이용해서 올라간다.
    이 파일은 커널 컴파일시 참조되어 linker에서 linker script를 이용해서 커널 이미지를 만들 때 사용.
  • System.map 파일을 보면 변수나 함수 symbol의 entry(진입점)를 알 수 있다.

 

Networking option에서 kernel level autoconfiguration을 쓰는 이유는 하나이다. NFS사용을 위해서이다.

 

Window쪽 Network device driver가 있을 경우 NDIS Wrapper를 사용하면 Linux에서도 사용할 수 있다.(시간이 부족할 경우)

 

Sound는 alsa-utils, alsa-lib, alsa-sound를 포함시켜야 한다.

 

cat /proc/filesystems 로 내용을 확인해봐야 한다.

 

USB Garget Drivers가 있기 때문에 eclipse같은 곳에 붙을 수 있는 것이다.

 

카메라같은 경우에는 커널에서 지원하는 센서를 쓰면 쉽게 잡을 수 있다.(원래는 좀 어렵다.)

 

리눅스에서 메모리관리하는 기법이 하나는 paging이고 다른하나는 slab이다.

MODULE_LICENSE("GPL");이 없으면 나중에 kernel이 오염되어 있다고 오해를 할 수 있다.

리눅스는 socket을 열 수 있는 갯수는 파일을 열 수 있는 갯수와 동일하다.(커널에서 결정할 수 있다.)

 

<<커널의 이미지 구조>>

head.S | [arch.S] | misc.c | (head.S) piggy.gz

   ↘arch/arm/boot/compressed    ↘arch/arm/kernel/head.S

firmware              |    OS

이 것을 통들어서 zImage에 들어간다.

결국 head.S는 초기화의 기능한다.

또한 misc.c는 압축해제의 기능을 한다.

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

반응형

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

Linux4Android 4th Morning  (0) 2010.11.11
Linux4Android 3rd Afternoon  (0) 2010.11.10
Linux4Android 2nd Afternoon  (0) 2010.11.10
Linux4Android 2nd Morning  (0) 2010.11.09
Linux4Android 1st Afternoon  (0) 2010.11.09

댓글