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 설명(코드)

--> 작동화면


프로젝트 진행하면서 하루하루 기록한다고 했던건데 .... 중간중간 놀아서 안한 날도 꽤 많네 ㅋㅋㅋㅋㅋㅋ

' 2016년 이전 > Embedded' 카테고리의 다른 글

V4L2 Driver 기술문서  (1) 2016.08.22
지능형 자율주행 RC Tank 시연 영상  (0) 2016.08.19
USB to CAN 모듈 등록  (0) 2016.07.23

+ Recent posts