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
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151111 엄민웅 업무일지 영상처리 축소 (13) | 2015.11.11 |
---|---|
20151110 안향진 영상처리 대칭, 회전 (9) | 2015.11.11 |
20151109_13번_일일업무일지_박서연_영상처리(패딩, RGB컨트롤,히스토그램평활화) (10) | 2015.11.09 |
평활화 소스 (2) | 2015.11.09 |
LED_DRIVER 소스 파일 (3) | 2015.11.06 |
20151106 출석번호 9번 김태현 비트맵파일 분석 (7) | 2015.11.06 |
디바이스 드라이브 예제 소스파일 (3) | 2015.11.05 |
20151104 2번 강동조[커널 빌드와 디바이스 드라이버] (5) | 2015.11.05 |