Embedded

pchero on March 24th, 2008

 출처 : http://blog.naver.com/kingseft?Redirect=Log&logNo=140004281000

Continue reading about register_chrdev

pchero on March 23rd, 2008

 module.h 에는 임베디드 프로그램을 만드는데 유용한 매크로들이 포함되어 있다.  여기에 그 내용을 싣는다.(커널 버전은 2.4.19) /* * Dynamic loading of modules into the kernel. * * Rewritten by Richard Henderson <rth@tamu.edu> Dec 1996 */ #ifndef _LINUX_MODULE_H#define _LINUX_MODULE_H #include <linux/config.h>#include <linux/spinlock.h>#include <linux/list.h> #ifdef __GENKSYMS__#  define _set_ver(sym) sym#  undef  MODVERSIONS#  define MODVERSIONS#else /* ! __GENKSYMS__ */# if !defined(MODVERSIONS) && defined(EXPORT_SYMTAB)#   […]

Continue reading about module.h

pchero on March 23rd, 2008

 errno.h 파일에는 여러가지 에러코드에 대한 정의가 수록되어 있다. 여기에 그 내용을 싣는다. /usr/include/asm-generic/errno.h #ifndef _ASM_GENERIC_ERRNO_H#define _ASM_GENERIC_ERRNO_H #include <asm-generic/errno-base.h> #define    EDEADLK        35    /* Resource deadlock would occur */#define    ENAMETOOLONG    36    /* File name too long */#define    ENOLCK        37    /* No record locks available */#define […]

Continue reading about errno.h 파일 내용

pchero on March 23rd, 2008

 다음과 같은 명령을 이용하여 디바이스 드라이버를 커널에 삽입한다.  $ insmod driver.o  여기서 driver.o는 테스트로 작성된 디바이스 드라이버 파일명이다.  위와 같이 콘솔에서 insmod driver.o 를 실행 시키면 다음과 같은 시스템 콜이 수행되어 드라이버를 커널에 삽입한다.  1. sys_create_module()을 사용하여 디바이스 드라이버를 적재하기 위한 메모리를 할당한다. 2. sys_get_kernel_syms()를 이용하여 driver.o 안에 있는 심볼을 커널에 등록한다. 3. 마지막으로 sys_init_module() 을 사용하여 […]

Continue reading about 디바이스 드라이버의 커널 삽입 과정

pchero on March 23rd, 2008

struct file_operations {    struct module *owner;    // llseek 메소드는 파일에서 현재의 read/write의 위치를 옮기며, 새로운 위치가 (양수)값으로 리턴된다. 에러는 음수값으로 반환된다.    loff_ (*llseek) (struct file *, loff_t, int);    // read 메소드는 디바이스에서 데이터를 가져오기 위해서 사용한다. 여기에 NULL 값을 사용하면 read 시스템 콜은 -EINVAL(“잘못된 매개 변수”)값을 돌려 주며 실패한다. 음수값이 아닌 […]

Continue reading about file_operations 구조체 원형