임베디드 리눅스 시스템 설계와 개발
P.라가반
저자소개
P.라가반(P.Raghavan)은9년차임베디드소프트웨어개발자이다.그는텔레비전이나그래픽스디스플레이에서부터네트워크장비에이르기까지다양한분야의임베디드용제품을개발해왔으며,임베디드리눅스외에도VxWorks나Nucleus와같은다양한상용운영체제상에서의개발경험이있다.또한임베디드시스템을위한소프트웨어개발주기에관련된다양한이슈들을잘이해하고있다.인도의방갈로르대학교에서전자공학과를졸업하고현재는방갈로르의필립스소프트웨어에서근무하고있다.
아몰라드(AmolLad)는인도의명문대중의하나인알라하바드에있는모틸랄네루국립공대의컴퓨터공학과를졸업했다.그는대학2학년이던1996년에리눅스커널소스를처음으로접했는데‘저아래쪽에서’어떤일들이이루어지고있는지를이해하고싶은마음이그를리눅스로빠져들게했다.1999년부터위성통신시스템에쓰일디바이스드라이버개발자로일하게되었으며,2001년에MIPS기반의하드웨어플랫폼을위한BSP를작성하는과정에서처음으로임베디드리눅스를접하게되었다.현재는베리스모네트웍스(VerismoNetworks)에서리눅스커널엔지니어로일하고있으며,임베디드리눅스기반시스템의설계책임자이기도하다.그는(리눅스커널을분석하느라바쁘지않은)여가시간에는크리켓을즐기거나스포츠를관람한다.또한음악에도매우조예가깊어서만약컴퓨터엔지니어가되지않았다면틀림없이작곡가가되었을거라얘기하고있다.
스리람닐라칸단(SriramNeelakandan)은전자공학과를졸업한뒤처음에는윈도즈디바이스드라이버개발자로일하기시작했다.그는단지키보드로해결할수있는(소프트웨어적)문제보다는인두기로납땜을하고오실로스코프로확인하며해결하는(하드웨어적)방법을더좋아한다.그는윈도즈,리눅스,VxWorks등의플랫폼상에서ISA,PCI,USB,PCMCIA,CF+와같은다양한기술들에대한디바이스드라이버를작성해왔다.그가임베디드리눅스를접하게된것은MIPS기반의SoC네트워크제품을포팅하면서였는데,이를통해라우팅시스템(fib,netlink),MTD드라이버,플래시용파일시스템(CRAMFS,JFFS2)등리눅스에포함된다양한모듈들을이해할수있는계기가되었다.그는현재베리스모네트웍스에서미디어솔루션을담당하는임베디드리눅스팀에서근무하고있다.
역자소개
김남형(namhyung@gmail.com)
서울시립대학교전자전기공학부와동대학원을졸업하고,(주)덱트론을거쳐현재(주)탑케이블에서DTV관련연구를하고있다.학부시절부터리눅스커널에관심을가지고꾸준히분석해왔으며,최근에는한글화에대한관심이생겨KLDP,위키백과,커널옵션한글화프로젝트,한글Mozilla개발자센터,맨페이지한글화프로젝트및고전게임한글화등에도참여하고있다.시간이날때는기타연주및고전콘솔게임을즐기는편이다.
제1장 개요 1
1.1 임베디드리눅스의역사 2
1.2 왜임베디드리눅스인가? 9
1.3 임베디드리눅스와데스크톱리눅스 12
1.4 자주묻는질문들(FAQs) 14
1.5 임베디드리눅스배포판 18
1.6 포팅로드맵 34
제2장 시작하기 37
2.1 임베디드리눅스의구조 37
2.2 리눅스커널의구조 41
2.3 사용자공간 47
2.4 리눅스부팅과정 53
2.5 GNU크로스-플랫폼툴체인 62
제3장 BoardSupportPackage 75
3.1 커널빌드과정에BSP추가하기 77
3.2 부트로더인터페이스 79
3.3 메모리맵 83
3.4 인터럽트관리 91
3.5 PCI서브시스템 97
3.6 타이머 102
3.7 UART 102
3.8 전원관리 104
제4장 임베디드저장장치 113
4.1 플래시맵 114
4.2 MTD(MemoryTechnologyDevice) 115
4.3 MTD구조 120
4.4 NOR플래시를위한샘플MTD드라이버 123
4.5 플래시매핑드라이버 136
4.6 MTD문자장치와블록장치 146
4.7 mtdutils패키지 146
4.8 임베디드파일시스템 148
4.9 저장공간최적화 152
4.10 커널메모리튜닝하기 158
제5장 임베디드드라이버 163
5.1 리눅스직렬드라이버 164
5.2 이더넷드라이버 178
5.3 리눅스의I2C서브시스템 186
5.4 USB가젯 195
5.5 감시타이머 206
5.6 커널모듈 207
제6장 응용프로그램포팅 211
6.1 구조적비교 211
6.2 응용프로그램포팅로드맵 213
6.3 pthreads를이용한프로그래밍 218
6.4 OSPL 233
6.5 커널API드라이버 245
제7장 실시간리눅스 257
7.1 실시간운영체제 258
7.2 리눅스와실시간성 259
7.3 리눅스의실시간프로그래밍 269
7.4 엄격한실시간리눅스 321
제8장 빌드와디버깅 333
8.1 커널빌드하기 335
8.2 응용프로그램빌드하기 345
8.3 루트파일시스템빌드하기 352
8.4 통합개발환경(IDE) 355
8.5 가상메모리문제의디버깅 358
8.6 커널디버거 373
8.7 프로파일링 376
제9장 임베디드그래픽스 395
9.1 그래픽스시스템 396
9.2 리눅스데스크톱그래픽스-X윈도우시스템 398
9.3 디스플레이하드웨어의기초 400
9.4 임베디드리눅스그래픽스 404
9.5 임베디드리눅스그래픽스드라이버 404
9.6 윈도우환경,툴킷,응용프로그램 427
9.7 결론 434
제10장 uClinux 435
10.1 MMU가없는시스템상의리눅스 435
10.2 프로그램로드와실행 438
10.3 메모리관리 457
10.4 파일/메모리매핑-uClinux에서mmap()의복잡함 464
10.5 프로세스생성 466
10.6 공유라이브러리 469
10.7 uClinux로응용프로그램포팅하기 473
10.8 XIP-eXecuteInPlace 482
10.9 uClinux배포판빌드하기 483
부록
A.부팅속도높이기 487
B.GPL과임베디드리눅스 493
임베디드리눅스시스템설계와개발은임베디드리눅스시스템을개발하기위한완전한로드맵을제공한다.이책은기존의실시간운영체제(RTOS)를사용하는시스템을임베디드리눅스로이식할수있는방법을제시하며,임베디드리눅스를위한설계모델과리눅스의BSP(BoardSupportPackage)구조를알기쉽게설명하고있다.이책에서제시하는임베디드리눅스용드라이버나응용프로그램의작성,디버깅,프로파일링에이용되는솔루션은현장에서실무에바로적용할수있는수준으로구성되어있으며,또한시스템의부팅시간을줄이거나메모리를최적화하는기법과응용프로그램에서의메모리누수와충돌을찾아내는방법들을제공하고있다.
이책의주요내용은다음과같다.
?uClinux와일반리눅스의차이점을설명한다.
?기존의RTOS로부터임베디드리눅스로응용프로그램을포팅하는방법을설명한다.
?MTD(MemoryTechnologyDevice)모델과플래시기반의저장장치들에대해설명한다.
?메모리락킹,실시간시그널,비동기IO등의POSIX.1b실시간확장을사용한실시간프로그래밍기법에대해설명한다.
추천의글
“이책의저자들은임베디드리눅스개발에필요한모든사항들을적절히제공해주고있다.이책에서는BSP,임베디드시스템용저장장치,실시간리눅스프로그래밍등의주제를비롯하여임베디드시스템용그래픽스시스템과uClinux에대한내용도명쾌하게설명되어있다.”
토드피스처_Cadenux의대표
“리눅스의프레임버퍼인터페이스를상세히다룬책-많은개발자들이이책을유용하게사용할것이다.”
그렉해얼_센추리소프트웨어의CEO이자설립자
“uClinux와그기반구조에관한훌륭한개론서”
데이빗맥컬로프_uClinux의핵심개발자
이책의내용및특징
이책의주제는크게두가지이다.
?기존의RTOS에서임베디드리눅스로시스템을이전하는것을도와준다.
?임베디드리눅스를이용한시스템설계모델을설명한다.
이책에서얻을수있는것들
이책은임베디드리눅스환경에서프로그래밍을할때개발자가직면하는여러가지문제점들에대한해결책을제시한다.몇가지일반적인문제점들을나열하면다음과같다.
?임베디드리눅스개발모델을이해한다.
?응용프로그램및임베디드리눅스용드라이버를작성,디버깅,프로파일링한다.
?임베디드리눅스BSP구조를이해한다.
이책에서는위의문제점들에대한실제적인해결책을제시한다.
이책을읽은후에독자는다음과같은일들이가능해질것이다.
?임베디드리눅스개발환경을이해한다.
?하드웨어플랫폼을위한리눅스BSP를작성한다.
?임베디드저장장치를위한리눅스의모델을이해하고그에대한드라이버와응용프로그램을작성한다.
?직렬포트,I2C등여러가지임베디드리눅스용드라이버를이해한다.
?기존의RTOS에서작성된응용프로그램을임베디드리눅스로포팅한다.
?임베디드리눅스상에서실시간프로그램을작성한다.
?응용프로그램이나드라이버상의메모리누수나충돌을찾아내는방법을익힌다.
?커널과응용프로그램을프로파일링하는방법을익힌다.
?uClinux의구조와프로그래밍모델을이해한다.
?임베디드리눅스그래픽스서브시스템을이해한다.
또한이책은관리자들이임베디드리눅스배포판을선택하거나,현재의시스템을임베디드리눅스로이전하기위한로드맵을작성하고,상용제품에리눅스라이선스모델을적용하는데도움을준다.
이책의대상주요독자층
?아키텍트:이들은실시간성,성능,포팅계획등에많은관심을갖고있다.
?소프트웨어프로그래머:이들은기술적인상세한부분을익힐필요가있다.
이책의대상보조독자층
?관리자:이들은주로판매사,배포판,버전,개발도구등을선택하는데관심을갖는다.
?테스팅및지원팀:임베디드리눅스로시스템을이전하면제품의룩앤필(lookandfeel)이달라지기때문에,이들도교육이필요하다.
?법률관계자:대부분의임베디드제품들은지적재산권을포함하고있기때문에라이선스문제에대한오해가회사에손실을가져다줄수있다.
배경지식
이책의독자는임베디드OS(어떠한것이든지)상에서프로그래밍을하는것에대한기본적인이해를요구한다.이책은리눅스커널을설명하는책이아니기때문에기본적인리눅스커널의개념과사용자공간의프로그래밍모델에익숙한사람을대상으로한다.이책은특정커널버전에종속되지않도록노력했지만예제가필요한경우에는2.4혹은2.6커널을사용했다.
소스코드다운로드받기
아래의URL을통해이책에서사용된모든소스코드를다운로드받을수있다.
?http://www.crcpress.com/e_products/downloads/download.asp?cat_no=AU0586
베타테스트를마치고
박정태
(중앙대학교대학원컴퓨터공학과,모바일및임베디드컴퓨터시스템박사과정)
임베디드리눅스입문서로서아주적합한책!
컴퓨터공학을전공하고있는학생들에게임베디드리눅스를이용한시스템설계실습을지도하고있는테스터는학생들에게다양한경험을할수있도록하기위한방법을생각해왔다.학생들이실전에나가서실력을발휘하기위해서는다양한경험이중요한토대가된다고생각하기때문이다.
아직까지RTOS를사용하는기업이많지만학생들이수많은RTOS를모두접하기어려운상황이다.이런환경에적응하기위해RTOS와임베디드리눅스의다양한면을이해한다면이는학생개개인에게큰힘이될것이며이책을통해많은부분에대한이해의폭을넓힐수있을것으로생각된다.특히,그동안다른서적에서접하기어려웠던배포판에대한정리나실시간리눅스,uClinux에대한설명은소중한자료임에틀림없다.또한임베디드리눅스를접하는학생들이어려워하는부분인임베디드저장장치및그래픽스부분에대한자세한내용도많은도움이될것이다.응용프로그램포팅,실시간리눅스에대한설명은실습과제로서도훌륭히사용할수있을것으로생각된다.
박상오
(중앙대학교대학원컴퓨터공학과,모바일및임베디드컴퓨터시스템박사과정)
임베디드리눅스프로젝트를위한훌륭한로드맵제시!
독자들과마찬가지로현업에서다양한프로젝트를진행하고있는테스터도새롭게시작하는프로젝트인경우보다이미펌웨어수준에서작성되었거나RTOS를사용하고있는프로젝트에새로운요구사항을추가해야하는경우추가되는요구사항을기존프로젝트의수정으로추가할지,임베디드리눅스를사용해새롭게구현할지를고민한경우가여러번있었다.이의결정에는요구사항의수준이나프로젝트기간,비용등여타의많은요소들이영향을미치지만임베디드리눅스를사용하여좋은결실을맺은경우가대부분이었다.
이책은임베디드리눅스를사용한프로젝트를위한전체적인로드맵을제시해주고있으므로앞서테스터가했던고민을하고있는프로젝트관리자나개발자들에게좋은지침이되어줄것으로확신한다.