2016. 06. 02.
- 카메라가 인식 됬을 때 디바이스 파일 생성하도록 만들기 O
- 카메라 연결이 해제되거나 드라이버가 종료되었을 때 디바이스 파일 삭제되도록 만들기 O
2016. 06. 03. ~ ??
- file_operations 만들기
2016. 06. 09.
- uvc_v4l2_try_format 등 함수 분석
2016. 06. 10.
-vidioc_reqbufs 동작 안하는 원인 찾기
==> 해당 함수가 동작하기 위해선 vidioc_g_fmt_vid_cap 함수 혹은
vidioc_g_fmt_vid_cap_mplane 함수가 선언되어 있어야함
2016. 06. 11.
-vidioc_reqbufs 에러 잡기
-> 아무래도 vb2_queue 구조체에 동작에 필요한 값이 대입이 안되있어서 그런 듯
==> 구조체에 값이 없었던 것이 맞음. uvc와 skel 코드를 참고하여 해결
2016. 06. 13.
- 333 TODO 작업 이어서 하기
-> PAGE_ALIGN 값이 0으로 나와서 메모리 할당이 실패되는 현상 잡아야됨
--> R5 <-> DSP CAN 통신 구현
==> 따로 디바이스 드라이버 없이 시리얼 통신으로 동작
2016. 06. 14.
- 333 TODO 작업 이어서 하기
-> PAGE_ALIGN 값이 0으로 나와서 메모리 할당이 실패되는 현상 잡아야됨
2016. 06. 15.
- 333 TODO 작업 이어서 하기
-> coherent DMA mask is unset 이 에러 잡으면 뭔가 진행이 될 듯???
-> 어쩌면 지금 짜는 코드가 DMA용 코드가 아닌데 DMA관련 ....
==> DMA용 코드를 사용해서 에러가 낫었음. vmalloc 코드로 바꾸니 동작
-> VIDIOC_QUERYBUF 코드 만들기
==> 잘 된건지는 모르겟지만 일단 에러 없이 통과
-> mmap 함수 만들기
-> VIDIOC_QBUF 만들기
==> 구동에 필요한 함수들은 다 만들었음
2016. 06. 16.
-> usb, urb 관련 코드 수정하기
-> 다른건 모르겠으나 일단 urb 전송?? 무튼 usb 통신 자체가 제대로 안되는 듯
2016. 06. 17.
-> usb, urb 관련 코드 수정하기
-> 다른건 모르겠으나 일단 urb 전송?? 무튼 usb 통신 자체가 제대로 안되는 듯
==> usb_device_id 구조체 내용 수정을 하면 urb 전송 가능
2016. 06. 18.
-> usb, urb 관련 코드 수정하기
-> 통신은 되는 것 같으나 .. usb_device_id 수정하면 probe가 두번 실행되면서
장치 파일이 두 개 생성되는 문제가 있음 ...
2016. 06. 19.
-> usb, urb 관련 코드 수정하기
==> 어느 정도 통신은 되는 듯????
-> 장치파일 두개 생성 되는거 해결하기
==> usb_submit_urb 함수 리턴 값에 따라 probe 종료 시키는 걸로 해결
2016. 06. 20.
-> Setting Pixel Format: Device or resource busy 오류 해결하기
-> video_usercopy 함수 가져다가 정확하게 어디서 에러 나는 것인지 찾기
==> vfh와 vfd의 prio 비교 함수에서 나는 에러였는데 file->private_data에 v4l2_fh
값을 넘겨줬어야 했음. open에서 처리했어야 하나 querycap 함수에서 넘겨줌
==> 그 외 v4l2_fh 관련 에러 다 잡음
2016. 06. 21.
-> qbuf 함수 리턴 값이 -512인데 원인 찾고 고치기
--> 아마 buffer_prepare랑 buffer_queue 함수 쪽 문제인듯
2016. 06. 22. ~ 23.
-> qbuf 함수 리턴 값이 -512인데 원인 찾고 고치기
--> 아마 buffer_prepare랑 buffer_queue 함수 쪽 문제인듯
==> 놀아서 뭐했는지 기억이 안남.
2016. 06. 24.
-> s_fmt 부터 reqbufs 함수, queue_setup 함수 에러 잡기
==> file->private_data로 전달하는 값 문제
--> 어느 정도 잡은듯 한데 아직 queue_setup쪽 에러 남음
2016. 06. 25.
-> queue_setup 에러 잡기
--> uvc_parse_format 이쪽을 분석해봐야 할듯 ?
--> uvc_probe의 uvc_parse_control함수부터 시작..
-> probe함수 중 set_data 부분이 제대로 안되고 있음(test_20 파일에 TODO표시)
==> 두 개 문제 동시 해결? fmt.sizeimage 값을 get_data의 값으로 대체
-> qbuf 함수 리턴 값이 -512인데 원인 찾고 고치기
2016. 06. 26.
-> qbuf 함수 리턴 값이 -512인데 원인 찾고 고치기
--> 일단 종료 시그널 받기 전까지는 에러는 없으나 계속 wait하고 있는 듯?
--> __vb2_wait_for_done_vb 이 함수를 분석해볼 필요가 있음
2016. 06. 27.
-> qbuf 함수 리턴 값이 -512인데 원인 찾고 고치기
--> 일단 종료 시그널 받기 전까지는 에러는 없으나 계속 wait하고 있는 듯?
--> __vb2_wait_for_done_vb 이 함수를 분석해볼 필요가 있음
==> __vb2_wait_for_done_vb 이 함수에서는 특별히 문제가 있는 것이 아니고 버퍼를 기다리는 상태가 지속되는 것 뿐이었음. 따라서 다른 함수를 분석해야됨
-> uvcvideo 컴파일 해보기
==> "Following the move to linuxtv.org and its mercurial repositories, the uvcvideo
can't be compiled alone anymore." 고로 독립적으로 컴파일 안될듯
-> vb2_streamon 함수에서 호출하는 start_streaming 함수 구현하기
-> 위에꺼 하기 전에 uvcvideo 코드를 내가 작성한 코드 순서와 동일하게 재구성해보기
--> open
--> querycap
-->s_fmt
-->reqbuf
-->queue_setup
-->querybuf
-->mmap
-->qbuf
-->buffer_prepare
-->streamon
--> buffer_queue
-->start_streaming
-->dqbuf
==>uvcvideo 코드를 어느정도 재구성해본 결과 코딩 방향은 어느 정도 맞았으나 ..
코덱 코드를 분석해야하는 상황임
2016. 06. 28.
-> vb2_streamon 함수에서 호출하는 start_streaming 함수 구현하기
--> 초반 몇 개 함수를 구현한다고 했으나 .. altsetting 값이 음수로 에러발생
2016. 06. 29.
-> vb2_streamon 함수에서 호출하는 start_streaming 함수 구현하기
--> header.bEndpointAddress의 값과 동일한 값을 t_struct->bEndpointAddress에 구하는 것까지 성공
-> 다음으로 start_streaming 함수 오류 해결하기
2016. 06. 30.
-> 다음으로 start_streaming 함수 오류 해결하기
--> 현재 uvc_init_video 내용 중 ret = uvc_init_video_isoc 함수 전까지 구현했음...
--> uvc_init_video_isoc 함수의 urb->complete 부분 제외 구현
--> complete부분은 decode 관련 함수들이 구현 되어야 구현 가능
-> uvc_video_init 함수 내에 uvc_video_decode_isoc 이 함수 구현해야됨 ㅠㅠ
--> t_video_decode_isoc라는 이름으로 틀은 만들어 놓음
2016. 07. 01.
-> t_video_decode_isoc 마저 구현하기
-->uvc 코드를 보면 uvc_buffer 구조체가 필요한데 동일한 구조체를 만들어야할 듯
-> 위 함수 구현 끝나면 complete 부분 구현하기
2016. 07. 02.
-> t_video_decode_isoc 마저 구현하기
--> uvc_queue_next_buffer구현하기
2016. 07. 03.
-> t_video_decode_isoc 마저 구현하기
==> uvcvideo 코드에서 거의 이름만 바꿈 ..
-> complete 부분 구현하기
2016. 07. 04.
-> t_video_decode_isoc 함수가 동작하면 OS가 뻗는 현상이 발생
--> t_video_decode_data 이 함수와 t_video_decode_end이 함수 문제인걸로 추측
--> 위 두개 함수는 상관 없음
--> 새로운 후보로 t_buffer_prepare이 함수가 의심됨
2016. 07. 05.
-> t_video_decode_isoc 함수가 동작하면 OS가 뻗는 현상이 발생
--> t_buffer_prepare이 함수의 주석 부분 제대로 구현하기
---> 아마 구현하려면 probe때부터 다 구현해야할듯???
---> container_of 함수 알아보기
=> OK
--> 여전히 OS 다운 현상 발생
==> t_buffer_prepare가 아닌 t_buffer_queue 함수에서 잘 못 코딩
-> uvc 코드와 비슷하게 동작하는 듯한데 정상적인 동작은 안되는 상태.
2016. 07. 06.
-> 비슷하게 동작은 하니까 이제 똑같이 동작하도록 해보기 ...
--> dmesg 상의 메시지는 동일 하나 이후 진행이 안됨
2016. 07. 07.
-> t_uvc와 지속적으로 비교하고 있으나 원하는 포인트를 찾을 수가 없음 ..
--> streamon이라는 함수가 start_streaming을 호출해서 frame complete메시지가
나오는 줄 알았으나 아무래도 해당 메시지는 호출 후 계속 동작하는 걸로
예상되는 complete 함수 때문인듯?
--> 예상해볼 수 있는건 .............. 있나? .. ㅠㅠ
---> 아무래도 thirdydriver_2 사진 처럼 dqbuf 때 계속 waitting만 하고 있는듯?
---> ^C 누르기 전까지 계속 대기하고 있는 듯한데 아무래도 이 부분이 의심됨
---> done_list 쪽 확인..
2016. 07. 08.
-> 진전이 없음.
-> 그동안 애써 무시하고 넘어왔던 스핀락하고 뮤텍스 코드를 추가해보기로 결정
--> 이래도 안되면 .. 안됨.. 허허
-> trace_v4l2_qbuf 라는 함수를 주석을 쳐놨는데 어디에도 존재하지 않음 ..
주석을 해제하면 컴파일이 안됨.
-> trace_v4l2_qbuf 함수 찾아내기 ... 어딨는걸까 ..
--> 아무래도 trace라는 단어가 붙은게 시스템콜 같기도 해서 "SYSCALL_DEFINE"으로
찾아보았으나 안나옴
==> #include <trace/events/v4l2.h> 추가하면 컴파일 가능.. 별 의미 없는 함수였는듯
아 별의미 없는거 맞음. 이 함수는 내 드라이버 코드 부분이 아님.
2016. 07. 09.
-> 처음부터 끝까지 모든 함수 비교해보기.
--> mutex부분 추가 도중 s_fmt 함수가 uvc 함수랑 많이 다르게 작성되어있는 걸 발견
---> s_fmt 부분이 큰 영향을 주는 건지 모르겠음.. 포맷 설정 부분인데.. 흠
2016. 07. 10.
-> queue->irqqueue와 queue->queue 부분 추적 중 t_queue_next_buffer함수와
uvc_queue_next_buffer함수 동작에 차이를 발견
--> 스샷 남겨둠. t_dmesg_*와 uvc_dmesg_*
--> 위 함수 문제가 아닌 t_video_validate_buffer 함수의 if문 내용이
uvc_video_validate_buffer와 달라서 생긴 문제
==> if문 내용 수정으로 해결
=> 해결! 화면 출력 잘됨(test_33)
-> 크기 조절이 안되는 문제가 있는데 이는 아무래도 어제 발견한 s_fmt 부분 문제 인듯
-> 속도가 굉장히 느린데 이거 해결할 수 있을까..
-> 화면 중간중간 하단 부분이 번져보이는 현상도 있음
2016. 07. 11.
-> s_fmt 함수부분 구현하기(1)
-> 화면 번짐현상... 잡아보기(2)
-> 발표자료 만들기(0)
-> 이날 그냥 놈
2016. 07. 12.
-> s_fmt 함수부분 구현하기
-> 화면 번짐현상... 잡아보기
-> 발표자료 만들기
2016. 07. 13.
-> 발표자료 만들기
2016. 07. 14.
-> 함수화 하기
=> OK
-> s_fmt 분석하기
-> rmmod 했을 때 안 멈추게 하기
-> 라인 디텍팅꺼 그 그거 구조체 그거 하기
2016. 07. 15.
-> s_fmt 분석하기
=> 분석은 끝나지 않았지만 640 x 480로 해상도 고정시킴
-> rmmod 했을 때 안 멈추게 하기
2016. 07. 18.
-> rmmod 했을 때 안 멈추게하기(종료 부분 제대로 구현하기)
-> 총구 개선하기
=> OK
2016. 07. 19.
-> 놈
2016. 07. 20.
-> 발표자료 정리
-> 드라이버 코드 분리
-> DSP 전원 ON 시 프로그램 동작되도록
2016. 07. 21.
-> 드라이버 코드 분리
-> DSP 전원 ON 시 프로그램 동작되도록
-> PPT에 넣을 Flow Chart 그리기
-> 함수화한 코드 메모리 반환 시키기
2016. 07. 22.
-> 드라이버 코드 분리
-> PPT에 넣을 Flow Chart 그리기
-> 지금까지 작업한 것(V4L2) 문서화 하기
-> DSP 전원 ON 시 프로그램 동작되도록
=> init.d에 스크립트 작성해놓음
-> 함수화한 코드 메모리 반환 시키기
--> IplImage 구조체가 메모리 반환을 하지 않아 생겻던 문제
=> IplImage를 사용하지 않고 Mat을 사용함으로써 해결
-> 부팅하면 uvcvideo말고 내꺼 동작하게
=> 커널에 포함 안시키고 단순히 메인프로그램 스크립트에 rmmod와 insmod로 해결
-> 메인 프로그램 실행 시간이 오래 지나면 killed 되는 현상
--> 커널 영역 메모리 부족 현상인걸로 사료
--> 부팅 후 대략 1시간 정도는 유지되는 듯?
--> 일단 보류
2016. 07. 23.
-> 드라이버 정상 종료되도록 코드 개선
-> 드라이버 코드 분리
-> PPT에 넣을 Flow Chart 그리기
-> V4L2 문서화하기
2016. 07. 24.
-> 드라이버 정상 종료되도록 코드 개선
-> 드라이버 코드 분리
-> PPT에 넣을 Flow Chart 그리기
-> V4L2 문서화하기
-> 세진이꺼 구조체 초기값 부분 고치기
--> 현재 lane.h라는 헤더파일을 만들어놓았고 구조체 통으로 리턴 받는 형식으로
진행해야할듯
-> 메모리 누수 잡는다고 했던 IplImage -> Mat 부분에서 치명적인 문제 발생
--> 변환이 제대로 되지 않았는지 정상적인 이미지 출력이 안됨
--> IplImage로 되돌렸을 때 정상 작동
=> IplImage 메모리 해제를 Main 코드에서 해주니 정상작동
2016. 07. 25.
-> 드라이버 정상 종료되도록 코드 개선
--> dmesg확인결과 exit함수 수행 직후 커널 패닉에 빠짐
--> 버퍼나 큐를 제대로 해제하지 않고 종료하면서 생긴 문제로 생각됨
--> insmod 후 카메라 동작시킨 다음 rmmod하면 커널 패닉에 빠지지 않음
-> 드라이버 코드 분리
-> PPT에 넣을 Flow Chart 그리기
-> V4L2 문서화하기
2016. 07. 26.
-> 드라이버 정상 종료되도록 코드 개선
--> dmesg확인결과 exit함수 수행 직후 커널 패닉에 빠짐
--> 버퍼나 큐를 제대로 해제하지 않고 종료하면서 생긴 문제로 생각됨
--> insmod 후 카메라 동작시킨 다음 rmmod하면 커널 패닉에 빠지지 않음
-> 드라이버 코드 분리
--> 보류
-> PPT에 넣을 Flow Chart 그리기
--> 보류
-> V4L2 문서화하기
--> USB 장치 관련
--> V4L2 소개
--> PPT 처럼 각 주요 API 설명(코드)
--> 작동화면
2016. 07. 27.
-> 드라이버 정상 종료되도록 코드 개선
--> dmesg확인결과 exit함수 수행 직후 커널 패닉에 빠짐
--> 버퍼나 큐를 제대로 해제하지 않고 종료하면서 생긴 문제로 생각됨
--> insmod 후 카메라 동작시킨 다음 rmmod하면 커널 패닉에 빠지지 않음
-> V4L2 문서화하기
--> USB 장치 관련
--> V4L2 소개
--> PPT 처럼 각 주요 API 설명(코드)
--> 작동화면
프로젝트 진행하면서 하루하루 기록한다고 했던건데 .... 중간중간 놀아서 안한 날도 꽤 많네 ㅋㅋㅋㅋㅋㅋ