달린 카메라를 임베디드 리눅스에서 쓰려고 하는데, 안된다고 들었습니다.
카메라가 직접 s5pv210에 붙어있어서 안드로이드로 제어해야한다고 하는데 왜 리눅스에선 안되고 안드로이드에서는 되는건가요?
직접 s5pv210에 물리는 카메라는 어떤 인터페이스로 동작하길래 리눅스에서 안되는지 알고싶습니다.
혹시나 리눅스에서 따로 제어할수 있는 방법이나 다른 방법이 있나요?
그리고 안드로이드에서는 어떤 방식으로 제어하는지도 알고 싶습니다.
=====================================================
안되는 것이 아니라 저희가 동작시킬 방법을 갖고 있지 못한 상태입니다.
카메라는 여러 가지 단계로 동작합니다.
Camera hardware <--> CPU <--> Device Driver <--> v4l2 driver <--> fimc driver <--> camera application
현재 리눅스 커널에는 device driver, v4l2 driver, fimc driver가 있습니다. fimc는 주로 카메라 영상을 overlay 시키는 역할을 합니다. 즉, CPU 내부의 카메라 제어 로직과 Display 관련 부분과 연결시켜서 동작시키는 드라이버입니다.
application은 이 fimc와 v4l2 드라이버들을 적절히 응용해서 카메라로부터 정보를 읽어서 화면에 출력하거나 캡춰해야 합니다.
현재 삼성의 소스 배포는 안드로이드용으로만 배포가 됩니다.
물론 리눅스 커널까지는 공통으로 사용할 수 있습니다.
문제는 리눅스에서 이런 삼성 CPU에 연결된 카메라를 제어하는 프로그램이 없다는 것입니다.
안드로이드 같은 경우에는 안드로이드 framework는 카메라 종류와 상관이 없고, 리눅스 드라이버와 인터페이스하는 카메라 라이브러리(libcamera)만 작성해 주면 됩니다. 이 부분은 삼성에서 소스를 배포하고 있으므로 문제가 없이 동작이 됩니다.
그러나, 리눅스에서 동작시키기 위해서는 위에서 설명한 v4l2와 fimc 등을 이용하는 응용 프로그램이 있어야 하는데, 삼성에서 별도로 작업된 부분이 없습니다. 물론 저희도 작성하지 못했습니다.
이런 이유로 현재 리눅스에서 카메라를 동작시킬 방법을 갖고 있지 못한 상태입니다.
인터넷 커뮤니티 상에서 간혹 이런 작업을 시도하시는 분들은 있었지만, 성공했다는 소식은 듣지 못한 상태입니다.
리눅스에서 작업하시려면 일단 안드로이드의 device/samsung/proprietary/libcamera 소스를 참고해서 리눅스용으로 작업하셔야 합니다. 카메라 동작시키는 어플리케이션도 작성하시거나 다른 소스를 구해서 참고하셔야 할 것 같습니다.
================================================================================
그럼 리눅스에서는 카메라를 제어할 수 있는 디바이스 드라이버는 있지만, 응용 프로그램만 없는 상태란 것이네요.
그런데 제가 안드로이드를 안해봐서 위에서 답변해주신 다음 말을 잘 이해 못하겠습니다.
안드로이드 같은 경우에는 안드로이드 framework는 카메라 종류와 상관이 없고, 리눅스 드라이버와 인터페이스하는 카메라 라이브러리(libcamera)만 작성해 주면 됩니다. 이 부분은 삼성에서 소스를 배포하고 있으므로 문제가 없이 동작이 됩니다.
libcamera란 카메라 라이브러리가 위에서 말씀하신 v4l2와 fimc 등을 이용해서 카메라를 동작하는 라이브러리이고, 삼성에서 이걸 만들어줘서 안드로이드 응용프로그램에서 쓸 수 있다는 말씀인가요?
|