임베디드 리눅스에서 '커널 포팅' 이라는 정확한 의미가 궁금합니다.

brain2012의 이미지


간혹가다 '리눅스 커널 포팅'이라는 단어가 보이는데요

어느 정도 수준이면 업무적으로 '커널 포팅'을 해봤다고 말할 수 있을까요

주변사람에게들 물어보면 매우-_-주관적입니다.

커널패치 해서 컴파일후 부트로더를 이용해서 구웠다 부터 소스를 수정해서 해봤다

자신이 보드 패치를 만들어봤다 등등 매우 다양한데

누구 정확한 절차와 정의를 해주실 분 계신가요;

ganadist의 이미지

애석하게도 업계에서는 모두들 자의적으로 쓰고 있는게 현실입니다. -.-;

그냥 보드에 올리는 것을 '커널 포팅'이라고 정의 내리는 분들도 많더군요.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

brain2012의 이미지

어느 학부 졸업생이 면접에 와서 '커널 포팅' 해봤다고 하길래

정확히 어떤 작업을 했는지 물어보니

자신있게 ARM패치+보드패치+컴파일 해서 보드에 다운로드 해봤다고 해서 황당한적이 있습니다;

foo의 이미지

포팅했다는 말은 그냥 단순히 패치를 만들었다거나 컴파일했을때 쓰는 말이 아닙니다.

전혀 지원하지 않는 플랫폼에서 프로그램을 돌아가게 만들었다는 것을 포팅했다라고 말하죠.

그런데 상당수의 사람들은 단순히 configure해서 컴파일해서 성공했다는 말 혹은 설치 성공을 포팅했다고 그러더군요.

커널 포팅도 마찬가지입니다. 지원 CPU목록에 전혀 없던 것을 가능하게 한 경우에나 쓰는 말이 커널 포팅입니다.

이미 지원 CPU목록에 있는데, 물론 임베딩 시스템을 위해 컴파일하고 설치하는 경우에는 엄청나게 노가다성 작업일 경우가 매우 많지만,
컴파일이나 설치 성공을 포팅이라고 하지는 않습니다.

cats96의 이미지

커널포팅의 의미는 포팅되어있지 않은 단말기에 커널을 올려서 동작이 가능하게 하는것입니다.
단말기의 사용가능한 모든 기능을 사용가능하게 만드는것이죠.
커널을 특정 단말기에 맞게 커스터마이징하는것을 포팅이라고합니다.
단순히 커널을 컴파일해서 단말기에 올렸다... 이것은 포팅이라고 하지 않습니다.
그냥 커널컴파일을 한것이죠. 커널컴파일은 누구나 하는것입니다.

JuEUS-U의 이미지

아주 정확한 의미에서는 porting이 아닙니다.
일단은 돌아가니까요 [...]
성능을 100% 뽑느냐 30% 뽑느냐는 사실 중요하지 않습니다.

하지만 그 작업을 'patch'나 'driver를 썼다'라고 표현하는건 더 큰 잘못이지 싶습니다.

dorado2의 이미지

http://en.wikipedia.org/wiki/Porting

애초에 설계한 환경과 다른 환경(CPU, OS, library)에서 동작 가능하도록 S/W를 수정하는 것,
또는 그러한 다른 환경에서 실행 가능한 프로그램 생성이 가능하도록 S/W를 수정하는 것을 porting이라고 하고 있군요.

brain2012의 이미지

위키에서는 그런 의미로 쓰이지만 실제로 안그렇게 생각하는 사람들이 꽤 있는것 같더라구요 ㅠ_ㅠ

sunyata01의 이미지

그럼 데이타시트정도는 볼줄알아야 되는거죠??
지금 삽질중인데...ㅠㅠ

eyeda99의 이미지

