linux kernel study part 17. [2] DATE

Download Report

Transcript linux kernel study part 17. [2] DATE

리눅스 커널 심층 분석 - 17장 -

Lee, Kangmin

장치 유형

• • 크게 세 가지 유형으로 분류 • • • 블록 장치 캐릭터 장치 네트워크 장치 꼭 하드웨어와 접해있는것이 아닌 가상 장치도 존재 • • 커널 난수 생성기 널 장치 2

모듈

• 동적으로 불러 올 수 있는 커널 객체 • 외부의 코드를 삽입, 삭제 가능 3

모듈

• Init 함수는 모듈이 추가될 때 호출됨 • 함수 수행이 성공할 시 0 리턴, 그 외에 값은 실패를 의미 • Exit 함수는 모듈이 제거될 때 호출 • MODULE_LICENSE 매크로는 저작권 정보가 담김 • • GPL을 따르지 않는 모듈일 경우 오염 플래그가 설정 GPL을 따르지 않으면 또한 GPL만을 허용하는 심볼 호출 불가 4

모듈 만들기

• 2.6 커널부터 kbuild 빌드 시스템이 적용되어 쉽게 모듈을 만들 수 있음 • 모듈이 커널 소스 트리에 들어 있는 경우 • • 장치는 /drivers 디렉토리 안에 들어있음 각 디렉토리의 Makefile을 수정하여 사용함 • 모듈이 커널 소스 트리 외부에 들어 있는 경우 • Makefile을 만들고 make시 경로를 추가 5

모듈 만들기

6

모듈 등록

• • • 모듈 설치 • Make modules_install 모듈 의존성 생성 • • 어떤 모듈이 다른 모듈에 의존적일 때 의존성이 생김 depmod 모듈 적재 • • • • Insmod : 의존성이나 오류확인 같은 작업을 거치지 않고 추가 Rmmod : 모듈 제거 Modprobe : 의존성을 고려하여 설치 Modprobe –r : 의존성을 고려하여 모듈 제거 7

설정 옵션 관리

• 디렉토리의 Kconfig 파일에 추가하여 관리 • • Tristate는 삼중 선택 옵션으로 세 가지 선택이 제공 • • • Y : 커널에 포함 M : 모듈로 빌드 N : 빌드하지 않음 depends 옵션으로 의존성 지정 8

모듈 인자

• 모듈에서 사용할 수 있는 인자를 만들 수 있음 • 드라이버 안에서 전역변수로 사용이 가능 • • module_param(name, type, perm); • • • name : 인자의 이름 type : 인자의 자료형 perm : 인자의 권한 값을 지정할 땐 매크로를 사용하기 전에 선언하여 지정함 9

모듈 인자

에 정의 되어있음 10

노출 심볼

• 모듈이 설치되면 모듈은 커널과 동적으로 링크됨 • 동적으로 링크된 코드는 외부용 함수만 호출할 수 있음 • 노출 선언된 함수만 모듈에서 사용 가능 • EXPORT_SYMBOL(), EXPORT_SYMBOL_GPL()로 처리 11

장치 모델

• 장치와 장치간의 관계를 표현하는 단일 체계 • 초기엔 전원 관리 기능을 위해 도입됨 • 모든 장치의 상태를 확인하거나 코드의 중복을 줄이는 등의 여러 장점이 있음 12

Kobject

13

cdev

14

Ktypes & Ksets

15

Kobject의 특징

• Kobject는 특정 ktype에 속함 • Ktype 은 kobject의 기본 속성을 정의 • • 소멸시 동작 Sysfs 처리 동작 • Kobject는 kset으로 표현하는 집합으로 묶여진다 • 서로 연관되어진 kobject 끼리 묶임 16

Sysfs

• 메모리 상에 존재하는 가상 파일시스템 • Kobject의 계층 구조를 보여줌 • 파일을 통해 커널 변수 값을 제공하거나 수정할 수 있음 • 주로 /sys에 마운트 되어 있음 17

Sysfs에 kobject 추가 / 제거

18

Sysfs에 파일 추가

• Attribute 구조체가 커널 데이터를 sysfs 상의 파일과 연결함 19

Sysfs에 파일 읽기/쓰기

• 실제 기록과 열람은 아래의 함수로 이루어짐 20

커널 이벤트 계층

• Kobject를 기반으로 커널에서 사용자에게 알림을 전달하는 시스템 • Kobject의 신호를 sysfs를 통해 이벤트를 발생시킴 • 내부적으로 네트링크를 통해 커널 공간에서 사용자 공간으로 전송 • Kobject_uevent 함수를 통해 이벤트를 사용자에게 보냄 21

결론

• 장치 드라이버의 구현 • 장치 트리를 관리하는 모듈, Kobject, sysfs 소개 22

thanks