목록Device Driver (5)
꾸준히
리눅스 디바이스 모델을 정리하는 글입니다. 리눅스 디바이스 모델 목차 1. 디바이스 모델 구성 2. 플랫폼 디바이스와 드라이버 3. 디바이스 트리 디바이스 모델 구성 디바이스 모델 커널에서는 기본적인 형식 위에 다양한 형태의 하드웨어를 쉽게 다룰 수 있도록, 디바이스 드라이버의 구성을 체계화 했다. 즉, 처리 방식을 통합하기 위함이다. 위 디바이스 모델에 따라, HW(위 그림에서 keypad)를 등록하기 위해서, bus, device, class, driver를 등록해야 한다. 가상 버스 생성 후 driver를 등록하는 순서는 아래와 같다. 가상 버스를 등록 가상버스를 디바이스로 등록 위 디바이스 타입을 사용하여 driver를 등록 클래스를 등록 참고로 디바이스 드라이버 연결 관계를 출력하기 위해 sys..
리눅스 가상 메모리의 개념과 가상메모리가 물리 메모리로 변환되는 과정을 설명하는 글입니다. 리눅스 가상 메모리 목차 1. 가상 메모리란 2. 페이징 기법과 주소 변환의 이해 3. 가상 메모리가 물리 메모리로 변환 되는 과정 위의 목차를 클릭하면 해당 글로 자동 이동 합니다. 가상 메모리란 가상 메모리란 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기의 한계가 있어, 디스크(ROM)의 일부를 확장된 RAM처럼 사용하기 위한 개념이다. 위 말의 의미는 프로세스의 가상 메모리 공간에 있는 페이지들 가운데, 현재 수행에 필요한 부분만 물리 메모리에 적재하여 사용한다는 의미이다. (물리 메모리가 부족해지면 일정 부분의 페이지들을 다시 하드디스크로 이동 시킨다) 가상 메모리 구조 페이징 기법과 주소 ..
디바이스 드라이버에서 변수와 메모리 할당에 관한 내용을 정리하는 글입니다. 디바이스 드라이버에서 변수의 사용, 이식성과 데이터 형, 커널에서의 동적 메모리에 대해 설명합니다. 디바이스 드라이버에서 변수와 메모리 할당 목차 1. 변수의 사용 2. 이식성과 데이터 형 3. 커널에서의 동적 메모리 관리 변수의 사용 디바이스 드라이버는 다중 프로세스 환경에서 동작하기 때문에 프로세스간 변수 사용에 따른 경쟁 문제를 해결하기 위해 가급적 지역 변수를 사용하는 편이 좋다. 하지만 해제되는 시점까지 유지해야 하는 정보라면 전역 변수로 지정해야 한다. 변수 명 사용 시 static을 주로 사용한다. 커널 소스는 방대한 함수와 전역 변수가 있으므로, 이것이 서로 중복되지 않도록 하기 위해 static으로 선언하는 습관을..
캐릭터 디바이스 드라이버를 작성하고, 커널에 모듈로 등록하여 정상적으로 동작되는지 확인하는 과정을 정리한 글입니다. 캐릭터 디바이스 드라이버 API 캐릭터 디바이스 번호 할당/해제 alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name) 디바이스 번호를 동적으로 할당하기 위한 함수 매개 변수 설명 *dev 성공적인 경우 디바이스 번호가 할당 됨 firstminor 디바이스에 할당될 첫 번째 minor number, 일반적으로 0 count 부 번호로 디바이스 개수 *name 디바이스 이름 (/proc/devices와 sysfs에 나타남) unregister_chrdev_region(dev_t first,..
정의 디바이스 드라이버란 디바이스와 응용프로그램 사이에 데이터를 주고 받기 위한 인터페이스이다. 쉽게 말하면 OS에서 디바이스를 인식하게 해주고, 디바이스를 제어할 수 있는 코드를 작성하는 것이다. 여기서 디바이스란 키보드, 마우스, 네트워크 카드 등의 CPU와 연결되어 있는 주변장치를 말한다. 응용 프로그램에서 open(), read(), write(), close() 등 file_operations 구조체에 정의된 함수를 통해 장치 파일에 접근할 때, 호출할 함수를 정의하고 구현해야한다. 사용자는 드라이버 내의 함수에 대해 알 필요가 없다. 디바이스 종류 디바이스는 문자 디바이스, 블록 디바이스, 네트워크 디바이스로 나눌 수 있다. 문자 디바이스는 시간 순으로 들어오는 데이터를 처리한다. 예를 들어 ..