본문 바로가기

나의 성장일기/컴퓨터

리눅스 커널 공부 방법

반응형

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10302&docId=123216535&qb=7Jq07JiB7LK07KCcIOqzteujoeyxhQ==&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=gYcSCc5Y7vRssuea3uRssc--051540&sid=TvHVRzqh8U4AAGoi5QA

 

http://blog.naver.com/dolicom/10022980847


임베디드 시스템 공부 사이트

http://recipes.egloos.com/

 

안녕하세요~^^

정말 공부하다 어느 방향으로 가야할지 답답해서 이렇게 글을 올립니다.

아직은 컴퓨터 구조를 공부하고있습니다만은 어느정도 길을 정해 놓는게 좋을듯 싶어서요.

우선은 제가 물어보고 싶은건,

제가 커널이나 컴파일러를 좀 깊게 공부하고 다루고 십습니다.

보통은 다들 분석을 하신다고 하는게 그게 무슨 의미인가요??

그리고 만약 제가 공부를 한다면 커널이 먼저일까요??? 아니면 컴파일러가 먼저일까요??

2. 일단 제가 공부방향이 컴퓨터구조를 공부하고 운영체제를 공부하고 커널을

공부할 생각이었는데요~ 이렇게 해도 괜찮은건가요??

지금 컴퓨터구조는 Morris Mano의 computer system architecture를 공부하고 있고

이제 10장을 마쳤습니다. 그리고 이책을 끝내고나서 윤성우저자의

뇌를 자극하는 윈도우시스템프로그래밍 인강이 있어서 옛날에 사놨지만 컴퓨터 구조를 한다고 미룬걸 공부하고 이게 컴퓨터 구조를 약간과 운영체제공부라고 하더라구요

그다음에 운영체제 공룡책을 공부하고 커널을 공부하려고 했습니다. 이게 괜찮은 생각인가요??

3. 제가 지금 공익근무중인데 하루종일 공부할시간이 엄청남습니다~^^

그런데 하루종일 컴퓨터 구조만 공부하려고 하니 너무 지루하네요ㅠㅠ

사실 이때까지 공부해온것도 정말 힘들게 해왔습니다. 완전 독학이라.....

제가 미국에서 대학을 다니다와서 영어는 문제가 아닌데......독학이라 도와주는분없이

혼자서 이해할때까지 보고 안되면 잠시 놓고 놀다가 다시보고.... 공부만 오래되지가 않더라구요

수학문제면 이리저리 생각을 해보겠지만.....

다른 사람들이 컴퓨터구조가 처음 접하면 이해하기가 다른것들보다 난해하다고는 하지만....

그것도 맞는 말인지....아니면 그냥 멍청한건지...ㅋㅋㅋ

독학하는데 뭘 공부하는게 좋을지 가르쳐주세요^^

앞으로 공익근무 1년8월 정도 남았는데 뭔가를 하고 다시 학교로 가고싶네요^^

저는 일단 목표가 커널분석을 해서 리눅스로 깊게 이해를 해서 돌아가는게 목표인데...

아! C언어는 문법은 알고있습니다. 다만 제가 써보지못해서.....

일단은 언어는 컴퓨터구조할동안은 언어는 공부안하고 운영체제하면서 될듯한데.....ㅋㅋ

여기서 딱히 질문이 있는건 아니지만 제 목표에 맞게 어떤 공부를 하면 괜찮을 련지 많은 솔찍한 생각/조언 부탁드려요.

 

Bootloader -> RTOS -> Linux 이순서로 공부

 

리눅스 커널을 이해하기 위해 우선은 기초부터 해야 합니다.

좋은 개념이 많이 포함되어 있다는 유닉스 계열이라서 OS 개념을 알기에 안성마춤이지만 그러나 초보자에게는 너무 광범위 합니다.

우선 해야할 일은 PC에 리눅스를 설치해서 각종 명령을 몸에 익히는 거죠. 이런 것들이 나중에 도움이 됩니다. 우선 이런 작업이 가장 쉽죠. 그리고 간단히 리눅스 관련 프로그램의 gcc을 통해 작성해 보면 좋습니다. 물론 C언어를 다루어야 프로그램이 가능하겠죠.

해야할 일을 적어 보죠.

1. 언어 : C언어로 커널이 작성되어 있죠. 따라서 C을 정확히 깊숙히 이해 해야 합니다. 프로그램의 난이도에서 남의 프로그램 해석하는 것이 가장 높은 수준의 어려운 작업 입니다. 따라서 일단은 C언어를 작성해 보아서 몸에 익어야 합니다.

'문법은 알고 있으나 써보지 못해서' - 이 말은 한마디로 모른다는 뜻입니다.

