본문 바로가기

Embedded

linux/Documentation/driver-model/driver struct(구조) =========== struct device_driver { char*name; struct bus_type*bus; struct completionunloaded; stcurt kobjectkobj; list_tdevices; struct module*owner; int(*probe)(struct device *dev); int(*remove)(struct device *dev); int(*suspend)(struct device *dev, pm_message_t state); int(*resume)(struct device *dev); }; Allocation(할당) =============== device driver는 정적으로 구조(structures)를 할당(allocate.. 더보기
udev ==========The README file(in linux/hotplug/udev.git)========== 1 udev - Linux userspace device management 2 3 Integrating udev in the system has complex dependencies and may differ from 4 distribution to distribution. A system may not be able to boot up or work 5 reliably without a properly installed udev version. The upstream udev project 6 does not recommend replacing a distro's udev installat.. 더보기
Device Driver] 인터럽트_Interrupt ※.인터럽트 처리 IRQ(Interrupt Request)번호를 부여하려 인터럽트를 관리한다. 프로세스가 IRQ에서 인터럽트가 생성된 사실을 감지하면 하던 일을 중지하고,인터럽트 문맥에서 ISR(Interrupt Service Routine)을 호출한다. (ISR은 H/W와 직접 대화하는 중요한 코드이다.) 인터럽트는 다른 작업을 중지시키면서 실행되는 우선시되는 작업인 만큼 그에 합당하는 제한이 따른다. ㅡ.인터럽트 문맥에서 잠드는 코드는 불가능! (임계영역을 보호하려고 뮤텍스를 사용할 수 없다.) ㅡ.사용자 영역과 직접 자료를 교환하지 못한다.(프로세스 문맥으로 사용자 영역과 연결되어 있음) ㅡ.다른 작업을 방해하지 않도록 빠르고 완벽한 작업을 처리해야 한다. (Top Half 에서 빠르게 처리~! 오.. 더보기
Kernel Timer 사용하기 ※.Kernel Timer를 사용하고자 하는 이유! 본 프로젝트에서 ir통신을 하기 위함이다. ir은 적외선을 이용한 통신 방법이다. 수광부와 발광부가 있어서 수광부에서 쏘는 적외선을 발광부에서 인지하는 것이다. ir통신에서 수광부의 깜빡임을 발광부에서 인지해야 한다. 그러려면 디바이스 드라이버에서는 신뢰성이 있는 깜빡는 신호를 보내줄 수 있어야 하고, 수광부에서는 그 값을 신뢰성있게 읽어 줘야 한다. 이때 신뢰성을 지키는 것으로 kernel timer를 사용하는 것이다!!! 커널 타이머는 하드웨어 상태를 주기적으로 감시하거나 정해진 시간을 초과하면 특정 함수를 수행하도록 할 때 쓰이게 되며 타이머 인터럽트를 통해 구현된다. ※.Kernel Timer 사용법 kernel timer를 사용하기 위해서는 헤.. 더보기
Device Driver] Kernel Facilities Kernel Facilities 는 드라이버 개발자의 toolbox안의 유용한 components이다. 우리가 알아볼 Kernel Facilities는 Kernel Thread , Helper Interfaces 이다. Helper Interfaces 에서는 연결리스트(Linked list), 해시리스트(Hash list), 작업큐(Work Queues), Notifier Chains, Completion Interface, Kthread Helpers, Error Handling Aids 를 살펴보자. ◎.Kernel Thread 커널 스레드는 쉽게 커널에 존재하는 스레드라 생각하자. 유저스레드와의 차이라고 한다면 커널공간에 존재하고, 커널 함수와 커널 자료구조에 접근할 수 있다는 것이다. 그리고 대개.. 더보기
Device Driver] 커널 메시지 출력 hello.ko 모듈을 올렸을때 Hello Wolrd가 나오지 않았을 수 있다. 그 이유를 알아보자 우선 이를 알기 위해서 printk() 함수에 대해서 알아야 할 것이다. 우리가 이때까지 응용프로그램에서 짜던 printf와는 다른 printk 이다. ※ printk() 커널 함수에서 사용되는 출력 함수이다. printk와의 차이는 메시지 기록 관리를 위한 로그 레벨을 지정할 수 있다는 것이다. 로그 레벨 의미 "" == KERN_EMERG 시스템이 동작하지 않는다. "" == KERN_ALERL 항상 출력된다. "" == KERN_CRIT 치명적인 정보 "" == KERN_ERR 오류 정보 "" == KERN_WARNING 경고 정보 "" == KERN_NOTICE 정상적인 정보 "" == KERN_I.. 더보기
Device Driver] Hello World 모듈 컴파일 Hello World 모듈을 만들어보자. 프로그래밍을 함에 있어서 맨 처음으로 작성하는 코드는 항상 Hello World일 것이다. 우리는 모듈로 이 Hello World를 만나보자!! ^───^,, 우리는 hello.c와 Makefile을 작성하고 # make 명령으로 hello.ko 파일을 내고자 한다. hello.ko 파일이 삽입될 모듈이다. 천천히 소스코드와 그 내용을 살펴보자. hello.c #include #include #include MODULE_LICENSE("GPL"); int module_start() { printk ("Hello World!! \n"); return 0; } void module_end() { printk ("Goodbye World!! \n"); } module_.. 더보기
Device Driver] 모듈 프로그래밍 ※ 모듈의 구현 원리 커널 라이브러리를 객체(.ko)형태로 만들어 시스템콜을 통해 커널에 적재 요청하고, 그 요청에 따라 커널은 해당 객체를 커널에 동적으로 링크하여 사용한다. 이를 구현하기 우해 커널에 심볼 테이블 기능이 추가 됐다. /proc/ksyms 는 v2.4 의 kernel 소스에서 커널 심볼 테이블이고, v2.6 kernel에서는 /proc/kallsyms 로 바뀌었다. ※ 모듈 유틸리티 ㅡ.# insmod .ko 커널에 모듈 추가 ㅡ.# rmmod 커널에서 모듈 제거 ㅡ.# lsmod 현재 등록된 모듈을 확인 /proc/modules 파일을 읽어서 모듈 정보를 얻는다. ㅡ.# modprobe 모듈의 의존성 검사 및 추가, 삭제(-r) ㅡ.# depmod 모듈의 의존성 검사 및 의존성 업데이.. 더보기
Device Driver] 디바이스 드라이버 만드는 법 디바이스 드라이버를 작성하려는데 감이 오질 않을 것이다. 어떻게 작성하는지 들어가기 전에 우선 작성 단계를 짚어보자. ※ 새로운 디바이스 드라이버 작성 단계 ㅡ.디바이스 드라이버 커널 인터페이스 구현 (entry point functions, file_operations) ㅡ.디바이스 드라이버 초기화 인터페이스 구현 (주번호 할당 및 디바이스 드라이버 루틴 등록) ㅡ.디바이스 드라이버 하드웨어 인터페이스 구현 (레지스터 접근) ㅡ.장치 파일 생성 ex) # mknod /dev/mydrv [b|c] major_number minor_number ㅡ.응용 프로그램 작성 ㅡ.커널 컴파일 및 리부팅 위의 디바이스 드라이버 작성단계를 보면 디바이스 드라이버를 만드는데 3계의 단계를 거친다. 그 과정을 좀더 자세히.. 더보기
Device Driver] 시작. ※ Device Driver 란? 커널과 주변 장치간에 데이터를 전달 하는 프로그램이다. 이 Device Driver 는 정의 되어 있는 인터페이스(Interface)로 커널과 연결된다. ※ Linux Device Driver 종류 L.D.D 에는 Character Device Driver Block Device Driver Network Device Driver 가 있다. ※ 어떻게 장치와 커널이 연결 되는가? LINUX에서는 모든것을 파일로 관리한다. 즉, Board에 연결된 장치는 그 장치를 표현하는 하나의 "장치 파일(device file)" 로 관리 된다. 그리고 그 장치 파일을 사용할 수 있도록 함수를 정의 해주는 것이 장치드라이버(Device Driver)이다. (디바이스 드라이버는 다바이스.. 더보기
Pulse-width modulation http://en.wikipedia.org/wiki/Pulse-width_modulation 더보기
Front-side bus http://en.wikipedia.org/wiki/Front-side_bus 더보기
X-Hyper320TKU CPU Board Layout PXA320(CPU) : Central Processing Unit DDR SDRAM NAND Flash PMIC : Power Management ICs 더보기