코스웨어/15년 스마트컨트롤러
20151106 - 11번 남수진 / 라즈베리 파이(디바이스 드라이버를 이용한 GPIO제어), 영상처리(비트맵 이미지 편집)
알 수 없는 사용자
2015. 11. 7. 15:42
728x90
반응형
라즈베리 파이
- LED 디바이스 드라이버를 작성하는 예제 분석(교재 521~544)
1. 모듈 프로그램 smart.c
함수 이름 | app 호출 함수 |
동작 |
smart_init | insmod로 모듈이 커널에 적재될 때 실행, register_chrdev()로 디바이스 드라이버 등록, file_operations 등록 |
|
smart_exit | rmmod로 모듈이 제거될 때 실행, |
|
led_open | open | ioremap으로 gpio레지스터 가상주소를 얻고 gpio23을 출력으로 설정 + gpio23에 연결된 led on_off |
led_release | close | iounmap + gpio 레지스터 원래 값으로 복구 |
led_read | read | gpio23 핀의 값을 읽어온다 |
led_write | write | gpio23 핀의 값을 설정한다 |
led_ioctl | ioctl | 인자로 설정한 동작 수행 |
2. smart.c에서 기존 소스코드 수정
- led_read에서 copy_to_user 추가
- led_write에서 copy_from_user 추가
3. 모듈 적재 후 실행 결과
./led_app 실행 결과
./led_app 실행 후 커널 메시지 확인
영상처리
- 기존의 400*400 비트맵 이미지의 x = 100, y = 100에 줄을 긋는 프로그램
추가 코드
- 기존 코드의 이중 for문 안에 if문 추가
- bmp 파일에 이미지가 상하 반전되어 저장되므로 y=100에 줄을 긋기 위해 iCntY=300일 때 점을 찍어야 한다
실행 결과
- 비트맵 파일의 가로줄 용량은 4의 배수가 되어야 한다
405*400 크기의 비트맵 파일을 위에서 만든 실행파일로 처리한 결과 이미지
- 비트맵 이미지의 가로줄 용량이 4의 배수가 아닐 경우 4의 배수를 맞추기 위해 1~3바이트가 추가된다
- 위에서 사용한 이중 for문 알고리즘은 이 추가되는 바이트를 고려하지 않았기 때문에 처리 결과가 이상하게 된다
비트맵 이미지의 가로 픽셀수에 따른 추가 바이트 계산
728x90