따라서 실제 프로그램을 통해 익숙해 져야 하고 코딩을 해보아야 남의 프로그램 보면 이해 합니다.

특히 struct 와 포인터의 결합이 아주 기본이기 때문에 많은 경험이 필요 합니다.

학습방법은 다음을 참고:

http://blog.naver.com/dolicom/10022980847

2. CPU의 이해

OS에서 커널은 OS의 핵심 이면서, 모든 하드웨어 제어는 여기 다 있죠. 따라서 CPU을 실제로 다루어 보는 것이 좋습니다. 그냥 책에서 공부하는 것이 아니라 실제로 목적을 세우고 동작을 시켜 보는 거죠. 우선 8비트 부터 하나 만들어 보고 여기서 C언어로 원하는 동작을 해 보는 거죠.

그 다음 ARM 보드를 구입하여 ARM의 CPU 이해를 해 보아야 하겠죠. 8비트 CPU는 많이 있고 쉽게 직접 만들수 있지만 ARM은 PCB을 만들기가 비용이 많이 들어 가죠. 따라서 ARM보드를 구입해서 사용해 보시기 바랍니다.

이해 방법은 리눅스 말고 그냥 CPU 자체의 특정 목적에 맞는 기능을 프로그램 함으로써 시스템에 필요한 요소를 이해 하는 거죠.

Timer, UART, PORT등은 기본으로 한번 다루어 보면 됩니다.

3. ARM 보드의 포팅 따라 하기

우선 2번 단계에서 ARM을 사면 거기에 리눅스 포딩되 샘플이 주어 지죠. 여기나오 전 과정을 실행해서 리눅스를 포팅해 보는 거죠. 처음부터 하는 것도 좋은데, 그러면 시간이 많이 들어 지치죠. 직접하면 실력이 늘어서 좋지만 만만하지 않습니다.

4. Device Driver 작성

리눅스가 포팅되면 적당한 하드웨어를 설정해서 Device Driver을 작성하고 이것과 응용프로그램을 연결하여 동작 시켜 보면 되죠.

5. X-Windows 포팅

많은 종류의 윈도우 프로그램이 있는데, 적당한 것을 포팅하고 윈도우 프로그램을 작성하면 됩니다.

여기까지 각각의 단계 마다 엄창난 노력과 시간이 필요하죠. 따라서 시간을 가지고 천천히 학습해 나가면 됩니다.

보통 사람들은 C언어 에서 포기 하던데, 각 과정이 많은 경험이 필요하므로 점차 시간을 가지고...

인내심도 함께.

재미를 느끼시길 바랍니다.

지금 질문한신 글을 읽으니 보수적 성향의 느낌이 드는 군요. 일단 각종 책을 읽고 뭔가를 해야 된다고 생각하시지만 이 분야를 빨리 습득하는 방법은 그렇게 하면 결국 포기하게 되죠. 이쪽은 진보적 성격이 기본이고 실력이 늘어 임베디드를 자유자제로 다루고 나면 진보적 성격으로 변하게 됩니다.

진보적의 특징은 실제로 많은 데이터를 경험을 통해 머리속에 축적하고 이것을 논리를 통해 서로 연결하여 원하는 목적을 만들어 내는 것입니다. 그러나 많은 경우 보수적 성격은 책을 읽고 그 분야를 다 안다고 생각하고 그 다음 과정인 생각의 심화와 체득 단계를 무시하죠. 그냥 전체적으로 한번 읽어 으니 끝이다 이렇게 생각하면 절대로 전문적인 능력이 불가능 합니다.

물론 처음에는 하나도 모르면 책을 선정하여 전체를 빨리 읽는 것은 좋지만 컴퓨터와 싸움을 하지 않으면 절대로 실력은 늘지 않습니다.

당장 자기가 보수적이라고 생각되면 공부 방법을 바꾸시길 바랍니다. 그 방법이 어떤것이든 논리적이고 데이터를 기억하고 처리하는 일이 필수인 임베디드하고는 맞지 않습니다.

 

공부를 재미있게 하세요.

C언어도 문법만 아는 상태에서

일반적으로 가장 지루하고 방대하고 힘들어하는 커널과 컴파일러 쪽을 먼저 공부하면

흥미를 잃고 중도 포기할 가능성이 큽니다. 님이 천재도 아니구요.

뭐든지 흥미가 있어야, 밤도 새가면서 알아보고...그러면서 습득을 하는겁니다.

공룡책은 그걸 다 읽고 공부하라고 만든게 아닙니다. 그냥 운영체제 사전 이라고 생각하고 이용해야 합니다.

뭘 하다가 모르는게 있으면 공룡책 목차를 보고 그 부분을 읽는거죠.

그거 처음부터 끝가지 다읽으면 노력은 가상하지만, 띨띨한 겁니다.

 

 

반응형