ARM + DSP 기반 SOC 위에 리눅스 + 워크프레임 포팅관련 질문입니다.

yoonhokang의 이미지


안녕하세요! 저는 이제 대학졸업한지 만2년이 되어가는 엔지니어입니다.^^;;
그동안 이곳을 둘러보기만 하다가 혹시나 싶어 요즘 하고 있는 고민을 올려 봅니다.

우선, 저는 그동안 TI사의 DM6446 SOC 기반 위에서 비디오 처리관련 펌웨어를 개발하고 있습니다.
일반적인 인코딩 디코딩은 아니고, ADC를 통한 14비트 입력(12MHz sampling rate)을 받아서, 각 픽셀 데이터별로 미리 구한 테이블 데이터를 곱하고 나누고 하는 등의 작업을 합니다.

현재는 펌웨어 수준에서 DMA, 인터럽트 등을 이용하여 ARM과 DSP core를 동시에 구동하고 있습니다만, 앞으로는 리눅스를 포팅하여 작업하고자 합니다. 네트워크 스택을 구현하고, USB 등을 효율적으로 다루고자 하니, 더이상 펌웨어 수준에서는 한계가 분명해 보입니다.

제가 알고 있는 바에 따르면, 리눅스는 ARM core 위에서만 동작하고, 따라서, DSP core와 연동하고자 하면 리눅스 기반 위에 해당 목적을 위한 워크프레임(프레임워크?)이 필요합니다. TI사의 문서에 따르면, 이를 codec engine이라고 명명하고, DSP core는 나름의 운영체제를 가지고 동작하면서 이러한 워크프레임 기반으로 리눅스와(ARM core) 연동되고 있습니다.

저 같은 경우에는, DSP core 쪽에는 14bit raw 데이터 처리를 위한 알고리즘을 워크프레임에 맞게 제공해 주어야 하고, ARM Core 쪽에는 리눅스 및 워크프레임 포팅 작업과 일부 평가보드와 다르게 설계된 부분의 드라이버 수정이 필요할 것으로 판단하고 있습니다. (DM6446EVM에 맞게 제작된 리눅스 커널이 공식 리눅스 커널 내부에 존재하는 것으로 보입니다.)

현재 이쪽과 관련해서는 저 혼자 진행 중입니다.

그럼 질문입니다.

1. 저는 펌웨어를 작성하여 구동시키기는 했지만, 리눅스 드라이버 개발과 같은 리눅스 포팅에 대한 실무적인 영역은 거의 모릅니다. 단지, 우부투와 같은 리눅스를 사용한 경험이 있어 친숙하다는 점과 운영체제로서 리눅스가 해야할 역할이라던지 멀티태스킹, 가상주소, 파일시스템 등 기본적인 개념 정도를 이해하고 있을 뿐입니다.
또한, TI사에서 제공하고 있는 codec engine(work frame) 및 sdk 역시 여러 문서의 overview를 통해 개념을 잡고자 노력만 했을 뿐 실무적인 경험은 전무합니다.

그래서, 다소 무리가 있는 질문임을 알지만, 이러한 제 상황에서 DM6446(혹은 그와 같은 ARM+DSP SOC)과 리눅스를 이용하여 개발을 한다면, 필요한 사전준비 기간이 얼마나 필요할까요? 리눅스도 리눅스지만, TI사에서 제공되는 방대한 user guide를 보고 있으면 쉽게 감이 오지 않습니다. 혹시 저와 비슷한 경험이 있으신 분들이 있으시다면, 앞으로의 시간계획 등을 위한 조언 부탁드립니다.

2. 임베디드쪽 리눅스 포팅에 대한 주제를 가지고 구글링을 하다보면, 소스코드 단계에서 문제를 해결하는 경우가 많은 것 같습니다. x86과 같은 PC 기반이 아닌 임베디드용 SOC라면, 공식 커널 소스 내에 EVM을 기준으로 한 소스코드가 있더라도 문제해결을 위해 커널소스를 조사해볼 일이 많은지요. 즉, 임베디드 쪽에서 리눅스를 포팅한다 함은, 리눅스를 소스코드 단계에서 분석할 수 있는 수준에 도달해야겠죠? 확인차 여쭤봅니다^^;;

3. 최초 데모를 5개월 후로 잡았다면, 이런 작업은 어느 정도의 인력이 투입되는지 궁금합니다.

우선은 여기까지만 질문드리고, 나중에 필요하면 다시 도움을 구해야 겠습니다.
아직 경험이 많지 않아서 그런지 하다못해 무엇을 요구해야 할지도 모르고 있습니다.
그럼 도움 부탁드립니다!

poplinux의 이미지

TI 에서 제공하는 SDK 를 그대로 사용하시면 되기 때문에 큰 어려움은 없을 것으로 생각됩니다.

다만 DSP 쪽 작업은 직접 하셔야 할텐데, 리눅스 쪽 개발 경험이 없으시다면 어려움이 있을 것 같습니다.

DSP 쪽은 리눅스 디바이스 드라이버 개발 경험이 있는 분에게 외주 주시는게 좋을 것 같으며 작업시에는 함께 진행하시면 될 것 같습니다.

그럴 경우

study(+개발준비) : 1개월
개발 : 2개월
디버깅 및 수정 : 1개월

잡으셔도 큰 무리 없을 것 같습니다.

가장 중요한 것은 결국 실무자의 능력이겠지요.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향