본문 바로가기

한국으로/임베디드 리눅스25

7.3 문자 드라이버 7.3 문자 드라이버7.3.1 디바이스 번호디바이스 번호는 dev_t 타입으로 표현한다. 예시)typedef __kernel__dev_t dev_t;typedef __u32 __kernel_dev_t;typedef unsigned int __u32; Major 번호디바이스의 주번호. 물리적인 디바이스를 구분하는데 사용된다. Minor 번호디바이스의 부번호. 부번호는 동일한 디바이스가 여러개인 경우, 이들 디바이들을 구분하는 용도로 사용한다. 즉, 같은 종류의 디바이스는 주번호가 동일하고, 부번호는 다르다. 7.3.2 디바이스 번호 할당 및 반납int register_chrdev_region(dev_t from, unsigned count, const char* name);디바이스 번호 고정할당name이란.. 2018. 7. 1.
7.2 모듈 7.2 모듈7.2.1 모듈이란?모듈은 커널 영역에 동적으로 로딩/언로딩되고, 로딩 후에 커널 코드와 동일하게 동작한다.모듈을 사용하면 커널 코드에 직접 코드를 올려서 컴파일하지 않아도 되기 때문에, 커널 이미지가 작아지는 효과가 있다.따라서, 필요할 기능을 때에 따라 모듈로 로드해서 사용하면 편리하다. (동작 속도도 느려지지 않는다) 모듈 명령insmod: 모듈을 로딩한다.rmmod: 모듈을 언로딩한다.lsmod: 현재 로딩된 모듈을 출력한다. 7.2.2 모듈 매크로module_init( function() )모듈로 컴파일하면, insmod 명령 시 (로딩), init_module() 대신 function() 이 호출된다. 여기서 function()은 임의의 함수.커널에 포함하여 컴파일하면, 커널 초기화.. 2018. 7. 1.
7.1 디바이스 드라이버 7.1 디바이스 드라이버7.1.1 디바이스 드라이버 종류문자 디바이스 드라이버GPIO, 시리얼 등 문자 디바이스를 제어한다.open, close, read, write 등의 시스템콜을 이용해 액세스하고, 커널 상위 계층은 바이트 단위로 액세스한다. 블록 디바이스 드라이버HDD, SD 카드 등의 블록 디바이스를 제어한다. (파일시스템 포함)open, close, read, write 등의 시스템콜을 이용해 액세스하고, 커널 상위 계층은 블록 단위로 액세스한다. 네트워크 인터페이스 드라이버이더넷, 무선랜 등 네트워크 디바이스를 제어한다.read, write, recvfrom, sendto 등의 시스템콜을 이용해 액세스하고, 커널 상위 계층은 패킨 단위로 액세스한다. 7.1.2 디바이스 파일 만들기# mkno.. 2018. 7. 1.
5.4 파일시스템 5.4 파일시스템5.4.1 VFS(Virtual File System)VFS는 응용프로그램이 어떤 파일에 접근할 때, 무슨 파일시스템인지, 어디에 저장되어있는지 신경쓰지 않아도 되도록 중간 다리 역할을 한다. super_block파티션을 마운트할 때마다 super_block 객체가 생성된다.파일시스템은 파티션에서 정보를 super_block 객체에 채운다. inode각 파일마다 inode 객체가 생성된다.inode 객체는 파일의 메타데이터를 저장한다. file같은 파일이 열릴 때마다 file 객체가 생성된다.file 객체는 태스크가 사용하는 열린 파일의 정보를 관리한다. dentry파일에 접근할 때 경로에 있는 모든 요소는 dentry 객체에 저장된다.dentry 객체는 inode 객체와 file 객체를.. 2018. 7. 1.