본문 바로가기

2011/05

LDD_Part 3-3. ADC 디바이스 드라이버 ADC (Analog to Digital Conversion) 디바이스 드라이버는 아날로그신호를 디지털 신호로 바꿔준다. 디바이스 드라이버를 짤때는 항상 봐야 하는 것이 Datasheet 와 Manual 이다. 지금 프로젝트 시에 사용한 s3c2440 soc 칩을 기준으로 어떻게 해결해 나갔는지 정리해보자. s3c2440는 Datasheet를 열어보면 Figure 16 에 ADC&Touch Screen Interface라는 제목으로 ADC에 대한 내용을 다루고 있다. 제목을 보면 알겠듯이 ADC와 Touch Screen 을 같이 사용하고 있음을 볼 수 있다. mini2440보드는 ADC를 쓰기위해서 사용되는 레지스터가 총 6개이다. ADCCON - ADC control register ADCTSC - A.. 더보기
LDD_Part 3-2. SPI 디바이스 드라이버 SPI드라이버는 이번 프로젝트에서 RF통신시에 사용할 디바이스 드라이버 이다. SPI디바이스 드라이버를 알기위해서 맨처음에는 어떻게 해야 할지 감을 잡지 못했다. Part1,2 에서 설명한 디바이스 드라이버에 대한 공부 내용으로 조금씩 감을 잡아가던중.. 아래의 사이트에서 SPI디바이스 드라이버를 사용할 수 있는 해결책을 주었다. 우선 우리가 SPI디바이스 드라이버를 사용할때는 빈트인 시킨 후에 사용 할 것이다. 빌트인이라 한다면 커널이미지 안에 디바이스 드라이버를 박아 놓겠다는 것!!! 그러므로 우리는 다시 kernel 이미지를 " make " 해야 한다... 지금 우리는 kernel 이미지를 만들때 config_mini2440_x35 configuration 파일을 .config 파일로 Copy시킨후.. 더보기
LDD_Part 3-1. GPIO 디바이스 드라이버 이번 프로젝트에서 ir 수/발광부를 이용해서 데이터를 입/출력 해야 한다. 이때 입/출력 하는 것은 gpio를 사용한 mini2440_leds.c 파일을 사용해서 출력의 기본으로 잡고, mini2440_buttons.c 파일을 사용해서 입력의 기본으로 잡아서 모듈을 만들 것이다. mini2440_leds.c 파일과 mini2440_buttons.c 파일에 주석을 달아서 올려놓았다. mini2440_buttons.c 파일의 경우에는 poll함수를 구현하고 있다. 이를 위해서는 함께 올려 놓은 " mini2440_buttons]poll 이해.doc " 문서와 함께 보면 이해가 보다 손쉬울 것이다. 위의 파일에서 leds의 경우에는 기본적인 모듈 디바이스 드라이버를 만들기 때문에 어렵지 않게 읽어 나갈 수 있.. 더보기
LDD_Part 3. 프로젝트와 디바이스 드라이버 이번 Part에서는 우리가 이번 프로젝트에서 사용할 디바이스 드라이버를 보다 자세히 들여다 볼 것이다. 이 파트를 마치고나면 모두들 우리가 가지고 있는 보드에 원하는 디바이스 드라이버를 짤 수 있으시길 바랍니다. 우선 이번 프로젝트에서 우리가 사용하게될 H/W와 디바이스 드라이버를 짝지어 보았다. ir모듈 rf모듈 3축 가속도 모듈 GPIO 드라이버 SPI 드라이버 ADC 드라이버 위의 내용을 보면 아주 간단함을 알 수 있을 것이다. 그렇다 별거 없다~ ㅋㅋ; 이제 슬슬 시작을 해 봅시다. 우선우리가 사용해야 할 핀의 주소값들은 메뉴얼과 Data Sheet에 잘 설명되어 있다. (메뉴얼과 Data Sheet는 보드와 함께 동봉되서 온 CD에 들어있다. ) Data Sheet를 열어서 목차를 살펴보면 Ch.. 더보기
LDD_Part 2. 디바이스 드라이버 도우미 이 파트는 병주형이 맡아서 정리해 주었다. Part 이름은 디바이스 드라이버 도우미라고 했으나... 정확히 말하자면 커널 기능들이다. 커널에서 지원해주는 기능들로서 그 종류에는 Linked List, Hash List, Kernel Thread, Thread helper, Work Queue, Notifier Chains등.... 이 있다. 글이 있는 주소 링크 : http://ex347.tistory.com/entry/%EC%BB%A4%EB%84%90-%EA%B8%B0%EB%8A%A5-%EC%A0%95%EB%A6%AC gpio를 사용해서 ir 드라이버를 만들때 쓰일 kernel thread와 kernel timer를 정리했던 것도 같이 올리겠다. 더보기
vim 설정 /etc/vimrc 파일의 맨 끝에 다음과 같은 설정값을 넣어주면 된다. syntax on "언어에 따른 자동 문법, 구문 강조 기능 사용 filetype on "파일의 종류를 자동으로 인식 colorscheme torte "색상 테마 변경 ==> 이건 파스텔이라서 기분에 따라 쓰거나 안쓰거나함. set nocp "오리지널 VI와의 호환성을 없애고, VIM 만의 기능들을 쓸 수 있게 함. (compatible) set ru "화면 우측 하단에 현재 커서의 위치(줄, 칸)를 표시 (ruler) set sc "완성 중인 명령을 표시 set nu "라인 번호를 표시 set vb "키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍임 (visualbell) set hls "검색어 강조 기능 사용 (hlsearch) .. 더보기
5/11 http://members.cox.net/ebrombaugh1/embedded/mini2440/index.html 위의 사이트의 방버버 대로 spi가 제대로 동작하는지 확인해 봤다. 그러기위해서 우선 위의 사이트에서 4.configure and compile the kernel for your hardware 에 있는 config_mini2440_t35_gpio_spi.zip 파일을 받았다. 압축을 풀면 config_mini2440_t35_gpio_spi 파일이 나오고 그 파일과 원래 리눅스 소스코으 최 상단에 있는 config_mini2440_t35 파일과 # diff config_mini2440_t35 config_mini2440_t35_gpio_spi > diff_config_t35 명령으로 두 c.. 더보기
spi 보던 사이트 http://junho85.springnote.com/pages/6088695 http://panicking.kicks-ass.org/blog/index.php?m=11&y=08&entry=entry081124-171211 http://www.linuxforums.org/forum/kernel/143805-linux-2-6-29-port-spi-driver-s3c2440.html http://blog.naver.com/PostView.nhn?blogId=ondal71&logNo=120022040830 http://blog.163.com/jammy_lee/blog/static/101195478201016112945395/ http://friendlyarm.net/forum/topic/2456 http://.. 더보기
LDD_Part 1. 디바이스 드라이버의 이해 ※ 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)이다. (디바이스 드라이버는 다바이스를 file로 보.. 더보기
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.. 더보기
크로스컴파일(Cross Compile) 환경 구축 크로스 컴파일 환경을 구축하는 방법은 아주 간단하다. 1. 크로스 컴파일러파일을 구한다. 2. 원하는 위치에 압축을 푼다. 3. ~/.bashrc 에 경로를 추가 시켜준다. 4. ~/.bashrc 를 적용시켜준다. 이제 자세히 그 방법을 짚어보도록 하자. 1. 컴파일러 파일을 다운받자. http://www.friendlyarm.net/downloads 위의 사이트에서 SoftWare에 linux에 ARM-Linux GCC 4.4.3 / 4.3.2 를 다운 받는다. 그러면 arm-linux-gcc-4.4.3.tgz 파일이 받아진다. 2. 원하는 위치에 압축을 푼다. cp 명령을 이용해서 arm-linux-gcc-4.4.3.tgz 파일을 원하는 디렉토리로 옮긴다. # tar zxvf arm-linux-gcc.. 더보기
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 에서 빠르게 처리~! 오.. 더보기