Android Kernel Moduel

Android Kernel Moduel

Kconfig

  • Tree 구조로 된 configuration option들의 집합이며 모든 menu entry들은 자신만의 종속성을 가지고 있다.
    • child entry는 parent entry가 보기 가능할 때만 보여진다. → 종속성
  • Menu entry들은 config option을 정의하고 있다.
  • Menu attribute
    • 모든 config option은 type을 가져야함
    • 두가지 기본 타입이 존재
      • tristate : <*> <M>(모듈, 동적할당) < >
      • bool : [*] [ ]
    • 다른 타입은 위의 두 가지 타입에 기반함
    • 사용자에 의해서 새로운 값이 설정되지 않으면 default value가 config option에 설정된다.

3가지 선택

  • 선택, 모듈, 선택하지 않음
  • 사용하지 않는 기능을 ‘Y’로 선택하면 이미지 크기가 너무 커짐
  • 필요한 기능을 ‘N’으로 선택하면 kernel이 정상동작 하지 않음

    선택, 모듈, 선택의 경우

새로운 module 추가

  • 새로운 module을 추가하기 위해서는 Makefile, Kconfig를 수정해야 한다.

Makefile 수정

kernel/drivers/char/Makefile

  • Makefile에서는 Kconfig에 정의된 이름으로 obj-$(CONFIG_**) += 오브젝트파일.o 형식으로 추가한다.

Kconfig 수정

kernel/drivers/char/Kconfig

  • Kconfig 파일에서는 config 모듈이름 형식으로 추가한다.
  • 최소 조건은 bool 또는 tristate 인지 정의하는 것이다.
  • 그외 설명, 종속성, dafault 값등을 설정한다.(옵션)
  • 해당 파일에 추가되면 make menuconfig 메뉴에서 해당 메뉴가 보이게 된다.
  • 모듈을 추가, 제거등 설장하고 싶으면 make menuconfig에 가서 설정한다.

동적 module

  • 실행 중에 동적으로 코드를 삽입, 제거하는 module(*.ko)기능을 지원
    • 기본 기능은 kernel image(zImage)에 담고 선택하는 것
    • 드라비어는 별도의 module로 작성하여 필요할 때 마다 사용하는 것이 가능

모듈 사용 명령

  • insmod 모듈명.ko

    • 시스템에 모듈을 추가
  • rmmod 모듈명

    • 시스템에서 모듈을 제거
  • lsmod

    • 현재 등록된 모듈을 확인

      Enable loadable module support

  • make menuconfig에 아래와 같은 설정이 존재

    make menuconfig

  • Enable loadable module support 메뉴 안에을 들어가면 아래와 같은 메뉴 존재
    Enable loadable module support

  • Enable loadable module support

    • Kernel의 module 기능을 쓸 수 있게 한다.
  • Module unloading

    • Kernel에 로딩된 module을 삭제할 수 있도록 한다.
  • Forced module unloading

    • Kernel이 module에 포함된 기능을 쓰고 있더라도 강제로 module을 지울 수 있도록 한다.
  • module versioning support

    • 다른 버전의 kernel에서 만들어진 module이나 kernel과 함께 배포되지 않은 특별한 module을 사용할 수 있게 한다.
공유하기