스마트폰 커널은 못만드나요?

kws4679의 이미지

그냥 궁금합니다

지금 우리가 쓰는 8086은 정말 검색하면 엄청나게 많이 커널에 대한 정보가 나오는데

스마트폰도 똑같이 cpu 와 메모리가 있는 기계고 다시말해서 임베디드 시스템인데

이에 대해서 커널을 만들수 있을까요?

JuEUS-U의 이미지

안될거야 없지만, 언제나 드라이버가 문제죠.

태훈의 이미지

만들고 있습니다.

Just do it!

handrake의 이미지

락이 걸려있어서 일반에 풀린 스마트폰으로는 부트로더를 올리기도 커스텀 커널을 올리기도 어렵습니다.

나빌레라의 이미지

OS의 커널을 만드는 것은
PC건 임베디드 보드건 스마트 폰이건 뭐건
별로 어렵지 않습니다.

문제는 "쓸만한" 혹은 "팔린만한" 혹은 "상업적으로 가치있는" OS의 커널을 만들어내는 것이 어려운것입니다.

스마트 폰이라고 해도 결국은 조금 복잡한 임베디드 시스템입니다.
일반적인 임베디드 운영체제에 관련한 자료를 찾아보시면 됩니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

태훈의 이미지

100% 공감합니다. 걱정하고 있는 부분이기도 하고요.

facebook이면 '좋아요' 클릭하고 싶네요. ㅎㅎ 여기는 그런 기능 없나요?

Just do it!

anfl의 이미지

2005년도에 모 대기업에서 만들었죠. ^^

그 기업에서 생산하는 시스템 가전 거의 대부분과 말 못하는 신기한 곳들에 탑재되어 사용되고 있습니다.
또 그 기업에서 사용하는 모바일 플랫폼에도 넣고자 시도중에 있다는데,
어찌될지는 아무도 모르죠.

일반적으로 한 개인이 in-house로 만드는 커널을 toy-os로 부르는데,
그 이유는 os를 만들때 아무 철학 없이 그냥 되기만하면 되는 os를 만들기 때문입니다.
제대로 된 os를 만드려면 POSIX도 알아야하고, target도 분명해야하고,
각종 API를 설계할때도 운영체제에 대해 매우 많이 알고 있어 철학이 있어야 하고,
사용하는 알고리즘도 많이 아는 상태에서 철학 있게 선택해야 하고,,,, 등등등 알아야할것들이 무척 많죠.
물론 알고리즘 효율도 중요하고, RTOS라면 interrupt latency, 기타등등 알아야할게 정말 많습니다.

그리고 무엇보다 중요한건 검증인데, 하나의 OS가 제대로 검증받으려면 검증하는데만 적어도 2년 이상이 걸립니다. ^^
이런것들은 시중에 유통되는 OS 만들기류의 책에서는 절대 알수 없는 내용들이고요.

in-house 커널 또는 toy-os에는 그러한 점들이 없어서 스마트폰에 사용되기 힘듭니다.

그리고 가장 심각한 문제는 두구 두구 두구... os kernel만 중요한게 아니라 플랫폼이 갖추어져야하는데,
google 같이 오픈 소스를 사용해서 플랫폼을 만들거나, 아니면 바다와 같이 직접 만들어야 합니다.

그일은 그냥 오픈 소스 가져다쓰면 매우 쉬운일이 되지만 라이센스 문제가 발생할 수 있고요.
직접 만들면 OS Kernel 만드는것보다 더 시간이 오래걸리는 일이되죠. ^^

답변이 되셨는지 궁금하네요. ^^


kws4679의 이미지

댓글달아주신분들 정말 감사드립니다

그런데 anfl 님께서 지적해주신 대로 혹은 그외 분께서 지적해주신대로

쓸만한 커널을 만드려면 어떻게 공부해야하는지 알고 싶습니다 ㅠ

anfl의 이미지

그냥 죽어라 열심히 공부하시면 됩니다.

운영체제 책이란 책은 다 읽어 보시고,
매일 운영체제 관련 논문 읽어 보시고,
상용 또는 메이져 운영체제 소스를 구하실수 있으면 분석해보시고,
상용 또는 메이져 운영체제의 서로 다른 API 구성도 연구해보시고,
리눅스 커널도 한번 분석해보시고,
POSIX API에 대해서도 알아보시고,
각 IPC, timer, scheduler의 알고리즘이란 알고리즘은 다 찾아보시고,
컴파일러도 공부해보시고,
프로세서 아키텍쳐도 공부해보시고,
그렇게 한 3~5년 정도 공부해보시면 쓸만한 운영체제를 만드실 수 있을겁니다.