기본적으로 OS포팅 했다 할려면, Interrupt, Timer, H/W initialization해주셔야 됩니다.
그리고, 필요에 의해 드라이버(Ethernet, USB, Serial등등) 작성하셔야 하고요.
CPU의 Datasheet보시면, 다 나와있으니 천천히 해보세요. 흐흐흐

If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut.
- Albert Einstein -

brain2012의 이미지

CPU 회사도 제공하는 메뉴얼이 매우 많던데 정확히 어떤 Datasheet인지 알려주실 수 있나요?;;

eyeda99의 이미지

CPU제조업체에서 제공해주는 메뉴얼을 보시면 됩니다.
http://www.st.com/mcu/devicedocs-STM32F107VC-110.html
↑ 예를 들자면, 제가 요즘 작업하고 있는 보드의 칩이 요녀석입니다.
해당 제조업체 사이트를 들어가면, datasheet/reference/sample code/등등이
있습니다. reference만 보셔도 됩니다만... 차근차근 다 읽어보세요.
님이 원하는 내용은 메뉴얼안에 다 들어있습니다.

If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut.
- Albert Einstein -

brain2012의 이미지

말씀하신 사이트에 가보니

Datasheet | Reference Manual | Application Note | Certification | Errata Sheet | Firmware | Press Release | Programming Manual | Software - PC | Software for Tools | User Manual

위와 같은 문서들이 있는데 이것들중 Datasheet에는 MCU의 전체적인 specification에 대한 정보만 있지

구체적으로 하드웨어 초기화 등의 코드를 작성할 때 도움될만한 것은 찾지못했습니다;;

메모리 맵 제외하고는 안보이던데 제가 뭘 놓치고 있는지가 궁금합니다.

공부할겸 DSP에 리눅스와 부트로더를 포팅해보려고 하는데 이거참 막막하네요ㅎ

eyeda99의 이미지

datasheet만 살짝 보신건 아니신지요? 리퍼런스 메뉴얼을 보시면, 각 페리페랄의 설명이 다 나와있습니다.
타이머를 예로 들면, 14장에 타이머의 설명과 레지스터 설명 다 나와있죠.
그리고, 셈플까지도 다 제공해 주고요.(에플리케이션 노트라고 나와있죠?)
"구체적인 하드웨어 초기화 등의 코드"는 그냥 써도 될 정도로 자세히 제공해주고 있습니다.
다시한번 자세히 칩제조업체의 사이트/메뉴얼등등을 정독해 보시기 바랍니다.

If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut.
- Albert Einstein -

익명 사용자의 이미지

하긴... 데이터시트를 보고 일일이 다 맞춰 줘야 하고....
프리패럴에 들어있는 각종 디바이스에 대한 환경도 설정해 줘야 하니....
뭐.... 그렇기는 하지만....

그정도 수준까지 올라가면 이미 포팅이라 보기는 힘들다고 보는데....
다른 분들은 그정도 수준까지를 포팅이라 생각하신다....

디바이스 드라이버 개발....
물론 LCD쪽이나 Sound 쪽....
기타 등등 특수 디바시스 같은 것을 개발하는 것과....
CPU 드라이버를 개발하는 것의 차이라 보는데....

물론 물리적 관점 기준으로 하는 것이고....
S/W 관점에서는 또 다른 의미 이겠지만....
CPU 드라이버를 개발하는 것과 다른 특정 디바이스 드라이버를 개발하는것...

이것에 관해 커널을 포팅하느냐??
아니면 커널을 개발하느냐....
하긴... 그런의미로 따진다면....
커널 하나하나 직접 다 개발하는 것은 아니니 포팅이라 해야 하나??

CodeWarrior의 이미지

여기에 커널 포팅의 난이도에 따른 구분이~~ 도움될겁니다. 읽어보시면~

http://forum.falinux.com/zbxe/?document_srl=516932

저도 보드 포팅이나 깨작되는 수준~~ 후후

--------------------------------------------------------
hope the least thing all the people shall know is linux!!
--------------------------------------------------------