gurugio의 이미지

쓸만한이라는 표현보다는
정확히 어떤걸 원하시는지 적으시면 조언해주실 분이 많으실겁니다.
돈받고 팔 수 있는 상용화하는 수준이라거나 연구용이거나 목적이 뭔지도 적으시면 도움이 될것 같습니다.

kws4679의 이미지

답변달아주신분들 정말 감사합니다.

쓸만한것이라고 뭉뜽그려서 말하긴 했지만 사실 제가 진정 생각하고있는것은

패러다임을 전환한 어플리케이션의 실행? 이라고 말할수 있는데요 커널수준에서

연산을 조작함으로써 스마트폰 어플리케이션의 효율을 높여보고자 함이었습니다

그리고 말씀하신대로 상용화 & 연구용 이라고 하신다면 아무래도 돈을 벌수있는

상용화 쪽에 더 기운다고 말씀드릴수있겠네요

그리고 또한가지 궁금한게 있는데 저의 무지때문에 이런 질문이 나온것 같지만...

사실 스마트폰이나 기타 임베디드 시스템에서 프로세스가 여러개 돌아갈 필요도 없을뿐더러

일반 상용화된 컴퓨터 os 보다 훨씬 더 작은 일을 해준다고 생각합니다. 그런점에 있어서

물론 스케쥴링이니 그런 것도 중요한건 백번 맞지만서도 메모리 관리측면을 제외하자면

임베디드 시스템 os 를 만드는게 더 쉬운일이 아닌지 추측해봅니다... 물론 해보지도

않고 말씀드리는거라..... 조언 부탁드립니다!!

태훈의 이미지

요즘은 임베디드 시스템도 예전의 임베디드 시스템이 아니라서 PC(x86)에서 동작하는 OS 기능을 모두 다 갖추고 있어야 합니다.

다만, 말씀하신대로 임베디드 시스템에서 os 만드는게 더 쉬운건 맞습니다. 하지만, 이것도 일반적인 OS(Gerneral Operating System)에만 해당되는 얘기고 경성 실시간 시스템(Hard Real-Time System)을 지원하는 RTOS(Real-Time Operating System)의 경우는 오히려 더 어렵습니다. OS 버그로 비행기가 추락한다면...끔찍하겠죠?

저러한 RTOS는 테스트 비용만 억대라고 합니다.

Just do it!

태훈의 이미지

기존의 어플리케이션 최적화를 위한 커널 공부라면 리눅스 커널을 공부하는걸 추천해드리겠습니다.

Why? 코드가 오픈되어있고, 공부 자료도 많고, 이미 상용화되어 시장 점유율도 높기때문입니다.

말씀하신건 리눅스 커널 구조만 알면 모듈로 구현해서 스마트폰 플랫폼에 적용하면 됩니다. 정확하게 어떤 내용인지는 모르겠지만 커널 개발자 기준으로보면 그닥 어려운 일은 아닐듯...(But, 커널 개발자가 거의 없죠..^^;;)

Just do it!

태훈의 이미지

어플 실행이면 리눅스 커널의 elf 로더 부분을 파시면 됩니다. (메모리 관리 파트)

어플이 자바 같은 JVM 위에서 동작하는 것이면 구지 커널까지 보실 필요는 없고 미들웨어 단의 JVM을 보시면 됩니다. (ex> 안드로이드의 dalvik)

저도 비슷한 아이디어로 JVM을 커널 로더로 넣는건 어떨까? 라는 상상을 한 적이 있습니다. 기술적으로 커널에 포팅하는 거야 문제 없지만 문제는 그놈의 귀차니즘...

Just do it!

kws4679의 이미지

대중안스는 상황에서 태훈님의 답글을 보고 역시 리눅스 커널이구나

하는 생각이 들었습니다. 조만간 스터디에서 열심히 공부해보겠습니다

그리고 어려운 분야에 도전하는것을 좋아하는지라 커널 프로그래머로의

진로방향에 대해 심도있게 생각해보겠습니다 감사합니다!!