'분류 전체'에 해당되는 글 174건

  1. 2014.05.13 안드로이드 연락처 중복 문제 해결 - naver 주소록 백업 App (1060)
  2. 2014.05.13 신상털이 방지 - Protect your personal info (4)
  3. 2014.05.07 SQLite compare tool (Diff Viewer) (4)
  4. 2013.11.04 카카오톡 여러 디바이스에서 사용하기. (6)
  5. 2012.12.17 [그래픽스/HW5] 3D Viewing - 뷰잉좌표 계산 및 카메라의 이동, 회전, 줌인 줌아웃. (4)
  6. 2012.09.17 리눅스 내부 구조 공부 (2)
  7. 2012.05.20 iOS Programming 강좌 (2)
  8. 2012.05.07 Restlet Framework (1)
  9. 2012.04.01 [Scrap] 안드로이드 개발 환경 구축
  10. 2011.12.06 [펌] Linux & Open Source Software
  11. 2011.12.03 Steve jobs 가 정의한 객체지향 소프트웨어
  12. 2011.05.09 스타워즈 Ep1속에 나오는 가정법 과거
  13. 2011.05.08 사이트 우회하기 - applanet.net 접속법 (8)
  14. 2011.04.05 임베디드 리눅스 http://blog.naver.com/PostList.nhn?blogId=poohyjk3&categoryNo=5&currentPage=2
  15. 2011.04.05 [펌]임베디드 리눅스 관련 사이트 Embedded
  16. 2011.04.05 임베디드 시스템 엔지니어를 위한 리눅스 커널 분석 - 남상규 http://ruby.medison.co.kr/~halite
  17. 2011.04.05 리눅스 처음켰을때!!!! -- http://www.rwc.uc.edu/thomas/Intro_Unix_Text/Process.html
  18. 2011.04.05 리눅스 명령어 모음
  19. 2011.04.05 커널 링 버퍼에 들어간 메시지 확인하기 dmesg - http://www.ibm.com/developerworks/kr/library/l-linux-kernel/
  20. 2011.02.14 오랜만에 블로그를 들리는구나... :)
  21. 2010.07.27 싸이 탈퇴 자들이 많아 진건가?? 네이트 온은 왜 또 삽질이지..
  22. 2010.07.23 최고의 P2P 클라이언트는....?
  23. 2010.07.23 네트워크에서 익명성을 보장하고 싶다면...
  24. 2010.07.23 CodeSonar 를 아시나요?
  25. 2010.07.06 리눅스 초보 - 커널, 배포판 .. 등
  26. 2010.07.06 Internet Explorer 에서 Google Picasa 다운로드 하기
  27. 2010.06.18 티스토리 초대장 방출! -마감
  28. 2010.06.18 Eclipse CDT 에서 gcc 툴체인 안잡히는 분..
  29. 2010.06.18 EDITPLUS JAVA 컴파일 환경 구축
  30. 2010.05.22 HTML5를 이용한 웹 Photoshop - SketchPad
분류없음2014.05.13 10:29

네이버 주소록 백업 앱으로 phone -> naver 동기화시
중복된 주소는 하나로 저장이 되기 때문에

1) phone -> naver 동기화후
2) phone에 있는 주소를 전부 삭제하고
3) naver -> phone으로 동기화


중복 연락처가 정리된다는 말씀 ! :)

단, 어떤일이 발생할지 모르기때문에 백업은 해두고 하세요 ~ 







신고
Posted by ipod apple

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:20 [ ADDR : EDIT/ DEL : REPLY ]
  3. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:20 [ ADDR : EDIT/ DEL : REPLY ]
  4. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:21 [ ADDR : EDIT/ DEL : REPLY ]
  5. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:27 [ ADDR : EDIT/ DEL : REPLY ]
  6. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:27 [ ADDR : EDIT/ DEL : REPLY ]
  7. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:28 [ ADDR : EDIT/ DEL : REPLY ]
  8. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:29 [ ADDR : EDIT/ DEL : REPLY ]
  9. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:34 [ ADDR : EDIT/ DEL : REPLY ]
  10. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:34 [ ADDR : EDIT/ DEL : REPLY ]
  11. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:36 [ ADDR : EDIT/ DEL : REPLY ]
  12. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:41 [ ADDR : EDIT/ DEL : REPLY ]
  13. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:41 [ ADDR : EDIT/ DEL : REPLY ]
  14. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:44 [ ADDR : EDIT/ DEL : REPLY ]
  15. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:44 [ ADDR : EDIT/ DEL : REPLY ]
  16. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:49 [ ADDR : EDIT/ DEL : REPLY ]
  17. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:51 [ ADDR : EDIT/ DEL : REPLY ]
  18. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:52 [ ADDR : EDIT/ DEL : REPLY ]
  19. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:56 [ ADDR : EDIT/ DEL : REPLY ]
  20. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:56 [ ADDR : EDIT/ DEL : REPLY ]
  21. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.09.29 10:59 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2014.05.13 10:14

원문 : http://q-lab.tistory.com/


 원가입시 이메일을 요청할 때,
신상에 대해 유출이 될 것을 염려한다면,
한번 쓰고 버릴 수 있는 1회용 이메일 서비스를 쓰는 것은 어떨까 ?
아래 계정으로 트위터 및 Facebook등 계정을 만들 수 있다.

또한 익명으로 이메일을 보낼 수도 있다.

마음에 든다면 "비트코인"등으로 기부도 가능하다.


 When registering some service,
there might be requirement of email information.

However, if you are afraid of being revealed part of your information,
you can substitute as anonymous email address.

you can try registering facebook, twitter and so on by this service.

If you like the service, you can donate by "Bitcoin"


Click here to use anonymous email service!
http://spam4.me





신고
Posted by ipod apple

댓글을 달아 주세요

  1. http://vegter.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://naizengzi.1dumb.com/led%e3%83%a9%e3%82%a4%e3%83%88-21/
    http://forum.ignaciag.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://jieyiyi.onedumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://mollietesh.net/viewtopic.php?f=2&t=256
    http://www.guadalupep.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://www.tomikap.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://blog.macknightt.com/?p=4582
    http://blog.kellermane.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://forum.bacichn.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://www.articleshemika.com/
    http://zhougonghe.usa.cc/?p=4177
    http://liangtangjin.cz.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://zhaosongxing.eu.tf/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://qingtaizu.pl.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/

    http://mundahl.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-3/
    http://forum.wyattm.com/led%e3%83%a9%e3%82%a4%e3%83%88-12/
    http://degross.in.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_5.html
    http://nengrangli.1dumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://pizano.cu.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://sennoo.com/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://destinyuu.dns-stuff.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://blog.dereknt.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://ww.arsenea.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://www.kasandrav.com/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://jinmanhu.onedumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://maniuyang.pl.tf/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://ashleyzuver.org/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://fhlorencio.flu.cc/led%e3%83%a9%e3%82%a4%e3%83%88-16/
    http://montejamer.biz/led%e3%83%a9%e3%82%a4%e3%83%88-5/

    2014.08.25 00:44 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. http://ww.nuaness.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://yougongyang.longmusic.com/led%e3%83%a9%e3%82%a4%e3%83%88-16/
    http://forum.ignaciag.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://www.minhss.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://sethmasaracchia.organiccrap.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-17/
    http://ww.lucillemu.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://sishutong.ch.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://blog.mirnac.com/?p=4599
    http://sibu.2waky.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://liukouqi.onedumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-16/
    http://gailspaun.cu.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-18/
    http://youguoyu.longmusic.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://forum.velmaya.com/?p=4768
    http://blog.doriaha.com/?p=4677
    http://ronaldarnst.biz/viewtopic.php?f=2&t=247

    http://zinong.usa.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://www.mccurem.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://ww.dawleycn.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://hantelle.flu.cc/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://tiandiren.wikaba.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://squires.in.net/
    http://linder.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://bradleycurly.biz/led%e3%83%a9%e3%82%a4%e3%83%88/
    http://www.jeffereyg.com/?p=4683
    http://gaozuxing.de.tf/?p=3732
    http://ww.stewartrr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://tangfaxia.ca.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://marcusgruse.org/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_6.html
    http://bridgefordtranslation.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://taizuxing.ca.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/

    2014.08.25 10:49 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:01 [ ADDR : EDIT/ DEL : REPLY ]
  4. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:01 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2014.05.07 18:00

Beyond compare 와 같이 두 SQLite 파일에 대해서

Diff view를 가능하게 해주는 프로그램 입니다.



코드프로젝트에서 거의 ★ 5개네요 ~ 

링크 : http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility



신고
Posted by ipod apple

댓글을 달아 주세요

  1. http://ww.capouchen.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://shaunfeser.org/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_3.html
    http://antoniahfi.dnset.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://daxiaodai.at.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://forum.connien.com/?p=4602
    http://blog.peter-jack.com/led%e3%83%a9%e3%82%a4%e3%83%88-9/
    http://forum.lottien.com/?p=4722
    http://zhishizu.eu.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-17/
    http://jared.xxuz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://shenyishi.zzux.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://www.crismonon.com/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://forum.bacichn.com/?p=4735
    http://bridgefordtranslation.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://www.gegenheimer.pw/
    http://jefferson.fartit.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/

    http://shijianbing.zzux.com/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://gaildomenget.toythieves.com/?p=4253
    http://junekeele.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_4.html
    http://fanxunmeng.at.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://ww.norrickc.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://blog.ignaciag.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://robbiegass.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_4.html
    http://ww.arsenea.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://forum.corkernrn.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://ww.wanitae.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://blog.rufussu.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://ww.cernohouss.com/led%e3%83%a9%e3%82%a4%e3%83%88-12/
    http://forum.thadk.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://stankki.ddns.mobi/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://welton.in.net/viewtopic.php?f=2&t=256

    2014.08.24 00:59 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. http://lofwallhg.usa.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://www.brazzlee.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://pellot.in/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_2.html
    http://eryazhe.at.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-18/
    http://naidatong.1dumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://quanzaizi.dumb1.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://lovick.in/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_3.html
    http://www.eberhearts.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://sittman.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://nengyongshi.1dumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://enhlvia.usa.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-17/
    http://tanggaozu.at.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://www.abramowitz.pw/
    http://weishuwu.us.tf/led%e3%83%a9%e3%82%a4%e3%83%88-21/
    http://yaoshunxing.bg.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/

    http://nengyongshi.1dumb.com/led%e3%83%a9%e3%82%a4%e3%83%88-4/
    http://mirna.zyns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://krzewinski.instanthq.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://lizhixin.onedumb.com/led%e3%83%a9%e3%82%a4%e3%83%88-6/
    http://ww.grandnere.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://dantes.in/led%e3%83%a9%e3%82%a4%e3%83%88-3/
    http://forum.arsenea.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://andreaameen.biz/viewtopic.php?f=2&t=252
    http://chungpiek.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_4.html
    http://yushushu.epac.to/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://andreaameen.biz/viewtopic.php?f=2&t=265
    http://rakyta.in/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_2.html
    http://blog.kandyv.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://forum.suzannnns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://ww.ethankss.com/led%e3%83%a9%e3%82%a4%e3%83%88-3/

    2014.08.24 19:50 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. [url=http://westers.se/jp/led1-50.html]Ycf-372送料無料[/url]
    [url=http://westers.se/jp/led1-13.html]Led ピンク 3mm高品質[/url]
    [url=http://westers.se/jp/led1-5.html]ペンダントライト ソケット E17大得価[/url]
    [url=http://westers.se/jp/led1-95.html]ペンダントライト 森高品質[/url]
    [url=http://westers.se/jp/led1-9.html]シーリングライト 持ち帰り経典[/url]
    [url=http://westers.se/jp/led1-57.html]スポットライト ブラシSALE[/url]
    [url=http://westers.se/jp/led1-56.html]Led 訳激安[/url]
    [url=http://westers.se/jp/led1-51.html]Cucina ペンダントライト免税[/url]
    [url=http://westers.se/jp/led1-2.html]ペンダントライト 丸激安限定[/url]
    [url=http://westers.se/jp/led1-66.html]ペンダントライト フォレ最新作[/url]
    [url=http://westers.se/jp/led1-53.html]Led ヨドバシ最安値級[/url]
    [url=http://westers.se/jp/led1-60.html]シーリングライト スイッチ上質[/url]
    [url=http://westers.se/jp/led1-49.html]Led ワット 計算最新の格安本物[/url]
    [url=http://westers.se/jp/led1-72.html]内玄関の照明器具 アンティーク経典[/url]
    [url=http://westers.se/jp/led1-12.html]Pips ペンダントライトSALE[/url]
    [url=http://westers.se/jp/led1-74.html]門柱 スポットライト大得価[/url]
    [url=http://westers.se/jp/led1-34.html]ペンダントライト 東芝超美品[/url]
    [url=http://westers.se/jp/led1-46.html]Led 0.5w 明るさ品質保証[/url]
    [url=http://westers.se/jp/led1-17.html]シェリ[cheri] Bbp-047 ボーベル[beaubelle]海外通販[/url]
    [url=http://westers.se/jp/led1-36.html]シーリングライト スポットライト 6灯正規品 [/url]
    [url=http://westers.se/jp/led1-37.html]電池 照明 おしゃれ安い[/url]
    [url=http://westers.se/jp/led1-40.html]ペンダントライト 勉強部屋高品質[/url]
    [url=http://westers.se/jp/led1-86.html]ペンダントライト グリム人気[/url]
    [url=http://westers.se/jp/led1-18.html]Efa25en/20h2014人気新作品[/url]
    [url=http://westers.se/jp/led1-41.html]小型シーリングライト アンティーク2014激安限定[/url]

    2014.08.28 19:01 신고 [ ADDR : EDIT/ DEL : REPLY ]
  4. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:01 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2013.11.04 04:34

약간의 꼼수입니다.

컴퓨터에 원격제어 프로그램을 깔고, (ZOOK, Teamviewer 등...)

다른 모바일 디바이스(탭, 2nd 폰 등..)에서 원격으로 접속하여

PC용 카카오톡에 접속하는것이죠 :)



신고
Posted by ipod apple

댓글을 달아 주세요

  1. http://garsee.cu.cc/led%e3%83%a9%e3%82%a4%e3%83%88-8/
    http://kenzie.in/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_7.html
    http://patriciaulshafer.sexidude.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-17/
    http://eichler.dns-stuff.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://buy-in-global.net/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://eliseoalbro.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_6.html
    http://margrettcapouch.justdied.com/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://forum.tracymy.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://blog.mauranr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://forum.kurtisera.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://ww.yicancan.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://blog.wernerr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://www.maybelll.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://vikkimosca.cu.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-16/
    http://www.spainhower.pw/

    http://bearin.cu.cc/led%e3%83%a9%e3%82%a4%e3%83%88-15/
    http://www.colinni.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://melvinlouch.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_4.html
    http://ww.athearnn.com/led%e3%83%a9%e3%82%a4%e3%83%88-10/
    http://www.vanderlinde.pw/
    http://shuanglugai.wikaba.com/led%e3%83%a9%e3%82%a4%e3%83%88-17/
    http://blog.bacichn.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://wardhaugh.pw/led%e3%83%a9%e3%82%a4%e3%83%88-2/
    http://xingliaodong.compress.to/led%e3%83%a9%e3%82%a4%e3%83%88-9/
    http://blog.arsenea.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://qingchihuang.pl.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://youjiusheng.longmusic.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://strehl.in/viewtopic.php?f=2&t=242
    http://burmanjuwa.dns-stuff.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://blog.jaquayy.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/

    2014.08.25 01:21 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. http://yueshinong.sg.tf/led%e3%83%a9%e3%82%a4%e3%83%88-9/
    http://ww.anibalj.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://www.guadalupep.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://blog.kudronv.com/?p=4741
    http://blog.hitactarps.com/led%e3%83%a9%e3%82%a4%e3%83%88-8/
    http://hanyejian.youdontcare.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-17/
    http://salvatoregarand.mefound.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://forum.eberhearts.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://zofiakpows.dynamicdns.co.uk/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://ww.coreyi.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://forum.linhyc.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://belen.ibiz.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://stewart.dns05.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://guadalupejaurequi.jungleheart.com/?p=4210
    http://www.tatsapaugh.pw/led%e3%83%a9%e3%82%a4%e3%83%88-7/

    http://songzhoucheng.bg.tf/?p=3679
    http://www.kuykendoll.pw/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://houhansan.de.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://www.sapiat.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://www.yaoyanxiao.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://blog.vetagg.com/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://jarboe.instanthq.com/led%e3%83%a9%e3%82%a4%e3%83%88-16/
    http://www.articlewaas.com/
    http://songqiji.bg.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://sishutong.ch.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://forum.suzannnns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://valladolide.cu.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://trevorvolland.justdied.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://yauger.in/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://www.wernerkc.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/

    2014.08.25 01:43 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. http://bridgefordtranslation.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://www.bobbysu.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://forum.colinni.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://jiaoxiang.cz.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://blog.reichmannt.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://ww.newmargd.com/?p=4471
    http://forum.nuaness.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://minhslavik.mefound.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://xiaozhujian.compress.to/led%e3%83%a9%e3%82%a4%e3%83%88-18/
    http://ww.charlotl.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-16/
    http://rathai.dns04.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://picerno.x24hr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-15/
    http://ww.eliciac.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://songzhoucheng.bg.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://jingzitong.cz.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/

    http://kasandra.fartit.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://kandye.dynamic-dns.net/led%e3%83%a9%e3%82%a4%e3%83%88-4/
    http://blog.kudronv.com/led%e3%83%a9%e3%82%a4%e3%83%88-6/
    http://darlayokum.org/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_6.html
    http://www.articleanibal.com/
    http://forum.leighba.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://hanjun.de.tf/led%e3%83%a9%e3%82%a4%e3%83%88-18/
    http://shuxue.bg.tf/led%e3%83%a9%e3%82%a4%e3%83%88-19/
    http://www.ignaciag.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://blog.peter-jack.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://robjobst.biz/led%e3%83%a9%e3%82%a4%e3%83%88-3/
    http://www.articlebrooks.com/
    http://juqifan.onedumb.com/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://forum.mcinteei.com/?p=4679
    http://forum.marilyngg.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/

    2014.08.25 12:39 신고 [ ADDR : EDIT/ DEL : REPLY ]
  4. [url=http://westers.se/jp/led1-22.html]エグロ リアン照明 激安大得価[/url]
    [url=http://westers.se/jp/led1-29.html]ペンダントライト サポーター人気SALE[/url]
    [url=http://westers.se/jp/led1-3.html]Led 90度2014激安限定[/url]
    [url=http://westers.se/jp/led1-17.html]シーリングライト レトロ低価[/url]
    [url=http://westers.se/jp/led1-56.html]ペンダントライト 1灯 イエナ [iena] インターフォルム[interform] Lt-8212100%保証品質[/url]
    [url=http://westers.se/jp/led1-19.html]ペンダントライト エアコン 風激安限定[/url]
    [url=http://westers.se/jp/led1-52.html]ハイブリッドフォーチュン2014人気新作品[/url]
    [url=http://westers.se/jp/led1-69.html]Efg15el10h2 昼白色通販料金訳ありセール[/url]
    [url=http://westers.se/jp/led1-68.html]Hk9335最安値100%保証品質[/url]
    [url=http://westers.se/jp/led1-96.html]Led 6w正規品SALE[/url]
    [url=http://westers.se/jp/led1-37.html]電池 照明 おしゃれ安い[/url]
    [url=http://westers.se/jp/led1-36.html]シーリングライト スポットライト 6灯正規品 [/url]
    [url=http://westers.se/jp/led1-21.html]照明 Ah811b超美品[/url]
    [url=http://westers.se/jp/led1-40.html]スポットライト 配置名作&新作[/url]
    [url=http://westers.se/jp/led1-10.html]シーリングライト 外し方割引販売 [/url]
    [url=http://westers.se/jp/led1-47.html]スポットライト ミラーボール品揃え最大級[/url]
    [url=http://westers.se/jp/led1-90.html]ペンダントライト ヤザワ限定セール[/url]
    [url=http://westers.se/jp/led1-30.html]ペンダントライト ヨーロッパ100%保証品質[/url]
    [url=http://westers.se/jp/led1-72.html]Lifelex シーリングライト リモコン最新作[/url]
    [url=http://westers.se/jp/led1-48.html]1灯 ストリップ[strip] ディクラッセ[diclasse]限定セール[/url]
    [url=http://westers.se/jp/led1-57.html]スポットライト ブラシSALE[/url]
    [url=http://westers.se/jp/led1-24.html]スポットライト 夢占い格安[/url]
    [url=http://westers.se/jp/led1-79.html]ペンダントライト 長いコードセール[/url]
    [url=http://westers.se/jp/led1-53.html]ペンダントライト ルネッサンス2014人気新作品[/url]
    [url=http://westers.se/jp/led1-31.html]ペンダントライト チェーン得価[/url]

    2014.08.28 19:01 신고 [ ADDR : EDIT/ DEL : REPLY ]
  5. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:01 [ ADDR : EDIT/ DEL : REPLY ]
  6. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:01 [ ADDR : EDIT/ DEL : REPLY ]


그래픽스 수업 5번째 과제인 3D Viewing입니다.

다음과 같은 것을 구현했습니다.
[1] 3D objects들이 정지하고 있는 상태에서
1. 카메라가 제자리에서 회전
2. 카메라가 VPN을 고정시킨 채로 옆으로 이동
3. 정지한 카메라의 줌인, 줌아웃
4. 카메라가 특정한 물체를 중심으로 회전하면서 그 물체를 바라보며 카메라가 회전 이동하는 경우
[2] 카메라와 물체가 동시에 이동하는 경우





*주요소스코드

  • 외적의 대수적 계산(Algebraic operation of cross product)

더보기


  • 3D좌표상에서의 Vector 클래스 정의

    더보기



  • 뷰잉좌표 계산

    1. 뷰잉좌표의 Z축은 카메라의 EyeX,Y,Z 에서 CenterX,Y,Z의 차를 계산하면 나옵니다.(카메라위치에서 카메라가 보는 점 빼기)
    2. View-Up Vector는 단순히 월드좌표상의 Y축(0,1,0)에 해당하겠구요...
    3. VUP과 Z를 외적하면 X축을 구할 수 있고
    4. 다시 z축과 X축을 외적하면 Y축을 구할 수 있습니다.
    * 단위벡터는 그냥 연산시에 크기를 나눠주면 됩니다.

    더보기




*구현된 결과의 비디오 캡쳐 (음성 설명 포함)




Discussion
이번 과제에서 제일 고심했던 부분이 "카메라 제자리 회전" 및 "물체를 중심으로 회전"하는 부분을 구현하는 것 이었습니다.
단순히 월드좌표계기준에서 X,Y,Z 축 회전을 하는 것인지 카메라의 뷰잉좌표의 기준으로 X,Y,Z축인지 명시되어있지 않았기 때문입니다. 월드좌표기준에서 "물체를 바라보며 이동회전"을 하는것이면 그림1(Z축기준 회전의 궤적그림은 생략했습니다) 과 같이 카메라가 궤적을 그리게 되지만 카메라의 뷰잉좌표에서 이동회전을 하게되면 그림2(Y축기준 회전의 궤적만 명시했습니다)와 되기 때문입니다.

뷰잉좌표기준으로 회전을 하려면 다시 glLookat함수의 내부구현, 즉, Cross Product등의 연산을 통해 뷰잉좌표를 알아내야 했으며, 회전시에도 훨씬 더 복잡한 연산이 들어가게 됩니다. 연산 오차 때문인지 그림2와 같이 구현을 하게 되면 퍼포먼스가 떨어졌습니다.(Center<바라보는점>의 좌표가 계속 바뀌더군요 비디오캡쳐 마지막부분에 "스페셜포스"처럼 움직이는 장면설명에서 자세히 보면 바라보는점이 조금씩 움직이는 걸 관찰할 수 있습니다.) 그래서 마우스모션 설정은 그림2와 같이, 키보드 설정은 그림1. 과 같이 구현하였습니다. 이는 3D상에서의 회전이지만 2D 세부분으로 분할하여 간단한 2D회전 변환 공식을 통해 구현할 수있었습니다.

그 외에 3D를 구현하는 것이다 보니, 제가 동영상을 만들어 놓고도 어떻게 작동되는 것인지 너무 혼돈스러워서 x,y,z좌표를 그었고 더불어 xy,yz,xz평면에도 버티컬 처럼 실선을 드문드문 그었습니다(빽빽히 채우면 CPU점유율이 너무 높아져서 퍼포먼스가 떨어지기 때문에 이렇게 했습니다.)

재미삼아 "카운터스트라이크"나 "스페셜포스"와 같은 FPS 3D게임에서의 조작을 비디오캡쳐 마지막 부분에서 Demonstration하였습니다.

이번 과제를 통해 수업시간에 이론으로 배웠던 부분을 좀 더 명확하게 이해할 수 있었고 3D게임제작을 하고 싶은 마음이 들 정도로 흥미로운 과제였습니다. ^^


그림1. 월드좌표 기준


그림2. 카메라의 뷰잉좌표 기준



* 소스는 하기 링크에 있습니다.

http://goo.gl/VH3UU




저작자 표시
신고
Posted by ipod apple

댓글을 달아 주세요

  1. http://liaoxingjin.cz.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://sherbondy.pw/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://www.articleryan.com/
    http://maybell.dns05.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://crippen.ddns.mobi/led%e3%83%a9%e3%82%a4%e3%83%88-17/
    http://ww.corkernrn.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://tongrushu.wikaba.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-16/
    http://ww.hoberrs.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://sibu.2waky.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://blog.fengere.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://ww.rudolphz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://tongrushu.wikaba.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://forum.vanstrander.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://blog.faldynn.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://renchengqi.dumb1.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-17/

    http://pavlo.xxuz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://qingtaizu.pl.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://www.nelsonsv.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://forum.reichmannt.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://marlogrzyb.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_6.html
    http://paysen.in/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_4.html
    http://teresita.cu.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://weixuezhe.us.tf/led%e3%83%a9%e3%82%a4%e3%83%88-6/
    http://elisellki.ddns.mobi/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://jixinxian.wha.la/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://yingbasui.ca.tf/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://forum.marikzi.com/led%e3%83%a9%e3%82%a4%e3%83%88-11/
    http://patricia.x24hr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://hanjun.de.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://belen.ibiz.cc/led%e3%83%a9%e3%82%a4%e3%83%88-16/

    2014.08.22 23:19 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.23 14:31 [ ADDR : EDIT/ DEL : REPLY ]
  3. http://blog.hitactarps.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://ww.suzannnns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://eleonora.flu.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://blog.marikzi.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://weisinger.pw/led%e3%83%a9%e3%82%a4%e3%83%88-8/
    http://ww.burmato.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://qingchihuang.pl.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://kandye.dynamic-dns.net/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://taylorakuna.justdied.com/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://ww.kandyv.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://wangjixi.de.tf/?p=4000
    http://www.anibalj.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://shuxue.bg.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://blog.nelsonsv.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://stradtner.usa.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/

    http://lidaishi.cz.tf/?p=3984
    http://blog.kudronv.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://ww.bobbysu.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://ww.leuthee.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://www.mahrenholz.pw/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://forum.vanstrander.com/led%e3%83%a9%e3%82%a4%e3%83%88-4/
    http://kenethherem.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_5.html
    http://stollar.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://patriciaulshafer.sexidude.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://zailiji.epac.to/led%e3%83%a9%e3%82%a4%e3%83%88-9/
    http://anklam.usa.cc/led%e3%83%a9%e3%82%a4%e3%83%88-6/
    http://forum.eliciaw.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://tomika.x24hr.com/led%e3%83%a9%e3%82%a4%e3%83%88-8/
    http://ledain.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_5.html
    http://yuerenyi.sg.tf/led%e3%83%a9%e3%82%a4%e3%83%88-15/

    2014.08.24 13:06 신고 [ ADDR : EDIT/ DEL : REPLY ]
  4. http://sirmons.in.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_3.html
    http://zhisui.eu.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-15/
    http://www.articleelwood.com/
    http://blog.eliciac.com/?p=4713
    http://blog.morrisdy.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://mackgornick.sexidude.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://paristurke.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_3.html
    http://forum.faldynn.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://www.elenigod.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://vanzante.dnset.com/led%e3%83%a9%e3%82%a4%e3%83%88-19/
    http://www.flinckk.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://guohaoshang.youdontcare.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://janean.zyns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://benko.ddns.mobi/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-15/
    http://leighballs.organiccrap.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/

    http://crippen.ddns.mobi/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://eleniffrw.ikwb.com/led%e3%83%a9%e3%82%a4%e3%83%88-16/
    http://masaracchia.my03.com/led%e3%83%a9%e3%82%a4%e3%83%88-18/
    http://youyasong.longmusic.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://www.crouchc.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://theodorejohar.biz/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://paristurke.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_4.html
    http://mizrahi.mysecondarydns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://forum.avenaav.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://nianwushi.1dumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://xiansishi.us.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://lennyrathai.mefound.com/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://www.marilyngg.com/led%e3%83%a9%e3%82%a4%e3%83%88-3/
    http://forum.brookingg.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://www.petrinahb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/

    2014.08.24 14:17 신고 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2012.09.17 00:45


리눅스 커널 분석


리눅스 시스템 호출을 활용한 커널 명령

http://www.ibm.com/developerworks/kr/library/l-system-calls/


리눅스 부팅 프로세스

http://www.ibm.com/developerworks/kr/library/l-linuxboot/index.html


Boot loader showdown: LILO와 GRUB 이해하기

http://www.ibm.com/developerworks/kr/library/l-bootload.html




신고
Posted by ipod apple

댓글을 달아 주세요

  1. http://www.danettezz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://bertramfall.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_6.html
    http://volland.xxuz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-16/
    http://ww.zanebe.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://forum.yaoyanxiao.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://averyfibh.dynamicdns.co.uk/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-17/
    http://gillings.zyns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://forum.anibalj.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://zhongyongzhe.usa.cc/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://trevorvolland.justdied.com/led%e3%83%a9%e3%82%a4%e3%83%88-18/
    http://blog.qdjinyang.net/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/
    http://ww.josephhc.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://forum.karrenberge.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://www.rudolphz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://teuteberg.itemdb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/

    http://tangfaxia.ca.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://forum.burmato.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://naidatong.1dumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://tiandiren.wikaba.com/led%e3%83%a9%e3%82%a4%e3%83%88-18/
    http://forum.yeseniass.com/led%e3%83%a9%e3%82%a4%e3%83%88-13/
    http://www.macknightt.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://juqifan.onedumb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://yueqiudong.epac.to/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://www.articlethommarson.com/
    http://humpries.mysecondarydns.com/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://www.suzannnns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://www.ethylf.com/led%e3%83%a9%e3%82%a4%e3%83%88-11/
    http://valliesenno.toythieves.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://clarenceselia.org/viewtopic.php?f=2&t=238
    http://blog.ellenai.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/

    2014.08.25 00:35 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:01 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2012.05.20 23:36

Lynda.com - iOS SDK Essential Training (2012)



신고
Posted by ipod apple

댓글을 달아 주세요

  1. http://rakyta.in/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_3.html
    http://forum.dereknt.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://bevins.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-6/
    http://www.delenak.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://liujingzhe.pl.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://ransler.in.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_3.html
    http://www.avenaav.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://forum.suzannnns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://yuegongshang.epac.to/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://ww.bobbysu.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://vikkimosca.cu.cc/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://lidaishi.cz.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://maishu.1dumb.com/?p=4124
    http://shuanglugai.wikaba.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://blog.barbrr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-13/

    http://peagler.in.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88.html
    http://biondi.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-2/
    http://soldow.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-2/
    http://sudlow.in/viewtopic.php?f=2&t=242
    http://blog.charlotl.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://fanxunmeng.at.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://www.eliciac.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://roemen.in/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_1.html
    http://verkamp.ikwb.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://weishuwu.cz.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://blog.burmato.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://www.articleelsy.com/
    http://fucile.in/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://shichunqiu.bg.tf/led%e3%83%a9%e3%82%a4%e3%83%88-9/
    http://forum.alllau.com/led%e3%83%a9%e3%82%a4%e3%83%88-10/

    2014.08.23 10:15 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:01 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2012.05.07 01:17

Restlet Framework를 통해서,

간단히 Restful API를 만들고 서비스할 수 있다.

Java 진영에는 JAX-RS( http://ko.wikipedia.org/wiki/JAX-RS ) 라는 Restful service의 표준 규격이 있고
이것이 구현체라고 볼 수 있겠다. (또 다른 자바진영 구현체로 Resteasy, Jersey 등이 있음)

구글신에 여쭤보니 Restlet framework 에 대한 한글 설명이 많이 없는 것 같다.




▩ IBM 사이트에 설명된 Restful Web service 만들기

--> 현재 Restlet framework 2.1버전까지 나와있는데,
아래 설명글에는 old version (아마도 1.x 대) 기반으로 설명이 되어있으나,
설명을 따라가면 전반적인 Rest의 개념과 어떤 식으로 구현을 할 수 있는지 감을 잡을 수 있을 것이다.

http://www.ibm.com/developerworks/kr/library/tutorial/j-rest/index.html


▩ Manning (출판사) 의 in Action 시리즈 부록 소스코드 (책이 아직 출판 되지 않았음)

(인터파크 발매예정 책 사진 퍼옴)

http://www.manning.com/louvel/REiA.zip

소스코드를 열어서 찬찬히 분석해보면 감을 잡을 수 있을 것이다!


▩ 김문규님의 블로그 내 설명글

꽤나 도움이 된다. ^^

http://www.iamcorean.net/32





신고
Posted by ipod apple

댓글을 달아 주세요

  1. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.23 14:10 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2012.04.01 21:40

 

안드로이드 개발 환경 구축 :: 네이버 블로그

 

 

안드로이드 개발 환경은 크로스(Cross) 개발 환경이다크로스 개발 환경이란 개발할 때와 실행 때에 다른 컴퓨터 환경에서 이루어지는 개발 방법을 말한다여기서 애플리케이션을 개발하는 환경을 호스트(host) 환경애플리케이션을 실행하는 환경을 타켓(Target) 환경이라고 한다.

 

 

※ 안드로이드에 내용은 다음 포스트를 참고 : What is Android?

※ Android 개발툴이 동작하는 환경

   Windows XP(32bit), Windows Vista(32bit/64bit), Windows 7(32bit/64bit)

   Mac OS X 10.3.8 이후(x86판만)

   Linux Ubuntu Dapper Drake

 

※ 용어

ADT : Android Development Tools

AVD : Android Virtual Device

Android DDMS : Android Dalvik Debug Monitor Server

ADB : Android Debug Bridge

 

 

A. 윈도우에서 Eclipse IDE 개발환경 구축하기

A.1. Android 개발환경에 필요한 소프트웨어를 다운로드하여 설치한다.

    * Android SDK

      Version : 2.1   /  1.6   /   1.5

      Download : http://developer.android.com/sdk/index.html

      압축을 적당한 위치에 해제한다. (D:\AndroidDev\android-sdk-windows)  

 

    * Java SE Development Kit (JDK6)

      Download : http://java.sun.com/javase/downloads/widget/jdk6.jsp

    

    * Eclipse IDE for Java Developers

      Download : http://www.eclipse.org/downloads/

        따로 인스톨 필요없고적당한 폴더에 해제한다.(D:\AndroidDev\eclipse)

 

 

 

A. 

2. Eclipse에서 Andorid 개발툴 플러그인을 설치하기

   Eclipse를 시작한다

   Help > Install New Software... 선택한다.

 

   Install 창에서 [Add...]버튼을 선택하고플러그인 사이트를 등록한다.

      Name : Android plugin

      Location :     

http://dl-ssl.google.com/android/eclipse/

 

 

Install 창에서 Work with   위에서 등록한 사이트를 선택한다.

   아래 화면과 같이 Developer Tools를 체크하고, [Next >]버튼을 클릭한다.

  Install Details에서 Android DDMS, Android Developement Tools 를 선택하고,

  [Next >] 버튼을 선택한다.

설치중...

A. 

2. Eclipse에서 Android SDK의 경로 지정하기

    Eclipse를 실행하여 Window > Perferences를 선택한다.

    Android 를 선택하고 SDK Location 에 위에서 Android SDK 설치한 폴더를 선택한다.

    (여기서는 D:\AndroidDev\android-sdk-windows로 설정)


A. 

3. 

Eclipse에서 Windows > Android SDK and AVD Manager 선택한다.

   Available Packages를 선택하고 설치할 SDK Google API를 체크한다.

   [Install Selected]버튼을 클릭한다.


   Accept All을 선택하고, [Install Accepted]버튼을 선택한다.


   설치가 완료되면 [Yes] 버튼을 선택하고 ADB를 재시작한다.


A. 

4. 이제 Virtual Device를 생성해야 한다.

    

Android SDK and AVD Manager 창에서 Virtual Devices를 선택하고,

   [New...]버튼을 선택한다.

  Create new AVD창에서 아래와 같이 입력하고, [Create AVD]버튼을 선택한다.

  여기서 SD Card 사이즈를 너무 크게 설정하면 해당 Virtual Device를 구동(Android 부팅)할 때 메모리를 많이 소비하고 부팅시간이 오래 걸리기 때문에 실행하려는 애플리케이션에서 사용하는 메모리를 고려하여 설정한다여기서는 간단한 프로그램을 구동할 것이므로 SD 카드 메모리의 크기를 64MB  또는 128MB 정도 설정한다.

여기까지 하면 Android 애플리케이션을 개발하기 위한 개발환경 세팅 

 완료되었다.

 

 

B. Android 애플리케이션 프로젝트 생성/컴파일/실행

B.1. Eclipse 에서 File > New > Android Project 를 선택한다.

   아래 화면과 같이 입력하고, [Finish]버튼을 선택하고 프로젝트를 생성한다.

   ( 

HelloWorld 라는 2.1 버전 플랫폼에서 돌아가는 프로젝트를 생성하는 예)


- Application Name : 안드로이드 메인화면에 표시되는 애플리케이션의 이름
- Package Name : Java
의 패키지명패키지는 컨테이너에 포함된 타입의 고유의 식별자 및 접속 경로를 제공하는 것
- Create Activity : 
안드로이드 어플리케이션을 윈도우를 제어하는 클래스의 이름. Activity UI화면을 제어하는 클래스.


다음 프로젝트를 생성한 결과이다.


  Eclipse에서 Run > Run 을 선택하고

  Run As 에서 Android Application을 선택하고, [OK]버튼을 선택하다.


Android SDK and AVD Manager가 실행되면 여기서 기존 등록해 둔 AVD를 선택하고

[Start...]버튼을 선택한다.

드디어 Android가 실행되는 화면을...


(여기서 컴사양에 따라 실행속도가 많이 차이난다.

만일 부팅 시간이 생각보다 오래(3분이상걸리다면 

  

 AVD SD 카드 메모리 사이즈를 너무 크게 설정한 것이 아닌지 확인해본다여기서 간단한 프로그램 구동하는 것이므로 64mb 또는128mb정도가 무안하다이 이상으로 설정했다면 이클립스의

Android SDK and AVD Manager 창에 가서 실행하려는 AVD  SD 카드 메모리 사이즈를 조정하면 부팅속도가 빨라질 것 이다.

부팅이 완료되고위에서 생성한 HelloWorld라는 애플리캐이션이 실행된다.

 

모든 프로그램 HelloWorld하면 끝난거 아닌가?ㅋㅋ

 

iPhone App. 개발의 경우 Mac OS가 필요하고실제 하드웨어에 프로그램을 배포할 때도 애플 별도의 인증을 거쳐야 하나

Android App. 같은 경우 개발환경(윈도우/리눅스/Mac)의 거의 제약이 없고배포도 USB로 가능하도고 하니 조만간 많은 App.과 그런 애플케이션을 개발을 용이하게 하는 많은 툴이나 라이브러리가 쏟아져 날올 것으로 예상된다개인적으로 Android 개발 환경이 Java 계열이라

 GUI 디자이너가 iPhone GUI 디자이너나 Visual Studio (Mobile Window 개발툴)와 같은 툴에 비해 다소 불편한 것 어쩔수가 없다하지만Android는 모든 것이 오픈소스이니 수년내에 iPhone을 뛰어 넘을 정도로 발전하지 않을까 

조심스런 기대를 해 본다.

 

신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2011.12.06 10:26

출처 : http://systemscoaching.kr/62


기억력이 점점 나빠진다. 이해했다고 생각했는데, 나중에 필요하면 다시 꺼내서 다시 공부해야 한다. 그 대표적인 것이 Open Source Software의 개념이다. 이 포스트는 필자의 이해를 바탕으로 작성된 것으로, 어떤 법적인 조언도 담고 있지 않고, 이 포스트의 내용을 참고하는 것은 독자의 선택이며, 필자는 어떤 법적인 책임도 지지 않는다.

 

소프트웨어 라이센스 정책

Open Source

통념적으로 소스코드가 공개되어 누구나 수정하고 재배포할 수 있는 소프트웨어를 말한다. 원작자가 지정한 라이센스 조건만을 지키면, 기업에서도 상용으로 사용할 수 있다. GPL, LGPL, BSD, MPL, Apache 등이 유명한 오픈소스 라이센스 정책이다.

 

Closed Source (Proprietary Source)

소스코드가 공개되어 있지 않고, 저작권자가 통제권을 행사할 수 소프트웨어를 말한다. 저작권자와의 협의(계약)없이 수정하거나 재 배포할 수 없다. 주로 기업이나 기업집단에 의해 독립적으로 소유되며, 라이센싱을 통해 돈을 벌 목적으로 만들어진 소프트웨어로 이해하면 된다.

 

Free Software

“Free lunch”, “Freedom” 에서 사용된 “Free”의 의미는 서로 다르다. 오픈소스는 소스코드를 공개한다는 의미가 강하고, 프리소프트웨어는 “사용의 자유”의 의미가 강하다. 혹자는 “Open source is a development methodology; free software is a social movement.” 라고 말한다.

 

Shared Source

3rd Party들과 계약을 통해 소스코드를 공개하는 수준을 정의한 Microsoft의 라이센스 정책이다. 계약의 형태에 따라, 완전 Closed Source 계약, Source Code 참조 가능 계약, 수정 및 재배포 가능 계약으로 나누어질 수 있다.

 

오픈소스 소프트웨어의 장점

a. 방대한 개발자 커뮤니티 ? 전세계 개발자들이 오픈된 토론을 통하여 해당 오픈소스 소프트웨어의 구조, 버그 패치, 기능을 계속 발전시킨다. 전세계의 많은 개발자들이 프로젝트에 참여하기 때문에, 한 개 또는 몇개의 기업이 참여한 클로즈드소스 프로젝트에 비해 훨씬 많은 개발자 리소스를 확보할 수 있게 된다.

b. 빠른 개발 및 품질 검증 ? 전세계 개발자들이 참여하므로 개발의 속도나 버그 패치의 속도면에서 클로즈드소스 프로젝트에 비해 훨씬 빠르다.

c. 더 큰 에코시스템 ? 클로즈드소스 프로젝트가 갖는 폐쇄형 개발 생태계에 비해서?전통적인  갑을관계에서 솔루션/용역 업체들을 줄세워 봐야 손으로 꼽을 수 있을 정도이다?, 오픈된 소스를 이용하여 상용화 서비스를 제공하는 많은 기업들이 존재한다.

d. 표준 기반 소프트웨어 ? POSIX, SVR4, BSD Socket과 같은 산업 표준을 사용하므로 산업/시장간의 경계를 허물어 뜨리고, 기존 개발 결과물들의 재활용성을 높여 준다.

e. 소스코드 제공

f. 비용 절감

 

GPL(General Public License)

 

 

 

소프트웨어 개발자가 GPL 라이센스 정책을 선택한다면, ⓐ 저작권을 표시하고 ⓑ 무보증 (No warranty) 조항을 표시하고 ⓒ GPL로 배포됨을 명시해야 한다. 자신이나 제 3자의 특허를 포함하여 개발한 소프트웨어를 GPL로 배포한다면, 자신의 특허에 대한 Royalty를 청구할 수 없고, 제 3자도 특허에 대한 Royalty를 청구할 수 없다?제 3자의 특허를 사용하여 소프트웨어를 만들고 GPL로 배포하고자 한다면, 특허를 가진 제 3자에게 사전 동의를 얻어야 한다*. GPL로 선언된 소스코드를 수정한 코드 (Derived Work)는 GPL 조건을 따라야 한다. GPL로 선언된 콤포넌트를 링크한 (Static, Dynamic Link 모두에 해당) 상위 Application은 GPL 조건을 따라야 한다.


* GPLed 소프트웨어 개발자는 자신이 채용한 알고리즘 등에 대한 특허권 존재 여부를 잘 모른다. 이런 경우에 특허권자는 GPL 소프트웨어 개발자 보다는, GPL 소프트웨어를 사용하는 기업에 특허 소송을 한다. 이는 경제논리로서, 개인보다 기업에 청구해야 돈이 나오기 때문이다. 이런 숨어 있는 특허권의 위험성을 사전에 찾아 주는 툴이 BlackDuck社의 ProtexIP이다.

 

LGPL (Lesser GPL)

 

소프트웨어 개발자가 LGPL 라이센스 정책을 선택한다면, ⓐ 저작권을 표시하고 ⓑ 무보증 (No warranty) 조항을 표시하고 ⓒ LGPL로 배포됨을 명시해야 한다. LGPL 선언된 소스코드를 수정한 코드는 다시 LGPL로 배포되어야 한다. LGPL 선언된 콤포넌트를 수정하여 Static Link/Dynamic Link하는 Application은 다시 LGPL로 배포될 필요는 없다. 다만, 콤포넌트를 수정하여 상위 Application에 Static Link를 했을 경우, 수정된 LGPLed 원본(Static Link된 Component)의 바이너리 코드는 제공해야 한다 (Section 6).

 

Linux System Architecture

 

일반적으로 Linux System은 아래 그림과 같이 Kernel Space와 User Space로 나눌 수 있다. Kernel 자체는 GPL이며, Kernel과 Static으로 엮이는 Device Driver도 당연히 GPL이 되어야 한다. 반면, Kernel과 System Call을 통해서 접근하는 User Space의 Application들은 라이센스 정책을 자유롭게 취할 수 있다. 그리고, 다행히도 User Space에서 구동하는 주요 Open Source Library들은 99%가 non-GPL로 선언 되어 있어서, 이들을 Link해서 사용할 경우 소스 공개에 의무는 없어진다.

 

대표적인 Linux Middlewares

 Middleware or Library

Function

Licenses

glibc

Standard C library

LGPL

libg++

Standard C++ library

LGPL

Qt

Graphics framework

LGPL/Proprietary

libjpeg

Jpeg library

IJG's free license

ffmpeg

Multimedia Framework (Codecs)

LGPL

Gstreamer

Multimedia Framework

LGPL

 

libc

Android에서는 Linux에서 대표적인 C Runtime인 glibc나 uclibc를 사용하지 않고, bionic libc를 사용한다. 이들은 LGPL로 선언되어 있으나, 어떤 이유에서인 지 몰라도, Android에서는 라이센스문제가 전혀 없는 bionic을 사용하였다. 때문에, gcc로 컴파일되는 Native C코드를 작성하게 되면 복잡한 NDK(Native Development Kit) 과정을 거쳐야 한다.

 

Qt

QT는 특이하게 Dual 라이센스 정책을 취하고 있다. 과거까지만 해도, OSI(Open Source Initiative)의 인정을 받지 못했던 QPL이라는 오픈소스 정책과 클로즈드소스 정책의 두가지 정책을 취하고 있었다. QT의 저작권자인 Trolltech이 2008년 Nokia에 인수되고, 2009년에서야 QT를 LGPL QT와 Proprietary QT로 구분하였다.

 

libjpeg

libjpeg은 IJG(International JPEG Group)의 라이센스를 따른다 (아래 그림). 소스를 공개할 의무는 없다.

 

Linux Device Drivers

Linux에서 Device Driver를 작성하는 방법은 두가지가 있다: Direct kernel driver & Binary module.  전자는 Kernel itself라 할 수 있으므로, GPL로 선언된 Linux Kernel에 대한 Derived works에 간주되고, 당연히 GPL로 같이 배포되어야 한다. 반면, 후자는 부트 이후에 Device가 사용될 때 로드되는 Module방식이다 ? "Modules were originally conceived as inserted extentions to a running Linux kernel". 많은 기업들이 Module driver를 바이너리 형태로 배포하고 소스를 공개하고 있지는 않으며, 현재로서는 유일하게 Driver 소스를 공개하지 않는 방법으로 간주되고 있으나, Linux community에서는 이 방법을 놓고 계속 논쟁 중이다. 아래 그림은 내 Ubuntu 넷북에서 Module로 로드된 Driver들이다. (console# lsmod)

 

 

Dynamically loadable driver module은 Memory allocation, bus enumeration, disable/enable interrupts & preemption, networking service, debugging 등의 Kernel Service를 접근해야 한다. 즉, Kernel과 분리된 Standard external kernel symbol을 통해서만 접근해야 함을 의미한다. 아래 그림은 내 넷북에서 사용 가능한 Standard external kernel symbol 들이다. (colsole# gedit /proc/kallsyms)

 

Module Driver에서도 주의할 점이 있다. GPL 선언된 Linux Driver를 참고해서 개발하면, 아무리 Module로 로드한다고 해도, Derived works로 간주되며, 이는 소스를 공개해야 한다는 것이다. Linux Driver를 Module로 개발하기 위해서는 From Scratch(맨땅에 헤딩)로 개발해야 한다.

 

 

기업에서 GPLed, LPGLed 소프트웨어의 활용과 활용 사실 공개

기업에서 상용으로 GPL, LPGL 소프트웨어를 상용 제품의 탑재를 목적으로 사용할 수 있다. 이 경우, 전술한 바와 같이, GPL, LGPL 코드를 사용했음을 공개해야 한다. 단말이나 소프트웨어 패키지에 커다랗게 써 붙일 필요는 없지만, 적어도 설명서, 보증서 또는 부트 메시지 등에 표시해야 한다. 또, 소스를 공개해야 할 의무가 있는 경우에는 온/오프라인 미디어를 통해 제공해야 한다. 이러한 의무를 이행하지 않을 경우에는 FSF(Free Software Foundation)와 같은 오픈소스 라이센스 정책 감시자들로 부터 경고를 받게 된다. FSF와 같은 기관이 실제 법적인 행동을 취하지는 않으며, 실제 법적인 행동을 취할 수 있는 주체는 해당 소프트웨어의 저작권자이다. 기업이 오픈소스 활용 사실을 공개하지 않아서 생기는 위험은 심각한 "명예 실추"이다.

 

요즘은 Embedded System 에서도 Linux나 오픈소스 소프트웨어의 활용도가 점점 높아 지고 있다. 국내 대기업들에서는 3rd Party로 부터 공급되는 솔루션들에 대한 오픈소스가 몰고 올 수 있는 위험을 사전에 제거하고자 Blackduck社의 ProtexIP와 같은 솔루션을 활용하고 있다. 이 솔루션은 계속 업데이트되는 BlackDuck 본사의 DB서버에 접근하여, 검증하고자 하는 소프트웨어 패키지의 위험(Violation) 여부를 그래픽으로 표시해 주고, 대응할 수 있도록 도와 준다. Source 뿐만 아니라, Binary  도 완벽하진 않지만 Violation을 잡아 낸다. 유사 툴로는 Palamida社의 솔루션도 있다.

 

 

RTOS에서의 Linux Driver 참조 활용

GPL 선언된 Linux Driver를 참조하여 RTOS Device Driver를 개발하는 것은 절대 지양해야 한다. Linux Driver를 참조해서 RTOS Device Driver를 만들고 마치 직접 개발한 IP(설계자산)인양 바이너리로 제공해서도 절대 안된다. 여기에는 두 가지 위험이 존재하는데, 첫째는 원작자에 대한 저작권법 위반이며, 둘째는 Proprietary RTOS 자체, Runtime, Proprietary Application까지도 모두 GPL로 간주되어 회사 내의 모든 Proprietary IP에 대한 소스를 공개해야 해야 하는 위험이다.

 

결론, 요약 정리

 오픈소소 활용

라이센스

설명

GPL 복사/수정

GPL

수정물의 소스코드 공개

GPL Library에 링크

GPL

Library의 수정코드 뿐만 아니라, 이와 링크되는 Application의 소스코드도 공개  (다행히도 99%의 Linux Runtime Library는 non-GPL로 선언되어 있음)

LGPL Library에 링크

선택

의무사항 없음

Linux Kernel과 정상적인 System Call을 이용하는 상위 Application

선택

의무사항 없음

Linux Kernel과 Direct Static Call을 이용하는 상위 Application

GPL

Static link를 사용하는 Linux device driver는 Kernel의 Derived works로 간주됨으로 소스 공개

Dynamically loadable driver module (standard kernel symbols/interfaces 를 활용하는 경우)

선택

이미 GPL로 선언된 Driver code를 참조하지 않았다면, 소스공개 의무 없음

 

참고문헌

a. William Weinberg and Jason Wacha, Jan. 2004, MontaVista Software, Building Embedded Applications with GPL/LGPL Software
b. Wikipedia

신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2011.12.03 01:19

Jeff Goodell: Would you explain, in simple terms, exactly what object-oriented software is?

Steve Jobs: Objects are like people. They’re living, breathing things that have knowledge inside them about how to do things and have memory inside them so they can remember things. And rather than interacting with them at a very low level, you interact with them at a very high level of abstraction, like we’re doing right here.

Here’s an example: If I’m your laundry object, you can give me your dirty clothes and send me a message that says, “Can you get my clothes laundered, please.” I happen to know where the best laundry place in San Francisco is. And I speak English, and I have dollars in my pockets. So I go out and hail a taxicab and tell the driver to take me to this place in San Francisco. I go get your clothes laundered, I jump back in the cab, I get back here. I give you your clean clothes and say, “Here are your clean clothes.”

You have no idea how I did that. You have no knowledge of the laundry place. Maybe you speak French, and you can’t even hail a taxi. You can’t pay for one, you don’t have dollars in your pocket. Yet I knew how to do all of that. And you didn’t have to know any of it. All that complexity was hidden inside of me, and we were able to interact at a very high level of abstraction. That’s what objects are. They encapsulate complexity, and the interfaces to that complexity are high level.

(In 1994, Apple’s kingpin sat down for a free-ranging session with Rolling Stone reporter Jeff Goodell. Full interview)

허허허 :) Computer nerds 가 아니라도 꽤나 쉽게 알아듣겠네 ~ 

신고
Posted by ipod apple

댓글을 달아 주세요

Language/영어학습2011.05.09 13:07

 

 

 

꼬마 아나킨을 보면서 콰이 곤 진과  아나킨의 엄마가 나누는 대화입니다.

 

 

 

“공화국에서만 태어났더라도 그를 일찍이 알아봤을텐데……”

--> 공화국에서 안 태어났고 일찍 못 알아봄. 즉 현재와 상반되는 얘기.

 

image

신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2011.05.08 00:11

안드로이드 블랙마켓인

www.applanet.net

는 불법정보사이트로 분류되어서 접속시 아래와 같이 뜬다.

 

tor project를 통해서

실행하게 되면 접속이 가능하다.

https://www.torproject.org/dist/torbrowser/tor-browser-1.3.24_en-US.exe

 

다운받아 실행하게 되면

 

 

다음과 같은 화면이 뜨게되고

번들로 Firefox가 내장되어있기때문에 파이어폭스가 실행이됩니다.

 

우측하단에 Tor Enabled 를 확인하고

www.applanet.net 에 접속하게되면!

 

두둥

 

 

신고
Posted by ipod apple

댓글을 달아 주세요

  1. http://blog.kasandrav.com/?p=4655
    http://jackdvgwpc.dns-stuff.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://yuexinu.eu.tf/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://chonghaage.org/viewtopic.php?f=2&t=261
    http://www.hoberrs.com/?p=4757
    http://moshe.ibiz.cc/led%e3%83%a9%e3%82%a4%e3%83%88-17/
    http://zhaozhongling.eu.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://ww.devanskiu.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://ww.eberhearts.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://www.josephhc.com/?p=4749
    http://khadijahaccosta.justdied.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://www.doriaha.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://www.mathildak.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://www.rubyki.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://blog.rubyki.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/

    http://wangjixi.ca.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://yuerenyi.eu.tf/led%e3%83%a9%e3%82%a4%e3%83%88-19/
    http://kristofer.usa.cc/led%e3%83%a9%e3%82%a4%e3%83%88-18/
    http://forum.katharinee.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://lazaroserra.biz/led%e3%83%a9%e3%82%a4%e3%83%88-4/
    http://ww.leggansnr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://www.sulejmanovski.pw/
    http://fehlinger.pw/led%e3%83%a9%e3%82%a4%e3%83%88-2/
    http://ivanaknab.net/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_4.html
    http://xiangjiuling.us.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://www.minhss.com/led%e3%83%a9%e3%82%a4%e3%83%88-2/
    http://strama.in/led%e3%83%a9%e3%82%a4%e3%83%88-2/
    http://www.koscielniak.pw/
    http://buy-in-global.net/led%e3%83%a9%e3%82%a4%e3%83%88-18/
    http://shenerzi.sg.tf/led%e3%83%a9%e3%82%a4%e3%83%88-23/

    2014.08.23 23:13 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. http://blog.anibalvz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://forum.marshallry.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://latoyiarudin.biz/led%e3%83%a9%e3%82%a4%e3%83%88-4/
    http://zhougonghe.ch.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://yuehuangdao.eu.tf/led%e3%83%a9%e3%82%a4%e3%83%88-9/
    http://stageman.dnset.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://guadalupejaurequi.jungleheart.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://ww.depierrog.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://granes.in/led%e3%83%a9%e3%82%a4%e3%83%88-7/
    http://www.articlemichael.com/
    http://moshe.ibiz.cc/led%e3%83%a9%e3%82%a4%e3%83%88-17/
    http://www.arianaa.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://www.alllau.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://pavlo.xxuz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-12/
    http://maishu.1dumb.com/?p=4124

    http://www.lennyr.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://shijianbing.zzux.com/led%e3%83%a9%e3%82%a4%e3%83%88-20/
    http://www.kimbersho.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://forum.kudronv.com/led%e3%83%a9%e3%82%a4%e3%83%88-2/
    http://sterlingkellerman.jungleheart.com/led%e3%83%a9%e3%82%a4%e3%83%88-9/
    http://olliesmith.biz/?p=836
    http://ww.cernohouss.com/led%e3%83%a9%e3%82%a4%e3%83%88-12/
    http://forum.rudolphz.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://hengheng.sexidude.com/led%e3%83%a9%e3%82%a4%e3%83%88-6/
    http://soldow.in.net/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://www.fernstaedt.pw/
    http://ww.karrenberge.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9/
    http://taylor.itemdb.com/led%e3%83%a9%e3%82%a4%e3%83%88-10/
    http://shisuifan.bg.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-3/
    http://bennerman.pw/led%e3%83%a9%e3%82%a4%e3%83%88-4/

    2014.08.24 12:55 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. http://forum.josephhc.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-8/
    http://youguoyu.longmusic.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-14/
    http://ulses.mysecondarydns.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-10/
    http://stadel.in/led%e3%83%a9%e3%82%a4%e3%83%88-4/
    http://forum.burmato.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://zhougonghe.ch.tf/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://blog.brendonh.com/?p=4734
    http://suzannanhsdgb.mysecondarydns.com/led%e3%83%a9%e3%82%a4%e3%83%88-24/
    http://sterlingkellerman.jungleheart.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-15/
    http://blog.thadk.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-9/
    http://blog.3c11.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/
    http://www.dereknt.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-11/
    http://www.antoniettaa.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-4/
    http://www.kandyv.com/?p=4701
    http://jamalathearn.mrbasic.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-7/

    http://winfordsimco.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_1.html
    http://loiseetji.ddns.mobi/led%e3%83%a9%e3%82%a4%e3%83%88-16/
    http://shizhu.zzux.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-6/
    http://tricia.usa.cc/led%e3%83%a9%e3%82%a4%e3%83%88-16/
    http://stageman.dnset.com/led%e3%83%a9%e3%82%a4%e3%83%88-15/
    http://tugecv.de.tf/led%e3%83%a9%e3%82%a4%e3%83%88-6/
    http://jaurigui.pw/viewtopic.php?f=2&t=261
    http://www.articledenver.com/
    http://forum.depierrog.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-5/
    http://www.warmington.pw/led%e3%83%a9%e3%82%a4%e3%83%88-5/
    http://blog.connien.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/
    http://forum.zhangxuelings.com/led%e3%83%a9%e3%82%a4%e3%83%88-4/
    http://buddyalsop.org/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_3.html
    http://hamway.biz/affiliate-programs/led%E3%83%A9%E3%82%A4%E3%83%88_6.html
    http://forum.antoniettaa.com/%e3%82%b7%e3%83%a3%e3%83%8d%e3%83%ab-iphone-%e3%82%b1%e3%83%bc%e3%82%b9-2/

    2014.08.24 13:27 신고 [ ADDR : EDIT/ DEL : REPLY ]
  4. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:41 [ ADDR : EDIT/ DEL : REPLY ]
  5. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:41 [ ADDR : EDIT/ DEL : REPLY ]
  6. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:41 [ ADDR : EDIT/ DEL : REPLY ]
  7. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:41 [ ADDR : EDIT/ DEL : REPLY ]
  8. 이용약관위배로 관리자 삭제된 댓글입니다.

    2014.08.28 19:41 [ ADDR : EDIT/ DEL : REPLY ]

분류없음2011.04.05 02:11

http://blog.naver.com/PostList.nhn?blogId=poohyjk3&categoryNo=5&currentPage=2

신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2011.04.05 02:07
[펌]임베디드 리눅스 관련 사이트  Embedded 

2004/12/16 05:02

 

복사http://blog.naver.com/poohyjk3/100008574047

 

출처 우성! 파이팅! | 우쉐이
원문 http://blog.naver.com/wooseng1/80008313252

임베디드 리눅스 관련 사이트 목록

목차 

1임베디드 시스템과 리눅스

1임베디드 시스템

2리눅스

3임베디드 리눅스

4실시간 운영체제

5윈도우 시스템

2임베디드 리눅스 개발 방법론

6제품 기획 단계에서 고려할 사항

7타겟 보드 선정 방법

8장치 선정과 드라이버 구현

9임베디드 리눅스 이식 절차

10임베디드 리눅스 환경에서 응용 프로그램 개발 절차

11개발  상용 제품을 위한 패키징

3리눅스 개발 환경 구축과 이식

12교차 개발 환경 구축

13네트워크와 디버깅 환경 구축

14부트 스트랩 로더 이식

15리눅스 커널 환경 설정과 컴파일

16루트 파일시스템 구축

17실시간 리눅스 커널 이식

18윈도우 시스템 환경 이식

19부팅과 설치 확인

20상용 제품을 위한 패키징

 

1부. 임베디드 시스템과 리눅스

1임베디드 시스템

 

□ 『C, C++로 작성하는 임베디드 시스템 프로그래밍』, 마이클 바 저, 이석주 역, 한빛미디어, 2000

C와 C++ 프로그래밍 언어를 사용하여 임베디드 시스템을 제작하는 방법을 기술하고 있다. 아쉽게도 이 책에 나오는 보드를 국내에서 구하기가 어렵기 때문에 본격적인 실습이 불가능하다는 단점이 있다. 하지만 임베디드 시스템에 대한 개념을 단기간에 잡기에는 적당하다.

□ 『네트워크 프린팅』, 토드 레이더마커, 매튜 개스트 저, 박재호, 이영미 역, 한빛미디어, 2001

리눅스와 유닉스를 서버로, 윈도우, 맥, 넷웨어를 클라이언트로 구성한 네트워크 환경에서 인쇄하는 방법을 기술한다. BOOTP, DHCP와 같은 네트워크 프로토콜을 사용해 프린터를 부팅하는 방법도 소개한다.

■ http://wombat.doc.ic.ac.uk/foldoc/index.html

FOLDOC 컴퓨터 용어 전문 사전이다.

■ http://www.linuxdevices.com/articles/AT4936596231.html

임베디드 리눅스를 탑재하고 있는 임베디드 장치를 소개하는 페이지이다. PDA를 제외한 여러 장치를 종류별로 제시하고 있다.

■ http://www.linuxdevices.com/articles/AT8728350077.html

임베디드 리눅스를 탑재했거나 탑재할 수 있는 PDA를 소개하는 페이지이다.

■ http://www.linuxdevices.com/articles/AT4313418436.html
임베디드 리눅스를 탑재할 수 있는 SOC(System-On-Chip)을 소개하는 페이지이다.

■ http://www.classicgaming.com/
고전 게임을 소개하는 페이지이다. MSX와 애플을 비롯한 각종 플랫폼을 흉내낸 애뮬레이터와 게임용 롬 이미지를 다운로드할 수 있다.

■ http://quest.arc.nasa.gov/mars/ask/about-mars-path/pathfinder_computer.txt
패스파인더에 탑재한 컴퓨터 사양을 설명하는 기사이다.

■ http://quest.arc.nasa.gov/mars/ask/about-mars-path/Assembly_language_programming_used_in_Pathfinder.txt
패스파인더 개발을 위해 사용한 어셈블리어에 대해 설명하는 기사이다.

■ http://quest.arc.nasa.gov/mars/ask/about-mars-path/Selection_of_programming_languages.txt
패스파인더 개발을 위해 사용한 프로그래밍 언어 선택과 관련한 기사이다.

■ http://www.windriver.com/customer/html/jpl.html
VxWorks를 만든 윈드리버에서 만든 제트추진연구소에 대한 기사이다.

■ http://www.iews.na.baesystems.com/space/pdf/0887.pdf
패스파인더에 탑재한 마이크로프로세서를 소개하는 기사이다.

  

2리눅스

 

□ 『리눅스 그냥 재미로: 우연한 혁명에 대한 이야기』, 리누스 토발즈, 데이비드 다이아몬드 저, 안진환 역, 한겨례신문사, 2001

리누스 토발즈가 집필한 리눅스에 대한 일종의 자서전으로 리눅스 개발의 이면에 숨겨진 배경 이야기를 허심탄회하게 풀어내고 있다. 예상과는 달리 내용이 따분하지 않고 재미있기 때문에(제목을 한번 보라!) 언제 어디서나 부담 없이 읽을 수 있는 책이다.

□ 『Operating System Concepts 6th edition』, A. Silberschatz, J. Peterson, P. Galvin, John Wiley & Sons, 2001
일명 '공룡책'이라고 불리며 운영체제에 대한 일반 내용을 다루는 기본서이다. 운영체제라는 세계에 첫 걸음을 내딛도록 도와준다. 대학교에서 운영체제 과목 교과서로 많이 사용하고 있으며, 대학 3학년 이상 학생이 읽기에 적합하다.

□ 『리눅스 커널의 이해』, 다니엘 보베이, 마르코 체사티 저, 이 호, 심마로 역, 한빛미디어, 2001
오라일리 Understanding the Linux Kerne』의 번역판이다. 리눅스 커널 내부를 탐험하고 싶은 사람에게 등불이 될 책으로 리눅스나 유닉스 운영체제에 대해 중급 이상의 지식을 확보한 개발자에게 적합하다.

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ 『오픈 소스』에릭 레이몬드 외 저, 송창훈 외 역, 한빛미디어, 2000
오라일리 Open Source: Voice from the Open Source Revolutions』의 번역판이다. 공개 소스와 관련한 여러 선구자들이 수필식으로 적은 글을 묶어놓은 책으로 리눅스를 비롯한 공개 소스 소프트웨어가 어떤 식으로 발전해왔으며 앞으로 어떻게 발전할지 전반적인 구도를 제시한다.

□ 『Operating Systems: Design and Implementation』 Andrew S. Tanenbaum, Prentice-Hall, 1987
타넨바움 교수가 지은 MINIX 운영체제를 소개하는 책이다. 리누스도 이 책을 접합 후부터 스스로 운영체제를 만들 생각을 했다니까, 실제 운영체제가 어떻게 돌아가는지 구체적인 동작 원리에 관심있는 독자는 한 번씩 읽어보면 도움이 될 것이다.

■ http://www.linuxhq.com/
리눅스 커널에 대한 각종 정보를 체계적으로 정리한 본부 사이트이다. 각 커널 버전에 따라 무엇이 어떻게 변했으며, 패치가 어떻게 이뤄지는지 잘 정리하고 있다.

■ http://www.kernel.org
리눅스 커널을 배포하는 공식 사이트이다. 과거부터 현재까지 모든 리눅스 커널을 유지하고 있으므로, 이 사이트에 들러 필요한 버전을 가져오기 바란다.

■ http://www.livinginternet.com/?i/iw_unix_linux.htm
리눅스 역사를 간략하게 기술하는 사이트이다. 간결하면서도 있어야 하는 내용은 모두 자리잡고 있다.

■ http://www.li.org/linuxhistory.php
리누스 토발즈가 유즈넷(USENET)에 올린 글을 토대로 초창기 리눅스 역사를 재조명하는 사이트이다.

■ http://www.memalpha.cx/Linux/Kernel/
리눅스 커널 버전과 관련한 역사를 한눈에 살펴볼 수 있다. 각 버전별로 리눅스 커널이 정확하게 몇 월 몇 일 몇 시에 나왔는지 궁금하면 이 사이트를 방문해보기 바란다.

■ http://lwn.net/2001/features/Timeline/
2001년 한해동안 리눅스와 관련한 각종 사건을 월 단위로 정리하고 있다. 아쉽게도 1998년부터 추적할 수 있다. 연도별 시간띠를 보면서 과거에 어떤 일이 있었는지 기억을 한번 더듬어보기 바란다.

■ http://www.nwfusion.com/newsletters/linux/2001/01086735.html
아마존이 리눅스를 웹서버로 채택했다는 소식을 담은 기사이다.

■ http://www.computer.org/computer/homepage/0202/ec/
리눅스가 헐리우드에서 맹활약하는 사례를 제시하고 있다. 블록버스터 영화에서 리눅스를 어떻게 사용하는지 실례를 들어 설명하고 있다.

■ http://www.fsf.org
자유 소프트웨어 재단 홈페이지이다. GNU 프로젝트에 대한 여러 가지 내용을 담고 있다.

■ http://www.fsf.org/software/software.html
GNU에서 개발한 GPL과 LGPL을 따르는 각종 소프트웨어 목록과 기타 공개 소스 소프트웨어 목록을 제공하고 있다. 그냥 심심풀이로 훑어보기만 해도 리눅스에 얼마만큼 많은 응용 프로그램이 존재하는지 확인할 수 있다.

http://www.pcmag.com/article/0,2997,ss%253D1490%2526s%253D25068%2526a%253D17930,00.asp
리누스 오른팔인 알란 콕스가 커널 2.4 유지 보수를 더 이상 맡지 않는다는 기사를 담은 페이지이다.

■ http://www.marcelothewonderpenguin.com/
알란 콕스 뒤를 이은 새로운 커널 2.4 유지보수 펭귄(maintainer)인 마르첼로(Marcelo Wormsbecker Tosatti)의 신상정보를 담은 페이지이다.

■ http://www.linuxdoc.org/
리눅스 문서 프로젝트(LDP, Linux Document Project)와 관련한 결과 문서를 제공하는 홈페이지이다. 리눅스와 관련한 HOW-TO, FAQ를 위시하여 도움이 될만한 각종 문서를 체계적으로 제공한다.

■ http://www.kldp.org
리눅스 한글 문서 프로젝트 홈페이지이다. 리눅스 관련 각종 번역 문서와 창작 문서를 분류별/주제별로 제공한다. 또한 팁 게시판과 사용기도 정리해놓았다.

■ http://kldp.org/root/cathedral-bazaar/cathedral-bazaar.html#toc10
에릭 레이먼드씨가 작성한 시장과 성당을 번역한 글이다. 이 글이 인터넷에 오른 이후부터 공개 소스 소프트웨어 운동이 한층 활기를 띄게 된다.

■ http://www-903.ibm.com/developerworks/kr/index.html
IBM에서 운영하는 리눅스 개발 사이트(developerWorks 한글판)로서 리눅스와 관련한 여러 유용한 정보를 제공한다.

■ http://safari.informit.com/mainhom.asp?home
InformIT에서 운영하는 사파리 서비스 홈페이지이다. 사파리 서비스는 구매에 앞서 책 내용을 온라인으로 검색할 수 있도록 지원하는 서비스이다. 아쉽게도 유료이다. 사파리 멤버 중 하나인 오라일리 출판사 홈페이지에서도 바로 사파리 서비스에 접근할 수 있다.

■ http://www.google.com/grphp?hl=en
유즈넷 기사를 검색할 수 있는 구글(Google) 검색엔진 홈페이지이다. 구글에 앞서 이러한 서비스를 제공하던 데자뉴스(deja.com)시절부터 현재까지 엄청난 분량의 기사를 담고 있다. ISP에서 제공하는 뉴스그룹 서비스에 불만을 품고 있다면 반드시 한번 사용해보기 바란다.

 

 

3실시간 운영체제

□ 『리눅스 커널의 이해』, 다니엘 보베이, 마르코 체사티 저, 이 호, 심마로 역, 한빛미디어, 2001
오라일리 『Understanding the Linux Kernel』의 번역판이다. 리눅스 커널 내부를 탐험하고 싶은 사람에게 등불이 되어줄 책으로 리눅스나 유닉스 운영체제에 대해 중급 이상 지식을 확보한 개발자에게 적합하다.

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ 『오픈 소스』, 에릭 레이몬드 외 저, 송창훈 외 역, 한빛미디어, 2000
오라일리 『Open Source: Voice from the Open Source Revolutions』의 번역판이다. 공개 소스와 관련한 여러 선구자가 에세이 형식으로 적은 글을 묶은 책으로 리눅스를 비롯한 공개 소스 소프트웨어가 어떤 식으로 발전해왔으며 앞으로 어떻게 발전할지 전반적인 구도를 제시한다.

□ 『Embedded Linux』, John Lombardo, New Riders, 2002

x86 플랫폼에서 리눅스를 최소한으로 패키징하는 방법을 기술한다. 아주 뛰어나거나 새로운 내용은 담고 있지 않지만, x86에서 임베디드 리눅스를 재미로 탑재해보려는 초보자에게는 도움을 줄 수 있다.

■ http://www.linuxdevices.com/articles/AT9888936014.html
임베디드 리눅스와 관련한 요약 가이드를 제공하는 기사이다. 여러 가지 읽을 거리에 대한 링크를 제공한다.

■ http://www.linuxdevices.com/articles/AT3620938516.html
임베디드 리눅스를 위한 요구 사항을 분석한 기사이다. PDA와 같은 특정 분야에 치우치지 않고 전반적인 흐름을 잘 짚고 있다.

■ http://www.linuxdevices.com/articles/AT9202043619.html
임베디드 리눅스에서 동작하는 여러 윈도우 시스템을 소개하는 기사이다. 윈도우 시스템을 공개 소스와 상용 제품으로 나누어 정리하였다.

■ http://www.linuxdevices.com/articles/AT2760742655.html
다양한 임베디드 리눅스 배포판을 소개한 기사이다. 공개 소스와 상업적 지원 배포판의 특징과 URL을 간략하게 정리하고 있다.

■ http://www.linuxdevices.com/files/article011/index.html
임베디드 리눅스에 대한 현재 상태(시장 상황, 향후 전망)를 제시한 기사이다. 다양한 도표와 그래프를 통해 통계 자료를 제공하므로 전략적인 결정에 참고하기 바란다.

■ http://www-903.ibm.com/developerworks/kr/linux/library/l-emb.html?dwzone=linux
리눅스가 임베디드 시장을 석권할 수 있는 이유를 제시한 기사이다.

■ http://www-903.ibm.com/developerworks/kr/linux/library/l-embl.html?dwzone=linux
임베디드 리눅스 애플리케이션에 대한 개요를 소개하는 기사이다. 임베디드 리눅스와 관련한 기본 사항을 잘 요약하고 있다.

■ http://www.uclinux.org/
임베디드 리눅스 마이크로 컨트롤러 프로젝트이다. MMU 없는 CPU에서 동작하는 리눅스에 대한 이식 작업 성과를 볼 수 있다.

■ http://www.linux-mtd.infradead.org/
리눅스를 위한 MTD(Memory Technology Device) 서브 시스템과 관련있는 각종 사항을 정리한 홈페이지이다.

http://www.microsoft.com/Windows/embedded/xp/evaluation/compare/notlinux.asp
임베디드 환경에서 동작하는 윈도우계열 운영체제와 리눅스계열 운영체제를 비교한 자료이다.  마이크로소프트사에서 작성했으므로 윈도우계열에 높은 점수를 주고 있다.

■ http://www.lineo.com/news_events/announcements/2001/12.20.html
마이크로소프트사에서 발표한 임베디드 윈도우 계열 운영체제와 임베디드 리눅스 계열 운영체제 비교 문건을 반박하는 내용을 담고 있다.

■ http://www.lynuxworks.com/products/whitepapers/xp-vs-linux.php3
임베디드 환경에서 동작하는 윈도우계열과 리눅스계열 운영체제를 비교한 자료이다. 리눅스웍스에서 작성했으므로 리눅스계열에 높은 점수를 주고 있다.

  

4실시간 운영체제 

 

□ 『Operating System Concepts 6th edition』, A. Silberschatz, J. Peterson, P. Galvin, John Wiley & Sons 2001
일명 '공룡책'이라 불리며 운영체제에 대한 일반 내용을 다루는 기본서이다. 운영체제라는 세계에 첫 걸음을 내딛도록 도와준다. 대학에서 운영체제 과목 교재로 많이 사용하며, 대학교 3학년 이상이 읽기에 적합하다.

□ 『리눅스 커널의 이해』, 다니엘 보베이, 마르코 체사티 저, 이 호, 심마로 역, 한빛미디어 2001년
오라일리 『Understanding the Linux Kernel』의 번역판이다. 리눅스 커널 내부를 탐험하고 싶은 사람에게 등불이 되는 책으로 리눅스나 유닉스 운영체제에 대해 중급 이상의 지식을 확보한 개발자가 읽기에 적합하다.

□ 『The Design of the UNIX Operating System』, Maurice J. Bach, PTR/PH 1990
유닉스 운영체제 설계 사상을 담고 있는 가장 기본적인 바이블이다. 유닉스 내부 구조를 꿰뚫어야 할 필요성이 있다면 이 책부터 시작하기 바란다. 대학교 4학년 이상이 읽기에 적합하다.

□ 『UNIX Internals: The New Frontiers』, Uresh Vahalia, Prentice Hall 1996             
앞서 『The Design of the UNIX Operating System』이 유닉스 내부 구조에 대한 바이블이라면 이 책은 다양한 유닉스 변종에 대한 주해서로 볼 수 있다. 명쾌한 설명과 풍부한 예제는 이 책을 손에서 떼기 어렵게 만든다. 대학교 4학년 이상이 읽기에 적합하다.

■ http://dictionary.cambridge.org/
캠브리지 온라인 사전이다.

■ http://wombat.doc.ic.ac.uk/foldoc/index.html
FOLDOC 컴퓨터 용어 전문 사전이다.

http://research.microsoft.com/~mbj/Mars_Pathfinder/Authoritative_Account.html
화성 탐사선인 패스파인더가 문제를 일으켰던 원인과 해결책을 설명한 글이다.

■ http://qdn.qnx.com/articles/dec1200/realtime.html
실시간과 실시간 운영체제에 대한 기본 소개가 나온 글이다.

■ http://www.faqs.org/faqs/realtime-computing/faq/
실시간에 대해 자주 나오는 각종 질문을 정리한 FAQ를 제공한다.

■ http://www.linuxdevices.com/files/elecjun00/yodaiken/yodaiken.pdf
FSMLabs에서 개발한 RTLinux에 대한 발표 자료이다. 하드 실시간을 리눅스에서 어떻게 구현했는지 설계 사상이 잘 나타나 있다.

■ http://fsmlabs.com/community/
FSMLabs에서 지원하는 RTLinux 커뮤니티 사이트이다. 설치 방법, FAQ, 백서와 같은 자료가 있다.

■ http://www.aero.polimi.it/projects/rtai/
리니오에서 지원하는 RTAI 커뮤니티 사이트이다. 설치 방법, FAQ, 백서와 같은 자료가 있다.

■ http://www.mvista.com/realtime/
몬타비스타에서 개발한 실시간 리눅스 커널 패치에 대한 홈페이지이다. 실시간 리눅스 커널 패치와 관련한 여러 자료가 있다.

■ http://www.mech.kuleuven.ac.be/~bruyninc/rthowto/rtHOWTO/rtHOWTO.html
실시간과 임베디드에 대한 How-to 문서로써, 기본 내용을 간결하면서도 체계적으로 정리하고 있다.

■ http://www.wired.com/news/print/0,1294,13987,00.html
윈도우 NT를 탑재한 미해군 USS 요크타운호가 두 시간 동안 바다에서 표류할 수 밖에 없었던 원인을 분석한 기사이다.

■ http://www.pasc.org/
포직스 표준을 제정하는 PASC(Portable Application Standards Committee) 홈페이지로, 포직스에 대한 정보도 얻을 수 있다.

■ http://www.delphion.com/details?pn=US05995745__
FSMLabs에서 출원한 RTLinux 관련 특허를 설명하는 페이지이다. 세부 내용을 모두 보려면 subscription이 필요하다.

목차

 

 

5윈도우 시스템 

 

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ 『Introduction to the X Window System』, Oliver Jones, Prentice-Hall, 1989
X 윈도우에 대한 고전적인 입문서이다. 1989년에 나왔기 때문에 편집 스타일은 상당히 볼품없지만 내용 자체만 놓고 보면 아주 훌륭하다. 페졸드가 지은 마이크로소프트 윈도우 프로그래밍 입문서와 비견할 만하다.

□ 『X Window System 2nd Edition』, Robert W. Scheifler & James Gettys, Digital Press, 1990
X를 만든 아버지인 세이플러와 게티스가 지은 X 윈도우 시스템에 대한 바이블이다. 최신 버전에 대한 내용은 X 윈도우 패키지 내부에서 온라인 문서 형식으로 찾을 수 있다.

□ 『The X Toolkit Cookbook』, Paul E. Kimball, PTR/PH, 1995
현재 나와있는 X 윈도우 툴킷 책 중에 가장 정리가 잘되어있으며, 숨겨진 몇몇 비밀을 명쾌하게 해설하고 있다. 모티프나 아데나 위젯을 사용하는 개발자라면 누구나 한번 정도 이 책을 읽을 필요가 있다.

□ 『Volume 1: Xlib Programming Manual』, Adrian Nye, O’Reilly, 1992
오늘날의 오라일리가 존재하도록 만든 초기 역작이다. X 환경에서 프로그램을 작성하는 방법에 대해 간결 명료하게 설명하고 있다.

■ http://wombat.doc.ic.ac.uk/foldoc/index.html
FOLDOC 컴퓨터 용어 전문 사전이다.

■ http://www.linuxdevices.com/articles/AT9202043619.html
임베디드 리눅스에서 사용하는 여러 공개/상용 윈도우 시스템을 소개하는 기사이다. 윈도우 시스템을 상당히 체계적으로 정리하고 있으므로 특히 첫 단추를 꿰는 개발자에게 적당하다.

■ http://www.linuxdevices.com/articles/AT9035650492.html
임베디드 리눅스에서 X 윈도를 적용함에 있어 고려할 여러 사항을 소개하는 발표 자료이다. 다른 기사와는 달리 상당히 정량적인 방법으로 접근하고 있으므로, 비교 자료로 사용하기에 부족함이 없다.

■ http://www.linuxdevices.com/links/LK4761626139.html
마이크로 윈도우 프로젝트에 대해 간략하게 소개하는 기사이다.

■ http://www.linuxdevices.com/links/LK7730481424.html
피코구이 프로젝트에 대해 간략하게 소개하는 기사이다.

■ http://www.xfree86.org
x86, MacOS, 기타 임베디드 시스템에서 동작하는 공개소스 X 윈도우 환경을 개발하기 위해 설립한 XFree86 프로젝트 홈페이지이다. XFree86 소프트웨어를 자유롭게 다운로드할 수 있다.

■ http://www.x.org
X 컨소시움 후속인 오픈 그룹 홈페이지이다. X 윈도우 시스템 원본 소스와 각종 응용 프로그램을 자유롭게 다운로드할 수 있다.

■ http://www.rahul.net/kenton/xsites.framed.html
필자가 본 인터넷에서 가장 뛰어난 X 윈도우와 모티프 정리 사이트이다. 그야말로 주옥 같은 자료들이 실려있으므로, X 윈도나 모티프 개발자라면 필요할 때마다 이 사이트에 들러서 필요한 정보를 얻기 바란다.

■ http://www.openmotif.org/
공개용 모티프 툴킷을 다운로드할 수 있는 홈페이지이다. 이 페이지는 현재 BX라는 사용자 인터페이스 생성도구로 유명한 ICS 사에서 관리하고 있다.

■ http://www.opengroup.org/openmotif/
오픈 그룹에서 관리하는 오픈 모티프 공식 홈페이지이다. 공개용 모티프 툴킷 최신 버전을 다운로드할 수 있으며, 모티프 개발자를 위한 공간도 마련하고 있다. 임베디드 모티프에 대한 정보도 찾을 수 있다.

■ http://www.motifdeveloper.com/news/news12.html
오라일리의 모티프 프로그래밍 매뉴얼과 레퍼런스 매뉴얼을 온라인 문서로 받아볼 수 있도록 지원하는 홈페이지이다.

■ http://www.lesstif.org/
모티프를 자유롭게 쓸 목적으로 시작한 레스티프 프로젝트 홈페이지이다. 레스티프는 라이센스에 제한이 있는 공개용 모티프와는 달리 LGPL 라이센스를 따르므로 완벽한 공개 소스 소프트웨어이다. 레스티프는 모티프와 원시 코드 단계에서 거의 99% 호환성을 유지하므로, 각종 공개 소스 소프트웨어 개발자가 즐겨 사용하는 라이브러리이기도 하다.

■ http://www.gtk.org/
Gtk+ 공식 홈페이지이다. 다양한 프로젝트에 걸친 여러 자료를 얻을 수 있으며 최신 버전 라이브러리를 다운로드할 수도 있다.

■ http://www.efalk.org/Widgets/
X에서 사용할 수 있는 각종 위젯 집합을 비교한 기사이다. 다양한 위젯 집합을 기능과 외양면에서 분석하고 있으므로, 개발에 필요한 툴킷을 선택할 때 참조하기 바란다.

■ http://www.microwindows.org/
마이크로 윈도우 공식 홈페이지이다. 원시 코드를 다운로드할 수 있으며, 각종 매뉴얼과 학습서도 얻을 수 있다.

■ http://www.fltk.org
X11, 마이크로소프트 윈도우, 마이크로 윈도우에서 쓸 수 있는 FLTK 프로젝트 공식 홈페이지이다.

■ http://tinywidgets.sourceforge.net/
마이크로 윈도우에서 쓸 수 있는 타이니 위젯 프로젝트 공식 홈페이지이다.

■ http://www.trolltech.com/
Qt와 Qt/임베디드를 만든 트롤테크 홈페이지이다.

■ http://pgui.sourceforge.net/
피코구이 공식 홈페이지이다. 각종 기사와 문서를 얻을 수 있으며, 피코구이 패키지도 다운로드할 수 있다. 

 

2부. 임베디드 리눅스 개발 방법론 

6제품 기획 단계에서 고려할 사항 

 

□ 『C∙C++로 작성하는 임베디드 시스템 프로그래밍』, 마이클 바 저, 이석주 역, 한빛미디어, 2000 
C와 C++ 프로그래밍 언어를 사용해 임베디드 시스템을 제작하는 방법을 기술한다. 아쉽게도 이 책에 나오는 보드를 국내에서 구하기 어려워 본격적인 실습이 불가능하다. 하지만 임베디드 시스템에 대한 개념을 단기간에 잡기에는 적당하다.

□ 『Embedded Linux』, John Lombardo, New Riders, 2002

x86 플랫폼에서 리눅스를 최소한으로 패키징하는 방법을 기술한다. 아주 뛰어나거나 새로운 내용은 담고 있지 않지만, x86에서 임베디드 리눅스를 재미로 탑재해보려는 초보자에게는 도움을 줄 수 있다.

 

 

7타겟 보드 선정 방법 

 

□ 『C, C++로 작성하는 임베디드 시스템 프로그래밍』, 마이클 바 저, 이석주 역, 한빛미디어, 2000

C와 C++ 프로그래밍 언어를 사용하여 임베디드 시스템을 제작하는 방법을 기술하고 있다. 아쉽게도 이 책에 나오는 보드를 국내에서 구하기가 어렵기 때문에 본격적인 실습이 불가능하다는 단점이 있다. 하지만 임베디드 시스템에 대한 개념을 단기간에 잡기에는 적당하다.

□ SWAN-II 사용자 설명서

아이트로닉스(제품에 포함)

■ http://www.linuxdevices.com/articles/AT4548672342.html
포스트-PC 시대를 도래해 임베디드 리눅스를 동작시킬 수 있는 SOC에 대해 소개하는 홈페이지이다.

■ http://www.linuxdevices.com/articles/AT4313418436.html
리눅스를 적용할 수 있는 각종 SOC(System On Chip)에 대한 정보를 모아놓은 홈페이지이다. ARM, MIPS, MPC, x86을 기반으로 각종 제품을 소개한다.

■ http://www.uclinux.org/
MMU가 없는 CPU를 위한 리눅스인 uClinux 공식 홈페이지이다.

■ http://www.advantech.com/products/PCM-5824.asp
어드밴텍에서 만든 Geode 기반 SBC(Single Board Computer)인 PCM-5824에 대한 각종 자료를 제공한다.

■ http://www.national.com/appinfo/solutions/0,2062,239,00.html
네셔날 세미컨덕터에서 만든 SOC인 Geode에 대한 각종 자료를 제공한다.

■ http://www.linuxdevices.com/products/PD7399900675.html
인텔에서 만든 SA-1110 마이크로프로세스 개발 참조 보드에 대한 간략한 정보를 제공한다.

http://developer.intel.com/design/pca/applicationsprocessors/manuals/index.htm
인텔에서 만든 각종 마이크로프로세스에 대한 문서를 모아놓은 홈페이지이다.

■ http://developer.intel.com/design/strong/datashts/278241.htm
인텔에서 만든 SA-1110 마이크로 프로세스에 대한 간략한 데이터시트를 제공하는 홈페이지이다.

■ http://developer.intel.com/design/strong/guides/278278.htm
인텔에서 만든 SA-1110 마이크로 프로세스 개발 참조 보드인 아사벳에 대한 각종 자료를 제공하는 홈페이지이다.

■ http://www.linfos.co.kr/htm/pro_li01.htm
린포스에서 만든 SA-1110 마이크로 프로세스 개발 참조 보드인 TBEL1110에 대한 각종 자료를 제공하는 홈페이지이다.

■ http://developer.intel.com/design/intelxscale/
인텔에서 개발한 StrongARM 후속 버전인 XScale에 대한 공식 홈페이지이다.

■ http://www.ipaqlinux.com/
StrongARM을 탑재한 PDA인 iPAQ에 리눅스를 탑재하는 데 필요한 정보와 링크를 모아놓은 홈페이지이다.

■ http://www.handhelds.org/
StrongARM을 탑재한 PDA인 iPAQ을 위한 리눅스 배포판과 설치 노하우를 모아놓은 홈페이지이다.

■ http://www.arm.com/
가장 널리 사용하는 32비트 RISC 방식 임베디드 CPU를 설계한 ARM 본사 홈페이지이다.

■ http://www.itronixit.co.kr/products_cpu_swan2.html
아이트로닉스에서 만든 MPC860 기반 SBC(Single Board Computer)인 SWAN-II에 대한 각종 자료를 제공하는 홈페이지이다.

■ http://e-www.motorola.com/webapp/sps/site/prod_summary.jsp?code=MPC860&nodeId=01M0ypBDKCb
모토로라에서 만든 파워PC 계열 SOC인 MPC860에 대한 각종 자료를 제공한다.

■ http://e-www.motorola.com/brdata/PDFDB/docs/MPC860EC.pdf
MPC860에 대한 상세 정보를 제공하는 PDF 파일이다.

■ http://e-www.motorola.com/webapp/sps/site/taxonomy.jsp?nodeId=01M0ypBDKCb
모토로라에서 파워PC 코어 기반으로 만든 MPC8xx 계열 CPU에 대한 비교 정보를 제공한다.

■ http://penguinppc.org/embedded/
파워PC를 채택한 임베디드 시스템을 위한 각종 자료를 제공한다.

■ http://www.macraigor.com/zenofbdm.pdf
BDM에 대한 멋진 소개서이다. BDM에 대한 역사와 간략한 디버깅 방법을 기술하고 있다.

 [통계] http://www.linuxdevices.com/files/article011/sld023.html
임베디드 개발자가 향후 채택하리라 예상되는 CPU 비율을 보여주는 자료이다.

 [통계] http://www.linuxdevices.com/files/article011/sld024.html
임베디드 개발자가 향후 채택하리라 예상되는 하드웨어 플랫폼 비율을 보여주는 자료이다.

 [통계] http://www.linuxdevices.com/files/article011/sld025.html
임베디드 개발자가 향후 채택하리라 예상되는 주변 장치를 보여주는 자료이다.

 [통계] http://www.linuxdevices.com/files/article011/sld026.html
임베디드 개발자가 향후 채택하리라 예상되는 운영체제를 올리기 위해 사용하는 장치를 보여주는 자료이다.

목차

 

 

8장치 선정과 드라이버 구현 

 

□ 『리눅스 장치 드라이버』, 알렉산드로 루비니 저, 김인성/류태중 역, 한빛미디어, 2000

리눅스에서 장치 드라이버를 제작하는지 방법을 구체적으로 소개한다. 리눅스 커널에 대해 어느 정도 지식이 있어야 하므로 초보자가 읽기에는 적합하지 않다. 단점은 커널 2.2에 대해서 다룬다는 점이다.

□ 『Linux Device Driver 2nd Ed』, Alessandro Rubini, O’Reilly, 2001
『리눅스 장치 드라이버』 원서 2판으로 커널 2.4를 다룬다. 인쇄 버전은 물론이고 일부 발췌가 아닌 완벽한 온라인 버전까지 나와 있으므로 큰 부담 없이 읽을 수 있다.

□ 『네트워크 프린팅』, 토드 레이더마커, 매튜 개스트 저, 박재호, 이영미 역, 한빛미디어, 2001

리눅스와 유닉스를 서버로, 윈도우, 맥, 넷웨어를 클라이언트로 구성한 네트워크 환경에서 인쇄하는 방법을 기술한다. BOOTP, DHCP와 같은 네트워크 프로토콜을 사용해 프린터를 부팅하는 방법도 소개한다.

□ 리눅스 커널 내부 /Documentation/devices.txt
리눅스에서 제공하는 각종 장치에 대한 간략한 소개와 장치 번호를 정의한 문서이다. 리눅스에서 장치 드라이버를 사용하거나 만들기 위해 반드시 참조해야 하는 표준 문서이다.

■ http://lhd.datapower.com/
리눅스에서 사용할 수 있는 각종 하드웨어 데이터베이스를 제공하는 홈페이지이다. 제품 이름이나 제품 카테고리로 검색할 수 있다.

■ http://www.tldp.org/HOWTO/Hardware-HOWTO/
리눅스 하드웨어 호환성과 관련한 HOW-TO 문서이다. 다양한 주변 장치에 대한 호환성 여부를 알려준다. 제품 이름이나 카테고리를 통한 검색은 불가능하며, 목차에서 찾아 들어가기 바란다.

■ http://www.tldp.org/HOWTO/HOWTO-INDEX/hardware.html
리눅스에서 사용할 수 있는 하드웨어에 대한 HOW-TO를 집대성한 색인을 제공하는 홈페이지이다.

■ http://www.torque.net/linux-pp.html
리눅스에서 사용할 수 있는 외장 주변 장치(PC와 병렬 포트로 통신)에 대한 링크와 제품 목록을 제공하는 홈페이지이다.

■ http://www.redhat.com/support/hardware/
가장 대표적인 배포판 회사인 레드햇을 위한 리눅스 호환 하드웨어 목록을 제공하는 홈페이지이다. 다양한 방법(제조사/카테고리/하드웨어 클래스/배포판 종류/인증 상태)으로 하드웨어를 검색할 수 있다.

■ http://www.linuxhardware.net/
리눅스 관련 각종 하드웨어와 장치 드라이버를 검색할 수 있도록 데이터베이스를 제공하는 홈페이지이다. 일반 사용자 참여로 데이터베이스를 갱신하고 있다는 사실이 흥미롭다.

■ http://www.linux-usb.org/
리눅스에 탑재한 USB 스택에 대한 정보를 제공하는 홈페이지이다. FAQ와 유용한 링크를 담고 있다.

■ ftp://ftp.compaq.com/pub/supportinformation/papers/ecg0480997_a4.pdf
OHCI와 UHCI 차이점을 설명한 문서이다. 상당히 깔끔하게 정리되어 있으므로, USB에 대한 개념을 잡는 데 도움을 받을 수 있다.

■ http://usb.cs.tum.edu/usbdoc/
리눅스에서 USB 장치 드라이버를 작성하는 방법을 설명하는 홈페이지이다.

■ http://whatis.techtarget.com/definition/0,,sid9_gci537791,00.html
I2C에 대한 사전적인 정의를 소개하는 홈페이지이다.

■ http://www.connectworld.net/cable-length.html

직렬/병렬/스카시 포트에 연결할 수 있는 케이블 길이 제한에 대해 소개하는 홈페이지이다.

■ http://www.pcisig.com/news_room/faqs
다양한 PCI 규약에 대한 질문과 응답을 싣고 있는 홈페이지이다.

■ http://pcmcia-cs.sourceforge.net/
리눅스에서 PCMCIA를 사용하는 데 필요한 각종 정보를 제공하는 홈페이지이다. 리눅스에서 PCMCIA 장치를 사용하고 싶다면 여기를 먼저 방문하기 바란다.

■ http://pcmcia-cs.sourceforge.net/ftp/doc/PCMCIA-PROG.html
리눅스에서 PCMCIA용 장치 드라이버를 개발하는 데 도움을 주는 프로그래머 가이드이다.

■ http://linux1394.sourceforge.net/hcl.php
리눅스에서 사용할 수 있는 IEEE 1394(파이어와이어) 주변 장치 목록을 제공하는 홈페이지이다.

■ http://www.skipstone.com/wizard.html
IEEE 1394와 관련한 FAQ 모음집이다.

■ http://irda.sourceforge.net/
리눅스에서 IrDA용 장치 드라이버를 설치하고 사용하는 데 도움이 되는 정보를 제공하는 홈페이지이다.

■ http://mobilix.org/ir_misc.html
리눅스에서 사용할 수 있는 IrDA 주변 장치를 소개하는 홈페이지이다. 데이터베이스 검색은 불가능하며 전체 목록이 한꺼번에 나온다.

■ http://www.lirc.org
리눅스에서 IrDA로 여러 주변 장치를 제어할 수 있는 패키지를 소개하는 홈페이지이다.

■ http://delbert.matlock.com/linux-bluetooth.htm#howto
리눅스에서 블루투스를 사용하는데 필요한 각종 정보를 제공하는 홈페이지이다. 다양한 드라이버와 문서를 싣고 있으므로 블루투스에 관심이 많은 개발자라면 반드시 여기를 방문하기 바란다.

■ http://www.microsoft.com/hwdev/bus/1394/1394tech.asp
마이크로소프트사에서 만든 IEEE1394 관련 특장점을 설명하는 홈페이지이다. 윈도우 관련 내용이 많이 있지만, 일반적인 특성을 파악하는 데 큰 무리가 없을 것이다.

■ http://www.linux-mtd.infradead.org/
리눅스를 위한 MTD(Memory Technology Device) 서브 시스템과 관련있는 각종 사항을 정리한 홈페이지이다.

 

 

 

9임베디드 리눅스 이식 절차 

 

□ 『Embedded Linux: Hardware, Software, and Interfacing』, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ 『삼바 활용하기』, 로버트 에크슈타인, 데이비드 칼리어-브라운, 피터 켈리 저, 박재호/이영미 역, 한빛미디어, 2001
리눅스나 유닉스 환경에서 네트워크로 윈도우 클라이언트에 공유 파일과 프린팅 서비스를 해주는 소프트웨어인 삼바를 소개한다. 삼바를 사용하면 네트워크로 물린 이기종 컴퓨터 사이에 자원을 쉽게 공유할 수 있으므로, 윈도우쪽으로 기울어진 개발 환경을 리눅스쪽으로 돌리는 데 도움을 줄 수 있다.

□ 『네트워크 프린팅』, 토드 레이더마커, 매튜 개스트 저, 박재호, 이영미 역, 한빛미디어, 2001

리눅스와 유닉스를 서버로, 윈도우, 맥, 넷웨어를 클라이언트로 구성한 네트워크 환경에서 인쇄하는 방법을 기술한다. BOOTP, DHCP와 같은 네트워크 프로토콜을 사용해 프린터를 부팅하는 방법도 소개한다.

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ 『Embedded Linux』, John Lombardo, New Riders, 2002

x86 플랫폼에서 리눅스를 최소한으로 패키징하는 방법을 기술한다. 아주 뛰어나거나 새로운 내용은 담고 있지 않지만, x86에서 임베디드 리눅스를 재미로 탑재해보려는 초보자에게는 도움을 줄 수 있다.

□ 『GNU 소프트웨어로 프로그래밍 하기』, 마이크 루키디스, 앤디 오람 저, 이기동 역, 한빛미디어, 2000

오라일리 『Programming with GNU Software』의 번역판이다. 문서 편집기인 이맥스, C/C++ 컴파일러인 gcc, 디버거인 gdb, 컴파일 자동화 도구인 make, 소스 관리 시스템인 RCS에 대해 입문하는 병아리 개발자에게 안내자 구실을 한다. 아쉽게도 중급 개발자에게는 부적합하다.

■ http://www.aleph1.co.uk/armlinux/devboards/Assabet-HOWTO/t1.html
아사벳에 임베디드 리눅스를 이식하는 절차를 일목요연하게 정리한 HOW-TO 문서이다. 아사벳에 임베디드 리눅스를 이식해야 한다면 꼭 살펴보기 바란다.

■ http://www-2.cs.cmu.edu/~wearable/software/assabet.html
역시 아사벳에 임베디드 리눅스를 이식하기 위해 필요한 자료를 모아놓은 홈페이지이다. 각종 링크가 이식 순서에 맞춰 잘 나와있으므로 이식 과정에서 필요한 소프트웨어를 구할 경우에 많은 도움을 받을 수 있다. 다른 홈페이지에 비해 최신 버전으로 갱신하는 속도이 빠르다는 장점이 있다.

■ http://www-2.cs.cmu.edu/~wearable/software/docs/assabet-linux-report/intel-report.html
인텔 아사벳 참조 보드에 ARM 리눅스를 올리는 방법을 체계적으로 기술한 기술 보고서이다. 미국립 과학재단에서 발주하고 미국 카네기 멜론 대학교의 웨어러블(Wearable) 그룹에서 수행한 프로젝트 결과 보고를 위해 만든 문서이다.

■ http://www.aleph1.co.uk/armlinux/thebook.html
다양한 ARM 임베디드 시스템에 임베디드 리눅스를 이식하는 방법을 소개하는 온라인 책이다. 원래 StrongARM을 사용한 참조 보드인 LART를 위해 만든 책이지만, 아사벳에 대해서도 충분히 참조할만한 가치가 있는 내용을 담고 있다.

■ http://penguinppc.org/embedded/howto/PowerPC-Embedded-HOWTO.html
MPC 플랫폼을 위한 교차 개발 환경 구축 방법, PPCBOOT 설치와 사용법, 부팅에 필요한 각종 설정, 패키징 관련 내용을 체계적으로 소개하는 문서이다.

■ http://developer.intel.com/design/strong/applnots/sa1100lx/sa1100lx.htm
인텔에서 만든 자료로, 아사벳을 위한 교차 참조 개발 환경을 구축하는 방법을 소개한다.

■ http://sources.redhat.com/binutils/
GNU binutils에 대한 홈페이지이다. 들어있는 프로그램과 각 프로그램 구실을 간략하게 설명한다.

■ http://www.astonlinux.com/
윈도우 환경에서 임베디드 리눅스를 개발할 수 있게 지원하는 툴인 코드메이커 개발사 홈페이지이다.

■ http://www.linux.org/docs/ldp/howto/Glibc2-HOWTO.html
glibc 버전 2를 리눅스 시스템에 설치하고 활용하는 방법/하는 HOW-TO 문서이다.

■ http://www.linuxdoc.org/HOWTO/mini/Partition/
리눅스에서 스왑 영역을 잡는 방법을 친절하게 설명하는 HOW-TO 문서이다.

■ http://kldp.org/HOWTO/html/Kernel/Kernel-HOWTO.html
리눅스에서 커널 환경을 설정하고 컴파일하는 방법을 설명하는 HOW-TO 문서이다. 2.2.x 계열 설명이므로 시대에 조금 뒤떨어졌다고 생각할 수도 있으나 기본 사항을 충분히 잘 설명하고 있다.

■ http://kldp.org/KoreanDoc/html/2.4Kernel_Compile-KLDP/2.4Kernel_Compile-KLDP.html

리눅스 커널 2.4를 환경 설정하고 컴파일하는 방법을 소개하는 HOW-TO 문서이다.

■ http://kldp.org/KoreanDoc/html/Kernel_Compile_Guide-KLDP/Kernel_Compile_Guide-KLDP.html
리눅스 커널을 컴파일하는 기본 절차를 소개하는 문서이다. 역시 커널 2.2 계열이라서 조금 낡았다는 느낌이 들지만 전반적인 감을 잡기에는 부족함이 없다.

■ http://option.kernel.pe.kr/
리눅스 커널 환경 설정 도움말을 한글로 이식하는 프로젝트를 위한 홈페이지이다. 최신 커널 버전을 꾸준히 쫓아오고 있으므로, 리눅스 커널을 설정하다 지쳐버린 사람들에게 많은 도움을 줄 수 있으리라 확신한다.

■ http://kldp.org/HOWTO/mini/html/LILO/LILO.html
실례를 들어 리눅스 표준 부트 스트랩 로더인 LILO를 어떻게 설정하는지 설명하고 있는 문서이다.

■ http://penguinppc.org/embedded/cross-compiling/
MPC용 교차 개발 환경 컴파일 방법이다. 잘못된 내용이 들어있기 때문에, 단순히 참고용으로만 활용하기 바란다

■ http://www.armlinux.org/docs/toolchain/toolchHOWTO/x183.html
ARM용 교차 개발 환경 컴파일 방법이다. 조금 잘못된 내용이 들어있기 때문에, 단순히 참고용으로만 활용하기 바란다.

■ http://www.delorie.com/gnu/docs/glibc/libc_toc.html
GNU에서 개발한 기본 라이브러리인 glibc에 대한 온라인 북이다.

■ http://sources.redhat.com/newlib/
레드햇에서 만든 glibc를 대체할 경량 기본 라이브러리인 newlib에 대한 홈페이지이다.

■ http://www.uclibc.org/
임베디드 리눅스 시스템을 위한 경량 기본 라이브러리인 uclibc에 대한 홈페이지이다.

■ http://www.fefe.de/dietlibc/
크기에 신경을 써서 만든 기본 라이브러리인 diet libc에 대한 홈페이지이다.

■ http://www.embedded.com/story/OEG20011220S0058
경량 라이브러리인 newlib에 대해 소개하는 홈페이지이다.

■ http://www.netsonic.fi/~walker/minicom.html
유닉스에서 사용할 수 있는 직렬 통신을 지원하는 터미널 흉내내기 프로그램인 minicom 홈페이지이다.

■ http://www.tldp.org/HOWTO/mini/LILO.html
가장 널리 알려진 x86용 부트 스트랩 로더인 LILO를 설명하는 미니 HOW-TO이다. LILO 환경 설정과 주의 사항을 소개한다.

■ http://www.linuxgazette.com/issue64/kohli.html
강력한 x86용 부트 스트랩 로더인 GNU GRUB를 소개하는 홈페이지이다. GRUB이 무엇인지, 설치를 어떻게 하는지, 환경 설정을 어떻게 하는지 설명한다.

■ http://www.aleph1.co.uk/armlinux/docs/ARMbooting/t1.html
ARM에서 동작하는 각종 부트 스트랩 로더를 소개하는 온라인 기사이다.

■ http://armboot.sourceforge.net/
강력한 ARM와 StrongARM용 부트 스트랩 로더인 ARMBOOT에 대해 소개하는 홈페이지이다. 여기서 원시 코드를 다운로드할 수도 있고 간단한 설명도 읽을 수 있다.

■ http://sourceforge.net/projects/blob/
SA11x0(StrongARM)용 부트 스트랩 로더인 BLOB를 소개하는 홈페이지이다. 여기서 원시 코드를 다운로드할 수도 있고 간단한 설명도 읽을 수 있다.

■ http://www.handhelds.org/z/wiki/bootldr
컴팩에서 만든 StrongARM을 사용한 PDA인 iPAQ에서 동작하는 부트 스트랩 로더인 bootldr를소개하는 홈페이지이다.

■ http://www.wearablegroup.org/software/bootldr/
iPAQ용 부트 스트랩 로더인 bootldr을 간략하게 설명하는 홈페이지이다.

■ http://ppcboot.sourceforge.net/
임베디드 파워PC를 위한 부트 스트랩 로더인 PPCBOOT를 소개하는 홈페이지이다. 프로젝트 진행에 따른 변경 사항과 간략한 설명을 한눈에 확인할 수 있다.

■ http://www.redhat.com/embedded/technologies/redboot/
다중 플랫폼을 지원하는 강력한 부트 스트랩 로더인 REDBOOT를 소개하는 홈페이지이다. 레드햇답게 문서 정리를 깔끔하게 잘 해놓았다.

■ http://tinylogin.busybox.net/
경량급이면서도 필요한 기능을 모두 갖추고 있는 임베디드 리눅스에서 동작하는 로그인 프로그램인tinylogin 홈페이지이다.

■ http://www.busybox.net/
GNU fileutils, shellutils에 들어있는 각종 프로그램을 하나로 묶어놓은 임베디드 리눅스를 위한 맥가이버 칼(스위스 군용 칼이 정확한 표현이지만 여기서는 편의상 맥가이버 칼로 지칭한다)인 busybox 홈페이지이다.

■ http://www.wearablegroup.org/software/ramdisk/
ARM(특히 아사벳)을 위한 램디스크를 제공하는 홈페이지이다.

■ ftp://ftp.denx.de/pub/LinuxPPC/usr/src/
MPC를 위한 램디스크를 제공하는 홈페이지이다.

■ http://kpreempt.sourceforge.net/
x86, 리눅스 커널 선점 확장 프로젝트 공식 홈페이지이다.

■ http://www.ittc.ku.edu/kurt/
또 다른 x86 리눅스 커널 선점 확장 프로젝트인 KURT 공식 홈페이지이다.

■ http://www.aero.polimi.it/~rtai/
RTAI 실시간 리눅스 확장 프로젝트 공식 홈페이지이다.

■ http://www.fsmlabs.com/community/
RTLinux 커뮤니티 공식 홈페이지이다.

■ http://www.linux-fbdev.org/
리눅스 프레임 버퍼, 프레임 버퍼 장치, 관련 사이트를 체계적으로 정리한 홈페이지이다.

■ http://gtf.org/garzik/video/
리눅스 비디오 드라이버와 프레임 버퍼에 대한 링크를 체계적으로 정리한 홈페이지이다.

■ http://www.tldp.org/HOWTO/Framebuffer-HOWTO.html
리눅스 프레임 버퍼 HOW-TO 문서로, 프레임 버퍼에 대한 일반론과 플랫폼별 특성을 소개한다.

■ http://www.microwindows.org/
마이크로 윈도우 공식 홈페이지이다. 원시 코드를 다운로드할 수 있으며, 각종 매뉴얼과 학습서도 구할 수 있다.

■ http://www.xfree86.org
x86, MacOS, 기타 임베디드 시스템에서 동작하는 공개 소스 X 윈도우 환경을 개발하기 위해 설립한 XFree86 프로젝트 홈페이지이다. XFree86 소프트웨어를 자유롭게 다운로드할 수 있다.

■ http://pgui.sourceforge.net/
피코구이 공식 홈페이지이다. 각종 기사와 문서를 얻을 수 있으며, 피코구이 패키지도 다운로드할 수 있다.

 

 

 

10임베디드 환경에서 응용 프로그램 개발 절차

  

□ 『Rapid Development: Taming Wild Software Schedules』, Steve McConnell, Microsoft Press 1996
소프트웨어를 짧은 시간 내 성공리에 개발하는 데 필요한 각종 지식을 총 집결시켜놓은 멋진 책이다. 이론뿐만 아니라 실전에 바로 써먹을 수 있는 내용으로 가득 하다. 관리자는 물론, 일반 개발자도 필독할 가치가 있는 책이다.

□ 『Software Project Survival Guide』, Steve McConnell, Microsoft Press, 1998
소프트웨어 개발 생명 주기 동안 벌어지는 각종 활동 내역을 위험 관리라는 측면에서 이끌어내는 방법을 명쾌하게 설명한다. “Rapid Development”와 더불어 관리자와 개발자가 꼭 읽어야 하는 필독서이다.

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ 『GNU 소프트웨어로 프로그래밍 하기』, 마이크 루키디스, 앤디 오람 저, 이기동 역, 한빛미디어, 2000

오라일리 『Programming with GNU Software』의 번역판이다. 문서 편집기인 이맥스, C/C++ 컴파일러인 gcc, 디버거인 gdb, 컴파일 자동화 도구인 make, 소스 관리 시스템인 RCS에 대해 입문하는 병아리 개발자에게 안내자 구실을 한다. 아쉽게도 중급 개발자에게는 부적합하다.

□ 『The UNIX Programming Environment』, Brian Kernighan, Rob Pike, Prentice-Hall, 1984
고전 중의 고전인 이 책은 유닉스에서 프로그램을 개발하는 표준적인 방법론을 간략하면서도 짜임새 있게 다룬다.

□ 『Software Tools in Pascal』, Brian Kernighan, P Plauger, Addison-Wesley, 1981
The UNIX Programming Environment』와 더불어 유닉스 프로그래밍 철학을 이해하는 데 중요한 책이다. C의 인기에 밀린 파스칼로 모든 코드를 소개하지만 중요한 것은 형식이 아니라 철학이라는 사실을 잊지 말자.

□ 『The Unix Network Programming』, W. Richard Stevens, Prentice-Hall, 1994
유닉스에서 네트워크 프로그램을 작성하려고 마음먹은 개발자 누구나 이 책을 읽을 필요가 있다. 더 이상의 설명이 필요없는 명작이다.

□ 『Advanced Programming in the UNIX Environment』, W. Richard Stevens, Addison-Wesley, 1992
유닉스 환경에서 시스템 프로그래밍을 하는 방법을 체계적이고 자세하게 다룬 책으로 “The Unix Network Programming”과 함께 읽으면 더욱 큰 효과를 얻을 수 있다.

□ 『유닉스 시스템 프로그래밍 SVR4』, 데이비드 커리 저, 이수진/이성희 역, 한빛미디어 , 2001
시스템 V쪽에 치우쳐 설명하고 있지만, 유닉스 시스템 호출과 각종 라이브러리 저변에 깔린 기본 원리를 충실히 다루고 있으므로 시스템 V는 물론이고 리눅스와 BSD 계열을 사용하는 시스템 소프트웨어 개발자도 이 책을 반드시 읽어야 한다.

□ 『Programming for the real world: POSIX.4』, Bill O. Galleister, O’Reilly & Associates, 1995
실시간 프로그램을 위한 C 인터페이스인 POSIX.4에 대해 상세하게 다루는 책이다. 초보자가 보기에는 내용이 조금 어렵지만 본격적인 실시간 프로그램을 위해서는 반드시 읽고 넘어가야 한다.

□ 『Pthreads Programming』, Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farrell, O’Reilly, 1996
포직스 스레드(Pthreads)에 대한 이론과 실전을 다루는 책으로 Pthreads로 프로그램을 작성하는 개발자는 반드시 읽어봐야 하는 필독서이다.

□ 『Practical UNIX Programming: A Guide to Concurrency, Communication, and Multithreading』, Kay A. Robbins, Steven Robbins, Prentice-Hall, 1996
실질적인 네트워크와 시스템 프로그래밍 작성 예제를 많이 제공하는 책이다. 포직스 스레드 프로그래밍과 동기화에 대한 내용도 들어있다.

□ 『배시 셸 시작하기』, 캐머런 뉴햄, 빌 로젠블랫 저, 배창렬 역, 한빛미디어, 2001
리눅스 표준 셸인 배시 셸에 대해 기초부터 차근차근 설명하는 책이다. 배시 셸은 이런저런 소프트웨어를 합치는 결합 언어(glue language)로 사용하기 적합하므로, 임베디드 시스템 개발자라도 알아두면 편리할 때가 많다.

■ http://pauillac.inria.fr/~xleroy/linuxthreads/
리눅스를 위한 포직스 1003.1c 스레드 패키지인 LinuxThreads에 대한 소개와 각종 링크를 제공하는 홈페이지이다.

■ http://www.cvshome.org/cyclic/cyclic-pages/rcs.html
RCS에 대해 소개하는 홈페이지이다. RCS와 관련한 각종 링크를 제공하므로 여기서 시작하면 된다.

■ http://www.cvshome.org/cyclic/cyclic-pages/sccs.html
SCCS에 대해 소개하는 홈페이지이다.

■ http://www.cvshome.org/
CVS(Concurrent Versions System) 관련 공식 홈페이지이다. CVS에 대한 매뉴얼과 소프트웨어를 다운로드할 수 있다.

■ http://www.wi.leidenuniv.nl/~wichert/strace/
리눅스에서 사용할 수 있는 시스템 호출 추적 툴인 strace 공식 홈페이지이다.

■ http://freshmeat.net/projects/ltrace/?topic_id=846%2C47
리눅스에서 사용할 수 있는 동적 라이브러리 호출 감시 툴인 ltrace 공식 홈페이지이다.

■ http://www.redhat.com/software/tools/gnupro/gnupro_gdb.html#gdb
gdb 기능에 대해 간략하게 소개하고 있는 레드햇사 홈페이지이다.

■ http://gcc.gnu.org/
gcc 공식 홈페이지이다. 필요한 각종 문서와 소프트웨어를 다운로드할 수 있다.

■ http://www.linuxgazette.com/issue71/joshi.html
gcc에서 최적화 작업을 수행하는 몇 가지 방법의 주요 원리를 설명하는 홈페이지이다.

■ http://www.cs.may.ie/~jpower/Courses/se209/optim/gcc_2.html
최적화를 위한 각종 gcc 옵션을 설명하는 홈페이지이다.

■ http://www.gnu.org/manual/gprof-2.9.1/html_node/gprof_toc.html
GNU 프로파일러인 gprof 에 대한 사용 설명서이다. 한글 번역판은http://purple.icu.ac.kr/~kimkk/guide/gprof/gprof_toc.html를 참조하기 바란다.

■ http://www710.univ-lyon1.fr/~yperret/fnccheck/doc.html
gcc에서 사용할 수 있는 신형 프로파일러인 fncdump에 대한 소개 문서이다. 한글 번역판은http://purple.icu.ac.kr/~kimkk/guide/functioncheck/#SEC_1를 참조하기 바란다.

■ http://www.redhat.com/software/gnupro/technical/gnupro_gcc.html

gcc 프로젝트를 이끌고 있는 레드햇사에서 개발한 상용 프로그램인 GNUPro 패키지에서 제공하는 최적화 기법을 소개하는 기사이다.

 

 

 

11개발  상용 제품을 위한 패키징 

 

□ Embedded Linux: Hardware, Software, and Interfacing, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ Embedded Linux Devleopment: Building Embedded Linux Systems(MPC8xx), 교육자료, Adelinux 2001

□ Embedded Linux Devleopment: Building Embedded Linux Systems(StrongARM), 교육자료, Adelinux 2001

■ http://www-903.ibm.com/developerworks/kr/linux/library/l-fs.html,

 http://www-903.ibm.com/developerworks/kr/linux/library/l-fs2.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs3.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs4.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs5.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs6.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs7.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs8.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs9.html,

http://www-903.ibm.com/developerworks/kr/linux/library/l-fs10.html
IBM developerWorks에서 연재한 저널링 파일시스템 특집 기사이다. 저널링 파일시스템에 대해 일목요연하게 정리하고 있으므로 읽을만한 가치가 있다.

■ http://e2fsprogs.sourceforge.net/ext2.html
EXT2 파일시스템 홈페이지이다. EXT2 파일시스템에 대한 설명과 링크를 제공한다.

■ http://www.zipworld.com.au/~akpm/linux/ext3/
EXT3 파일시스템 홈페이지이다. EXT3 파일시스템에 대한 설명과 소프트웨어, 링크를 제공한다.

■ http://www.namesys.com/
ReiserFS 파일시스템을 만든 namesys.com 홈페이지이다. ReiserFS에 대한 각종 기술 데이터를 제공한다.

■ http://www.linuxfocus.org/English/July2001/article210.shtml
신형 리눅스 램디스크 파일시스템인 ramfs를 소개하는 기사이다. 최신 커널 2.4에 대해 다룬다.

■ http://www.linuxfocus.org/English/November1999/article124.html
구형 리눅스 램디스크 사용 방법을 소개하는 기사이다. 이 문서를 역사적인 관점에서 참조하기 바란다.

■ http://developer.axis.com/software/jffs/doc/jffs.shtml
JFFS(Journaling Flash File System)을 소개하는 문서이다.

■ http://developer.axis.com/software/jffs/
JFFS 공식 홈페이지이다.

■ http://www.embeddedlinuxworks.com/articles/jffs_guide.html
JFFS 관련해 구체적인 사용법을 정리한 홈페이지이다.

■ http://sources.redhat.com/jffs2/
JFFS2 공식 홈페이지이다.

■ http://penguinppc.org/embedded/howto/root-filesystem.html
MPC에서 루트 파일시스템을 만드는 방법을 정리한 홈페이지이다.

■ http://www.linux-mtd.infradead.org/
리눅스를 위한 MTD(Memory Technology Device) 서브 시스템과 관련있는 각종 사항을 정리한 홈페이지이다.

■ http://www.aleph1.co.uk/armlinux/projects/yaffs/jffs2_and_nand.html
NAND 플래시에서 JFFS2를 사용할 때 발생하는 문제점을 소개하는 문서이다. 그런데 문서 내용에서 잘못된 부분(예: JFFS2가 배드 섹터를 처리하지 못한다. NAND 플래시를 사용할 수 없다)이 보인다.

■ http://ftp.linux.org.uk/pub/people/dwmw2/mtd/cvs/mtd/mtd-jffs-HOWTO.txt
간단한 리눅스 MTD, JFFS HOW-TO 문서이다.

■ http://ykjung99.netian.com/mtd/mtd.html
MPC860 보드에 MTD/JFFS2를 이식하는 방법을 소개하는 홈페이지이다.

■ http://myhome.naver.com/kingseft/gallery.html
임베디드 리눅스 관련 데이터를 제공하는 홈페이지이다. 데이터/게시판 메뉴에서 'Embedded Linux'를 선택하기 바란다.

 http://www.linuxdevices.com/articles/AT7478621147.html
임베디드 리눅스 시스템을 위한 플래시 파일시스템에 대한 기사이다.

■ http://www.linuxhq.com/kernel/v2.4/doc/initrd.txt.html
부팅을 위한 리눅스 램디스크인 initrd 사용법을 정리한 기사이다.

■ http://kldp.org/Translations/html/Initrd-KLDP/Initrd-KLDP.html
초기 램디스크인 initrd에 대한 사용 방법을 정리한 기사이다.

■ http://www.linux.org/docs/ldp/howto/Bootdisk-HOWTO/index.html
리눅스에서 사용할 수 있는 부트 디스크를 만드는 방법을 설명하는 HOW-TO 문서이다.

■ http://www.tldp.org/HOWTO/mini/Loopback-Root-FS.html
루프백 루트 파일시스템을 만드는 방법을 설명하는 HOW-TO 문서이다.

■ http://atrak.usc.edu/~kar/mtd-jffs.html
아사벳에서 bootldr을 사용해 MTD-JFFS 파일 이미지로 부팅하는 방법을 소개하는 홈페이지이다.

■ http://www.busybox.net/
GNU fileutils, shellutils에 들어있는 각종 프로그램을 하나로 묶어놓은 임베디드 리눅스를 위한 맥가이버 칼(스위스 군용 칼이 정확한 표현이지만 여기서는 편의상 맥가이버 칼로 지칭한다)인 busybox 홈페이지이다.

■ http://tinylogin.busybox.net/
경량급이면서도 필요한 기능을 모두 갖추고 있는 임베디드 리눅스에서 동작하는 로그인 프로그램인tinylogin 홈페이지이다.

■ http://udhcp.busybox.net/
임베디드 리눅스에서 동작하는 경량급 dhcp 서버와 클라이언트 패키지인 udhcp 홈페이지이다.

■ http://packages.debian.org/stable/base/ae.html
경량 문서 편집기인 안토니 편집기(ae) 패키지를 구할 수 있는 홈페이지이다.

■ http://packages.debian.org/unstable/base/elvis-tiny.html
경량 vi 클론인 elvis-tiny 패키지를 구할 수 있는 홈페이지이다.

목차

 

 

3부. 리눅스 개발 환경 구축과 이식 

12교차 개발 환경 구축 

 

□ Embedded Linux: Hardware, Software, and Interfacing, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ 『GNU 소프트웨어로 프로그래밍 하기』, 마이크 루키디스, 앤디 오람 저, 이기동 역, 한빛미디어, 2000

오라일리 『Programming with GNU Software』의 번역판이다. 문서 편집기인 이맥스, C/C++ 컴파일러인 gcc, 디버거인 gdb, 컴파일 자동화 도구인 make, 소스 관리 시스템인 RCS에 대해 입문하는 병아리 개발자에게 안내자 구실을 한다. 아쉽게도 중급 개발자에게는 부적합하다.

■ http://www.gnu.org/directory/
GNU 소프트웨어 목록을 제공하는 홈페이지이다. 분류 별로 소프트웨어를 묶어 놓고 누가 만들었는지, 프로젝트 홈페이지는 어딘지, 원시 코드와 문서는 구하는 곳을 알려준다.

■ http://gcc.gnu.org/
gcc 공식 홈페이지이다. 필요한 각종 문서와 소프트웨어를 다운로드할 수 있다.

■ http://www.kernel.org/
리눅스 커널 프로젝트 공식 홈페이지이다. 최신 커널 변동 사항과 다양한 플랫폼을 위한 리눅스 링크를 제공한다.

■ http://www.sthoward.com/CrossGCC/
교차 컴파일러인 CrossGCC에 대한 FAQ를 제공하는 홈페이지이다.

■ http://www.linux.org/docs/ldp/howto/Glibc2-HOWTO.html
glibc 버전 2를 리눅스 시스템에 설치하고 활용하는 방법/하는 HOW-TO 문서이다.

■ http://huizen.dds.nl/~frodol/glibc/
glibc 버전 2를 리눅스 시스템에 설치하고 활용하는 방법을 소개하는 기사이다.

■ http://mort.level5.net/stef/glibc.html
glibc 버전 2를 리눅스 시스템에 설치하고 활용하는 방법을 소개하는 기사이다.

■ http://www.handhelds.org/pipermail/familiar/2002-February/005796.html
교차 컴파일 절차와 몇몇 유용한 URL을 제공하는 USENET 문서이다. 조금 낡았기 때문에 단순히 참고용으로만 활용하기 바란다.

■ http://61.96.198.114/linux/arm-linux/cross-compiler.html
한글로 만든 ARM용 교차 개발 환경 컴파일 방법이다. 예전 버전을 다루며 조금 잘못된 내용이 들어있기 때문에 단순히 참고용으로만 활용하기 바란다.

■ http://www.armlinux.org/docs/toolchain/toolchHOWTO/x183.html
ARM용 교차 개발 환경 컴파일 방법이다. 조금 잘못된 내용이 들어있기 때문에, 단순히 참고용으로만 활용하기 바란다.

■ http://www.tazenda.demon.co.uk/phil/arm-tools.html
ARM용 교차 개발 환경 컴파일 방법이다. 이것도 예전 버전을 다루니 참고용으로만 활용하기 바란다.

■ http://www.ailis.de/~k/knowledge/crosscompiling/toolchain.php
ARM용 교차 개발 환경 컴파일 방법이다. 이것도 편법을 써서 있단순히 참고용으로만 활용하기 바란다.

http://www.handhelds.org/z/wiki/HOWTO%20Build%20a%20Cross%20Toolchain%20in%20Brief
ARM용 교차 개발 환경 컴파일 방법이다. 역시 예전 버전을 다루기 때문에 단순히 참고용으로만 활용하기 바란다.

■ http://sources.redhat.com/ml/libc-alpha/2002-01/msg00388.html
ARM용 glibc-2.2.5를 컴파일 할 경우에 필요한 패치 방법을 알려주는 기사이다.

■ http://penguinppc.org/embedded/cross-compiling/
MPC용 교차 개발 환경 컴파일 방법이다. 잘못된 내용이 들어있기 때문에, 단순히 참고용으로만 활용하기 바란다.

 http://groups.google.co.kr/groups?q=gcc%2B3.0.3%2Bcross%2Bcompile%2BARM&hl=ko&newwindow=1&selm=linux.arm.20020205231029.GB25513%40arthur.ubicom.tudelft.nl&rnum=1
ARM용 교차 개발 환경 컴파일 도중에 발생하는 문제점에 대해 이야기하는 뉴스(USENET) 기사이다.

■ http://groups.google.co.kr/groups?hl=ko&newwindow=1&threadm=linux.arm.001501c1a345%245b83a6b0%24eb4a0a3d%40homeuc1hfbdu7w.SOMEWHERE&rnum=7&prev=/groups%3Fq%3Dcrti.o%252Bgcc%252BARM%26hl%3Dko%26newwindow%3D1%26selm%3Dlinux.arm.001501c1a345%25245b83a6b0%2524eb4
ARM용 교차 개발 환경 컴파일 도중에 발생하는 문제점에 대해 이야기하는 뉴스(USENET) 기사이다.

■ http://groups.google.co.kr/groups?q=fenv_libc.h&hl=ko&lr=&ie=UTF-8&oe=UTF-8&newwindow=1&selm=3D236C3A.1030406%40ixiacom.com&rnum=3
MPC용 교차 개발 환경 컴파일 도중에 발생하는 문제점과 해결 방안에 대해 이야기하는 뉴스(USENET) 기사이다.

■ http://groups.google.co.kr/groups?q=fenv_const&hl=ko&lr=&ie=UTF-8&oe=UTF-8&newwindow=1&selm=200201110842.JAA16220%40merlin.gams.co.at&rnum=2
MPC용 glibc 2.2.4 이상 버전을 컴파할 경우 발생하는 문제점과 해결 방안에 대해 이야기하는 뉴스(USENET) 기사이다.

  

13네트워크와 디버깅 환경 구축 

 

□ Embedded Linux: Hardware, Software, and Interfacing, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ 『네트워크 프린팅』, 토드 레이더마커, 매튜 개스트 저, 박재호, 이영미 역, 한빛미디어, 2001
리눅스와 유닉스를 서버로, 윈도우, 맥, 넷웨어를 클라이언트로 구성한 네트워크 환경에서 인쇄하는 방법을 기술한다. BOOTP, DHCP와 같은 네트워크 프로토콜을 사용해 프린터를 부팅하는 방법도 소개한다.

■ http://nfs.sourceforge.net/nfs-howto/
NFS 서버와 클라이언트 설정 방법을 소개하는 NFS HOW-TO 문서이다.

■ http://www.delorie.com/gnu/docs/gdb/gdb_111.html
간단한 gdbserver 사용법을 알려주는 기사이다.

■ http://www.gnu.org/software/ddd/
gdb 프론트엔드인 DDD(DataDisplay Debugger) 홈페이지이다. 명령행 방식에 익숙하지 않은 개발자라면 DDD를 사용하기 바란다.

■ http://www.billgatliff.com/twiki/bin/view/Crossgcc/BuildGdbServer
gdbserver를 효율적으로 컴파일하는 방법을 소개하는 기사이다.

■ http://www.billgatliff.com/twiki/bin/view/Crossgcc/BuildStrace
ARM 플랫폼을 위해 교차 strace를 만드는 방법을 소개하는 기사이다. 

 

14부트 스트랩 로더 이식 

 

□ Embedded Linux: Hardware, Software, and Interfacing, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

 linux/Documentation/arm/SA1100/Assabet

아사벳 환경에서 부트 스트랩 로더를 적용하는 방법을 기술하는 리눅스 배포판에 들어있는 문서이다.

■ http://www.lart.tudelft.nl/projects/jtag/
ARM용 JTAG을 소개하는 홈페이지이다. LART와 호환되는 타겟 보드에만 적용할 수 있다는 사실을 명심하기 바란다.

■ http://www.handhelds.org/Compaq/bootldr.html

부트 스트랩 로더인 bootldr 사용법을 소개하는 HOW-TO 문서이다.

■ http://www.vas-gmbh.de/software/mpcbdm/
MPC용 BDM을 소개하는 홈페이지이다.

■ http://www.aleph1.co.uk/armlinux/book/book1.html
ARM 플랫폼을 위한 교차 개발 환경 구축 방법, JTAG과 Angel 설치와 사용법, 부팅에 필요한 각종 설정, 패키징 관련 내용을 체계적으로 소개하는 문서이다.

■ http://www.aleph1.co.uk/armlinux/docs/ARMbooting/x115.html
앞의 URL에서 부트 스트랩 로더와 관련한 내용만 추려냈다.

■ http://hints.linuxfromscratch.org/hints/grub-howto.txt
GRUB 설치와 환경 설정 방법을 소개하는 HOW-TO 문서이다.

■ http://www.falinux.com/win/study/tip2.html
BLOB 컴파일 방법을 소개하는 HOW-TO 문서이다. 한글 버전이므로 부담없이 읽을 수 있다.

■ http://www.ailis.de/~k/knowledge/crosscompiling/zlib.php
zlib를 ARM 플랫폼에서 교차 컴파일하는 방법을 소개하는 HOW-TO 문서이다.

■ http://www.handhelds.org/handhelds-faq/bootldr.html
bootldr 관련 FAQ를 정리해놓은 문서이다.

■ http://pain.kernel.pe.kr/sgml/embedded/Embedded_Linux_Devel.html
ARM 플랫폼에서 임베디드 리눅스를 이식하는 전반적인 과정을 소개하는 문서이다. bootldr에 대해 소개한다. 한글 버전이므로 부담없이 읽을 수 있다.

 http://sources.redhat.com/ecos/docs-latest/redboot/redboot.html

RedBoot 사용법을 알려주는 사용자 가이드이다.

■ http://sources.redhat.com/ecos/docs-latest/redboot/rebuilding-redboot.html
원시 코드에서 RedBoot을 새로 만드는 방법을 알려주는 HOW-TO 문서이다.

■ http://sources.redhat.com/ecos/anoncvs.html
eCOS를 CVS로 다운로드하는 방법을 소개하는 간이 HOW-TO 문서이다.

■ http://sources.redhat.com/ecos/tools/linux-arm-elf.html
eCOS에 필요한 교차 개발 환경을 구축하는 방법을 소개하는 간이 HOW-TO 문서이다.

■ http://hana-tech.com/LinuxGnuCompilerBuild.htm
ARM용 elf 방식 교차 개발 환경을 구축하는 방법을 소개하는 간이 HOW-TO 문서이다. 한글 버전이므로 부담없이 참고하기 바란다.

■ http://www-2.cs.cmu.edu/~wearable/software/assabet.html
아사벳을 적용하는 개발자라면 누구나 살펴봐야 할 유명한 페이지이다. 하지만 아쉽게도 Angel 사용법 위주로 부트 스트랩 구축 방법을 소개한다.

■ http://www.aleph1.co.uk/armlinux/docs/ARMbooting/jtaging.html
JTAG을 사용해 부트 스트랩 로더를 플래시에 굽는 방법을 소개하는 페이지이다.

■ http://www.denx.de/doc/CPU86/index.html
MPC 플랫폼을 위한 교차 개발 환경 구축 방법, PPCBOOT 설치와 사용법, 부팅에 필요한 각종 설정, 패키징 내용을 체계적으로 소개하는 문서이다.

■ http://penguinppc.org/embedded/howto/PowerPC-Embedded-HOWTO.html
MPC 플랫폼을 위한 교차 개발 환경 구축 방법, PPCBOOT 설치와 사용법, 부팅에 필요한 각종 설정, 패키징 관련 내용을 체계적으로 소개하는 문서이다.

■ http://www.objsw.com/CrossGCC/FAQ-8.html#ss8.1
모토로라에서 만든 MPC를 위한 자료와 프로그램 코드를 전송하는 표준 규약을 소개하는 FAQ이다.

 

15리눅스 커널 환경 설정과 컴파일 

 

□ Embedded Linux: Hardware, Software, and Interfacing, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ linux/Documentation/
리눅스 커널에 들어있는 기본 문서 디렉토리이다. 여러 장치와 커널 관련 각종 문서를 포함하고 있으므로 당장 필요하지 않더라도 주의깊게 읽어보기 바란다.

■ http://www.arm.linux.org.uk/docs/kerncomp.shtml
ARM 플랫폼에서 커널 컴파일하는 방법을 간략하게 소개하는 문서이다.

■ http://option.kernel.pe.kr/index.php3
커널 옵션 한글화 프로젝트 홈페이지이다. 리눅스 커널 환경 설정 항목을 한글화해 제공하므로 초보 개발자에게 상당히 유용하다.

■ http://kldp.org/KoreanDoc/html/2.4Kernel_Compile-KLDP/2.4Kernel_Compile-KLDP.html
리눅스 커널 2.4를 환경 설정하고 컴파일하는 방법을 소개하는 HOW-TO 문서이다.

■ http://kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/
임베디드 개발자(특히 ARM)를 위한 리눅스 커널 분석 기사이다. ARM 리눅스 커널이 어떻게 부팅되고 어떤 특성이 있는지 궁금하다면 이 문서를 참고하기 바란다. 한글 버전이다. 

 

16루트 파일시스템 구축 

 

□ 『Embedded Linux: Hardware, Software, and Interfacing』, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ 『Embedded Linux』, John Lombardo, New Riders, 2002
x86 플랫폼에서 리눅스를 최소한으로 패키징하는 방법을 기술한다. 아주 뛰어나거나 새로운 내용은 담고 있지 않지만, x86에서 임베디드 리눅스를 재미로 탑재해보려는 초보자에게는 도움을 줄 수 있다.

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001

오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

■ http://www.handhelds.org/z/wiki/iPKG
임베디드 시스템에서 사용하는 경량 패키지 관리 시스템인 ipkg를 소개하는 기사이다.

■ http://www.superant.com/cgi-bin/smalllinux.pl?SmallLinuxLikeProjects
x86 플랫폼에서 리눅스를 최소로 설치하는 각종 프로젝트 링크를 담고 있는 홈페이지이다.

■ http://linuxfromscratch.org/
유명한 LFS(Linux From Scratch) 홈페이지이다. 배포판없이 리눅스를 x86 플랫폼에 설치하는 방법을 상세히 소개한다.

■ http://beyond.linuxfromscratch.org/
LFS 다음 버전인 BLFS(Beyond Linux From Scratch) 홈페이지이다. LFS에서 미진했던 부분을 보충하고 있다.

■ http://kldp.org/HOWTO/html/Bootdisk-HOWTO/
리눅스에서 부트 디스크를 직접 만드는 방법을 소개하는 HOW-TO문서이다. 한글 번역판이므로 부담없이 읽을 수 있다.

■ http://www.netspace.net.au/~gok/power2bash/buildMin/buildMin.html
x86 플랫폼에서 초기 부팅 과정에서 배시셸까지 시동하도록 간략하게 리눅스 환경을 구축하는 방법을 소개하는 기사이다.

■ http://www.tldp.org/HOWTO/mini/Hard-Disk-Upgrade/index.html
x86 플랫폼에서 새로 하드 디스크를 장착할 경우에 리눅스 시스템을 이전하는 방법을 소개하는 기사이다.

■ http://www.tldp.org/HOWTO/Installation-HOWTO/index.html
x86 플랫폼에서 리눅스를 어떻게 설치해야 할지 방향을 잡아주는 기사이다.

■ http://www-106.ibm.com/developerworks/linux/library/l-embl.html?l=sd,t=gr,p=emblinx
임베디드 시스템에서 부팅 가능한 디스크를 만드는 방법을 알려주는 기사이다. 비록 x86용이지만, 다른 플랫폼에도 비슷한 방법으로 내용을 적용할 수 있다.

■ http://hints.linuxfromscratch.org/hints/bsd-init.txt
슬랙웨어(Slackware)에서 채택하고 있는 BSD 스타일로 부팅 관련 초기화 방법을 소개하는 기사이다.

■ http://mobilix.org/Mobile-Guide.db/Mobile-Guide.html
랩톱과 모바일 컴퓨터에 리눅스를 설치/운영하는 방법을 소개하는 기사이다.

■ ftp://metalab.unc.edu/pub/Linux/system/daemons/init/
다양한 sysinit 패키지를 제공하는 무명씨 ftp 사이트이다.

■ http://www.ailis.de/~k/knowledge/crosscompiling/bash.php
ARM환경에서 배시 셸을 컴파일하는 방법을 소개하는 작은 HOW-TO 문서이다.

■ http://www.netwinder.org/allmisc.html
ARM 관련 온갖 잡다한 소프트웨어, 각종 패치, 문서, 램디스크를 모아놓은 저장소이다. 주로 소프트웨어가 예전 버전이며 체계적으로 정리를 하지 않았다는 점에 주의하기 바란다.

■ http://www.falinux.com/win/study/tip1.html
EZBOARD 램디스크 확장 방법을 소개하는 작은 HOW-TO 문서이다.

■ ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/

리눅스에 필요한 각종 유틸리티(기본 유틸리티, 각종 환경 설정 파일, 마운트,

fdisk)를 묶어 놓은 패키지이다.

목차

 

 

17실시간 리눅스 커널 이식 

 

□ 『Pthreads Programming』, Bradford Nichols, Dick Buttlar & Jacqueline Proulx Farrell, O’Reilly, 1996
Pthreads를 개념과 프로그래밍 기법에 대해 다루는 고전으로, RTLinux와 RTAI를 사용하려고 마음먹은 개발자는 꼭 읽어야 하는 필독서이다.

□ RTLinux, RTAI 각 패키지 내부에 들어있는 README와 README.DENX

본격적인 설치 이전에 꼭 읽어보고 작업에 들어가기 바란다.

■ http://linuxdevices.com/news/NS7630223030.html
RTLinux/Pro에서 ARM을 지원한다는 소식을 담고 있는 기사이다.

■ http://bernia.disca.upv.es/rtportal/comparative/rtl_vs_rtai.html
RTLinux와 RTAI를 비교하는 문서이다.

 

 

 

18윈도우 시스템 환경 이식 

 

□ 『러닝 리눅스 3판』, 매트 웰시, 라 카우프만, 칼레 딜하이머 저, 이만용 역, 한빛미디어, 2001
오라일리 『Running Linux 3rd Edition』의 번역판이다. 리눅스를 처음 접하는 독자가 고민하면서 읽을 가치가 있는 ‘정보를 위한 정보를 담은 메타북(meta-book)’으로 리눅스라는 운영체제에 철학적으로 접근하는 구성 방식이 돋보인다. 운영체제를 전혀 모르는 완전 초보자에게는 다소 어려울 수도 있다.

□ Documentation/fb 리눅스 내부 문서(framebuffer.txt vesafb.txt, sa1110fb.txt)
마이크로 윈도우와 타이니 X를 위해 커널에서 프레임 버퍼를 설정하거나 동작 원리를 알고 싶을 경우에 참조하기 바란다.

□ EZBOARD_LCD CD에 담긴 '2. LCD와 터치 패드를 위한 수정.PDF'
EZBOARD관련 프레임 버퍼 수정 방법을 기술한 문서이다.

□ EZBOARD_LCD CD에 담긴 '3. 마이크로 윈도우 구성하기.PDF'
마이크로 윈도우 설정 방법을 기술한 문서이다.

■ http://www.handhelds.org/minihowto/building-x.html
ARM 플랫폼을 채택한 iPAQ에 TinyX를 설치하는 방법을 기술하는 기사이다. 아사벳을 비롯해 다른 시스템에도 적용할 수 있다.

■ http://www.tuxscreen.net/wiki/view/BuildingTinyXByHand
ARM 플랫폼을 채택한 TuxScreen에 TinyX를 설치하는 방법을 기술하는 기사이다. uClibc를 사용해 TinyX를 만들고자 하는 개발자라면 꼭 읽어보기 바란다.

■ http://xfree86.mirror.or.kr/4.2.0/BUILD.html
원시 코드 배포판을 사용해 XFree86을 만드는 방법을 기술한 문서이다.

■ http://xfree86.mirror.or.kr/4.2.0/Install.html
XFree86 이진 버전을 설치하는 방법을 기술한 문서이다.

■ http://xfree86.mirror.or.kr/4.2.0/cyrix.html
x86호환 CPU인 Cyrix MediaGX를 위한 XFree86 관련 문서이다.

■ http://www.tuxedo.org/~esr/terminfo/
터미널 정보를 담고 있는 terminfo/termcap 공식 홈페이지이다. '성당과 시장'으로 유명한 에릭 레이몬드씨가 관리자이다.

■ http://www.mock.com/receiver/utils/
ARM 플랫폼에서 리눅스용 termcap 라이브러리를 교차 컴파일하는 방법을 소개하는 기사이다.

■ http://www.ailis.de/~k/knowledge/crosscompiling/ncurses.php
ARM 플랫폼에서 리눅스용 ncurses 라이브러리를 교차 컴파일하는 방법을 소개하는 기사이다.

■ http://embedded.centurysoftware.com/pixil/pixiloe.php
MicroWindows 기술을 사용한 컴팩 iPAQ PDA용 통합 윈도우 환경인 Pixil을 소개하는 홈페이지이다. 비상업용으로 평가판을 다운로드할 수 있다.

■ http://www.tahallah.demon.co.uk/programming/Framebuffer-HOWTO-1.2.html
리눅스 프레임 버퍼 설정에 대해 상세히 다루는 HOW-TO 문서이다.

■ http://doc.trolltech.com/3.0/emb-framebuffer-howto.html
리눅스 프레임 버퍼 관련 커널 설정 항목을 간략하게 다루는 HOW-TO 문서이다.

■ http://sdb.suse.de/kr/sdb/html/cg_framebuffer-x4.0.html
XFree 4.0에서 VESA 프레임 버퍼 설정 방법을 다루는 기술 지원 문서이다.

■ http://www.handhelds.org/projects/ts_spec.html
터치 스크린(TS) 드라이버를 위한 표준 규약을 소개하는 기사이다.

■ http://www.handhelds.org/minihowto/building-x-clients.html
X 클라이언트 컴파일 방법을 소개하는 HOW-TO 문서이다.

■ http://www.xs4all.nl/~zweije/xauth-6.html 

 

19부팅과 설치 확인 

 

□ 『Embedded Linux: Hardware, Software, and Interfacing』, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개이므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ linux/Documentation/arm/SA1100/Assabet
아사벳 환경에서 부트 스트랩 로더를 적용하는 방법을 기술하는 리눅스 배포판에 들어있는 문서이다.

□ Boot Loader HowTo
TBEl1110 CD에 들어있는 문서로, tbloader 컴파일과 사용법에 대해 소개하고 있다.

■ http://www.lart.tudelft.nl/lartware/blob/
부트 스트랩 로더인 blob 사용법을 소개하는 HOW-TO 문서이다.

■ http://www.handhelds.org/Compaq/bootldr.html
부트 스트랩 로더인 bootldr 사용법을 소개하는 HOW-TO 문서이다.

■ http://sources.redhat.com/redboot/
레드햇에서 운영하는 RedBoot 공식 홈페이지이다.

■ http://sources.redhat.com/ecos/docs-latest/redboot/redboot.html
RedBoot 사용법을 알려주는 사용자 가이드이다.

■ http://www.aleph1.co.uk/armlinux/docs/ARMbooting/angelboot.html
Angel을 사용해서 부팅하는 방법을 알려주는 사용자 가이드이다.

■ http://www.falinux.com/win/date/doc/ezboot.zip
FALINUX에서 제공하는 EZBOOT 사용자 매뉴얼이다. PDF 형식으로 되어있다.

■ http://www.denx.de/doc/CPU86/ppcboot.html
DENX에서 만든 'PPCBoot and Linux Guide'에 실린 ppcboot 사용자 가이드이다. 각 명령에 대해 자세히 잘 나와있으므로 MPC 개발자라면 반드시 읽어보기 바란다.

 

 

 

20상용 제품을 위한 패키징 

 

□ 『Embedded Linux: Hardware, Software, and Interfacing』, Dr. Craig Hollabaugh, Addison-Wesley, 2002

임베디드 리눅스에 대해 체계적으로 잘 구성된 책이다. 절반 이상이 인터페이스하는 방법에 대한 소개하므로, 일정 수준 이상의 개발자가 보기에 적당하다.

□ linux/Documentation/arm/SA1100/Assabet
아사벳 환경에서 부트 스트랩 로더를 적용하는 방법을 기술하는 리눅스 배포판에 들어있는 문서이다.

 inux/Documentation/filesystems/cramfs.txt
CRAMFS에 대한 각종 제약 사항을 알려주는 문서이다.

 inux/Documentation/initrd.txt
initrd에 대한 동작 원리를 기술한 리눅스 배포판에 들어있는 문서이다.

■ http://www-903.ibm.com/developerworks/kr/linux/library/l-fs7.html?dwzone=linux
IBM developerWorks에 실린 EXT3 파일시스템 관련 기사이다. 한글판이므로 부담없이 읽을 수 있다.

■ http://www.symonds.net/~rajesh/howto/ext3/toc.html
EXT3 파일시스템을 사용할 수 있도록 설치부터 운영까지 차근차근 설명하는 작은 HOW-TO 문서이다.

■ http://people.spoiled.org/jha/ext3-faq.html
EXT3 관련 FAQ 문서이다. 다양한 상황에 대해 해결책을 알기 쉽게 제시하므로 읽어볼 가치가 있다.

 

■ http://olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html
EXT3 개발자인 트위디 박사가 EXT3 저널링 파일시스템을 발표한 자료이다.

■ http://www.zip.com.au/~akpm/linux/ext3/ext3-usage.html
커널 2.4를 위한 EXT3 파일시스템 패치를 제공하는 홈페이지이다.

■ http://www.linux-mtd.infradead.org/
MTD 홈페이지이다.

■ http://sources.redhat.com/jffs2/
JFFS2 홈페이지이다.

■ http://www.handhelds.org/z/wiki/Constructing%20a%20cramfs%20image
CRAMFS 파일시스템 생성 방법을 소개하는 기사이다.

■ http://handhelds.org/z/wiki/Creating%20a%20JFFS2%20Image
JFFS2 파일시스템 생성 방법을 소개하는 기사이다.

http://www.handhelds.org/z/wiki/Can%20I%20mount%20a%20cramfs%20image%20on%20my%20linux%20PC
CRAMFS 파일시스템 마운트 방법을 소개하는 기사이다.

■ http://www-scf.usc.edu/~dantu/mtd-jffs.html
아사벳에서 JFFS를 적용하는 방법을 소개하는 간이 기사이다.

■ http://www.falinux.com/win/06_ramdisk/020_mtd_util/index.htm
EZBOARD에서 사용할 MTD 관련 각종 유틸리티 이식 방법을 소개하는 기사이다.

■ http://www.falinux.com/win/06_ramdisk/010_mtd_ramdisk2/index.htm
EZBOARD에서 램디스크 이미지 영역 없이 JFFS2만으로 부팅하는 방법을 소개하는 기사이다.

■ http://www.falinux.com/win/study/08/flashboot.html
EZBOARD에서 플래시 메모리를 루트 파일시스템으로 지정하는 방법을 소개하는 기사이다.

■ http://www.handhelds.org/handhelds-faq/filesystems.html
iPAQ에서 파일시스템을 다루는 각종 기법에 대해 소개하는 FAQ 문서 일부이다.

■ http://ykjung99.netian.com/mtd/mtd.html
MPC 플랫폼에서 MTD/JFFS를 적용하는 방법을 알려주는 홈페이지이다.

■ http://myhome.naver.com/kingseft/gallery.html
MPC 플랫폼에서 MTD/JFFS를 적용하는 방법을 알려주는 홈페이지이다.

■ http://www.denx.de/doc/TQM8xxL/advanced-topics.html
MPC 플랫폼에서 MTD를 설정하는 방법을 알려주는 HOW-TO 문서이다.

■ http://sources.redhat.com/ecos/docs-latest/redboot/flash-image-system.html
RedBoot 플래시 이미지 시스템인 FIS를 소개하는 기사이다.

■ http://www.handhelds.org/minihowto/porting-software.html
ARM 관련 엔디안 문제를 다루는 HOW-TO 문서이다.

■ http://e-www.motorola.com/brdata/PDFDB/docs/AN2065.pdf
파워PC 관련 엔디안 문제를 다루는 문서이다. 파워PC는 빅 엔디안을 기본으로 사용하지만 리틀 엔디안도 쓸 수 있다.

 덧글 쓰기  엮인글 쓰기

 
 
   
 
[펌] arm7 menual  Embedded 

2004/12/06 23:51

 

복사http://blog.naver.com/poohyjk3/100008318996

 

출처 hhong3님의 블로그 | hhong3
원문 http://blog.naver.com/hhong3/80008230283

--------------------------------------------------------------------

ARM7 강좌 [1] : 강좌 소개

-------------------------------------------------------------------- 

● 강좌 소개 

RISC칩 중에 가장 널리 사용되고 있는 것의 하나인 ARM7에 대하여 다루어 보려고 합니다. 부족한 점이 많겠지만, 이 강좌를 통해 ARM7을 공부하시는 분들에게 조금이나마 도움이 되었으면 하고, 아울러 저 역시 어떤 보람을 얻을 수 있었으면 합니다. 

● 강좌에서 다루고자 하는 내용들

 

- 개요

- 구조

- 레지스터

- Exception(1)

- Exception(2)

- Instruction Set(1)

- Instruction Set(2)

- Instruction Set(3)

- StrongARM

 

사실 ARM 아키텍처의 경우엔 관련 문서가 아주 잘 만들어져 있습니다. www.arm.com 사이트에 들어가면 해당 문서를 PDF형태로 받아 볼 수 있고 내용도 아주 잘 정리되어 있습니다. 강좌를 통해 어느 정도 기본을 익히고 해당 자료를 찾아 공부하신다면, 빠른 시일 내에 ARM을 익힐 수 있으리라 생각됩니다. 

--------------------------------------------------------------------

ARM7 강좌 [2] : 개요

-------------------------------------------------------------------- 

● ARM7의 특징

 

ARM의 가장 큰 특징은 전력을 조금만 소모한다는 것입니다. 일설에 의하면, ARM을 설계할 때, 요즘 CPU를 설계하는 방법처럼 VHDL등을 사용한 것이 아니라 일일이 회로를 그려가면서 했다는 설도 있습니다. 사실이야 어떻든, ARM의 저-전력 설계기술은 널리 알려진 사실입니다. 이런 이유 때문에, ARM CPU는 상대적으로 전력이 중요하게 여겨지는 휴대용 단말기에 많이 채택되고 있습니다. 

이제 이런 일반적인 내용말고, 좀 구체적인 내용으로 들어가 보겠습니다. 다음은 ARM7의 특징들입니다. 

1. 32 Bit RISC 프로세서

: ARM7은 내부적으로 32Bit의 데이터 버스와 32Bit의 어드레스 버스를 제공합니다. 내부적이란 말은, ARM7이 Core 형태로 여러 종류의 칩에 탑재되기 때문인데, 어떤 칩은 어드레스 라인을 내부적으로는 32비트를 사용하고 외부적으로는 메모리 매니지먼트 유닛을 통해 24비트를 사용하기도 합니다. 그리고 잘 알려져 있듯이 ARM은 대표적인 RISC 코어입니다.

 

2. Big/Little Endian 모드지원

: 엔디안이라는 것은, 흔히 역-워드 방식이라고 말하는 것과 관련이 있습니다. 인텔 계열의 CPU에서는 메모리에 여러 바이트의 내용을 저장 할 때, 하위 바이트가 먼저 오고 상위 바이트일 수록 뒤에 오는데, 이런 형태를 Little Endian이라고 합니다. 또 모토롤라 계열의 CPU처럼 가장 상위 바이트가 먼저 오는 방식이 Big Endian입니다. 해당 설정은 ARM7이 구현된 칩에 따라 틀리지만, 보통 칩 외부에서 핀 입력을 받아 결정됩니다. 

3. High Performance RISC

: ARM7 의 경우 3V를 사용하고 25MHz의 Clock을 사용할 때 약 17MIPS가 나온다고 합니다. 

4. Fast Interrupt Response

: 인터럽트 처리를 빠르게 해 줄 수 있는 FAST인터럽트 기능이 있습니다. 후에 레지스터 부분에서 자세히 다루겠지만, 레지스터 셋을 따로 제공해서, 인터럽트 처리루틴에서 레지스터를 저장, 복구하는 시간을 줄이는 방식입니다. 

5. Excellent high level language support

: 인스트럭션 셋을 살피면, C나 다른 언어에서 일반적으로 사용하는 기능들을 바로 구현할 수 있는 명령어들이 제공됩니다. 예를 들어 변수의 앞, 뒤에 ++나 --를 붙이는 형식의 오퍼레이션을 제공합니다. 

6. Simple & Powerful Instruction Set

: ARM의 명령어는 그 종류가 적으면서도, 다양하게 적용시킬 수 있는 특징이 있습니다. 이후에 다루게 되면 여러분들도 느끼시겠지만, 배우기 쉽고, 또 강력한 기능을 제공합니다. 

오늘은 ARM7의 전반적인 내용에 대해 간단히 언급했습니다. 사실 ARM을 개인적으로 사용하기는 쉽지 않은 일입니다. 왜냐하면, ARM을 사용한 칩을 구하기가 쉽지 않기 때문인데요, 최근 CPU인 만큼, 나오더라도 SMD타입으로 나오는 것이 많고 소량으로 구매하기가 쉽지가 않습니다. 

하지만, 여러분들이 회사에서 일을 하게 되면, 사정이 달라집니다. ARM은 비교적 저렴하면서도 가격에 비해 좋은 성능을 보이고, 게다가 저-전력 소모라는 강력한 장점을 가지고 있기 때문입니다. 국내 반도체 업계에서도 LG, 삼성, 현대 등, 모두 ARM 코어를 사용한 칩을 생산하고 있습니다. 그리고, ARM을 사용할 때의 장점중의 하나는, ARM사에서 개발환경과 도큐먼트 등을 제공한다는 것입니다. 

내용은 되도록 쉽게 쓰려고 노력했는데, 어땠는지 모르겠군요. 그러면 다음 강좌에서 뵙겠습니다. 다음 강좌에서는 ARM7의 블록 구조에 대해서 살펴볼 생각입니다.

--------------------------------------------------------------------

ARM7 강좌 [3] : ARM7의 구조

-------------------------------------------------------------------- 

● ARM7의 구조

 

1. 레지스터

: ARM7에는 31개의 32Bit 레지스터가 있습니다. 또, 동작모드에 따르는 -여기서 동작모드는 Exception부분에서 자세히 다루겠습니다.- 6개의 Status 레지스터가 있습니다.

 

2. ALU

: 32Bit 연산이 가능한 ALU가 제공됩니다. 그런데 특이한 것은 ALU의 한쪽 입력은 Barrel Shifter라는 것이 연결되어 있어서 ALU의 인수 하나는 레지스터에서 바로 들어오고, 다른 하나는 레지스터나 버스에서 Barrel Shifter라는 것을 거쳐 입력되도록 되어 있습니다. 이런 이유로 ARM7에서는 제 2 오퍼랜드를 지정할 때, 해당 값을 쉬프트 시켜서 사용할 수 있습니다. 보통 다른 CPU에서는 쉬프트 명령이 따로 있었는데, ARM7에서는 따로 존재하는 것이 아니라 대부분의 명령에서 옵션으로 적용시킬 수 있습니다. 

3. Booth's 곱셈기

: 곱셈 기능을 제공하는 32 비트 Booth's 곱셈기가 있습니다. 곱셈기는 32 비트 연산을 지원하며, 32비트의 두 입력을 받아서 곱하여, 결과가 32비트를 넘더라도 넘는 부분은 버리고 32비트만을 남깁니다. 

이밖에 인스트럭션 디코더와 인크리멘터가 달린 어드레스 레지스터 등이 있고, 내부적으로는 지난번에도 말했듯이 32비트의 어드레스 & 데이터 버스로 연결됩니다. 또, ARM7은 파이프라인을 제공하고, 추가적으로 StrongARM과 같은 칩에서는 캐쉬 기능과 MMU 기능 등도 제공합니다. 

전에 말씀 드렸지만, ARM7은 CPU의 코어를 말합니다. 즉, 특정 칩을 일컫는 것이 아니기 때문에, 흔히 CPU를 접할 때 다루게 되는 I/O제어나 타이머, 인터럽트 부분 등은 강좌에서 소개되지 않습니다. 왜냐하면, 같은 ARM7 코어의 CPU라 하더라도 해당 부분들이 각기 다르기 때문입니다. 따라서 여러분들이 ARM7 코어를 사용한 칩을 공부하시고자 할 경우엔, 먼저 이 강좌의 내용인 ARM7 코어에 대한 부분을 공부하고, 다음에 해당 칩의 데이터시트를 보셔야 합니다. 

참고로, 제가 공부했던 칩은 샤프에서 나온 LH77790 이라는 칩과 Strong ARM 코어를 사용한 인텔의 SA1100 이라는 칩 두 가지 입니다.

StrongARM은 Digital 사에서 ARM7 코어를 Licence 얻어서 확장한 형태인데, 기본적으로는 거의 유사하고 MMU같은 기능들이 추가가 된 코어입니다. 현재는 Intel이 Digital로부터 Licence를 구입하여 생산하고 있고, SA110 이나 SA1100, SA1111 등의 칩으로 제작되어 판매되고 있습니다.

현재 생각으로는 강좌의 끝 부분에 가서 StrongARM인 SA1100에 대해서도 조금 다루어 볼 생각입니다.

그럼 오늘 강좌는 이만 줄이도록 하겠습니다. 다음 강좌에서는 ARM7의 레지스터에 대한 내용을 다루겠습니다.

--------------------------------------------------------------------

ARM7 강좌 [4] : 레지스터

-------------------------------------------------------------------- 

● ARM7의 레지스터 

지난 강좌에서 ARM7에는 31개의 General Purpose 레지스터와 6개의 Status 레지스터가 있다고 말씀드렸습니다. 물론 모두 32비트 레지스터입니다. 

그런데, ARM7의 어셈블러에서 사용하는 범용 레지스터 키워드는 r0에서 r15까지 16개 밖에는 되지 않습니다. 즉, 다시 말해서 사용자가 한번에 사용할 수 있는 레지스터는 16개 입니다. 그 중에 몇 개는 프로그램 카운터 (PC) 나 스택 포인터(SP) 등의 용도로 사용됩니다. 나머지 레지스터는 CPU 동작 모드(Exception)과 관련되어 r0-r15로 리-맵핑되어 사용되는데 이는 다시 설명 드리겠습니다. 

1. Special Purpose General Register 

위 부분에서 잠시 설명 드렸지만, User가 프로그램 할 때 레지스터 지정을 위해 사용할 수 있는 키워드는 r0에서 r15까지 입니다. 그 중에 몇 가지는 특별한 목적을 위해 사용됩니다. 

- Program Counter (r15) 

: r15는 다른 CPU에서 PC와 같은 역할을 합니다. 다만 차이가 있다면 r15를 일반 다른 레지스터처럼 오퍼랜드로 사용할 수 있다는 점이고(다른 CPU도 마찬가지인가요?) ARM어셈블러에서는 pc라는 키워드와 r15를 동일하게 취급합니다. 

- Stack Pointer (r13) 

: ARM7에는 Stack을 위한 명령어가 따로 없습니다. 즉, Push 나 Pop등의 명령어가 제공되지 않습니다. 그러나 sp라는 키워드를 사용하여 r13을 쓸 수 있는데, 묵시적으로 r13을 스택포인터로 사용할 수 있도록 정해 놓은 듯 합니다. 그러면 왜 하필이면 r0나 r1이 아니고 r13을 sp라고 부르는가 하면, 역시 Exception과 관련된 부분이므로 잠시 후에(혹은 다음강좌에) 설명하도록 하지요. 그리고, Push 명령이나 Pop 명령이 없으므로, ARM7에서는 같은 기능을 일반 데이터 전송 명령을 통해 해결합니다. ARM7의 데이터 전송명령은 Auto Increment 기능이 있어서 하나의 인스트럭션으로 Push나 Pop과 동일한 기능을 수행 할 수 있습니다. 

- Link Register (r14) 

: r14는 링크 레지스터라고 부릅니다. 이 레지스터는 8086등에서는 보지 못했던 기능의 레지스터입니다. 8086등의 프로세서는 서브루틴을 호출할 경우 CALL을 사용하면 다음에 수행될 프로그램 카운터를 스택에 넣고, 호출될 번지를 프로그램 카운터에 넣는 동작을 하는데, ARM7에서는 CALL과 RET와 같은 명령이 없습니다. 대신 Branch with Link 라는 명령(BL)이 있는데, 해당 명령을 수행하면, CALL과 비슷하게 다음에 수행될 pc(r15)값을 스택이 아니라 lr(r14)에 넣고 분기 번지를 pc(r15)에 넣어 분기합니다. 즉, 스택을 사용하지 않는 것이지요. 복귀할 때는 RET대신 mov pc,lr 이라는 데이터 전송명령으로 복귀합니다. 

이런 방식은 나름대로 장단점이 있습니다. 우선 단점을 말하자면, 어떤 서브루틴이 콜 되었을 때, 서브루틴에서는 복귀번지가 r14에 들어있는 상태가 됩니다. 문제는 해당 서브루틴에서 다시 한번 다른 서브루틴을 콜 한다면, 원래 r14에 보관되어 있던 복귀 번지 값이 덮어씌워지는 결과가 생깁니다. 이런 경우엔, 수동으로 sp(r13)를 이용하여 스택에 r14 값을 보관해 두어야 합니다. 즉, Call하기 전에 r14를 스택에 보관해 두고, 리턴해서 복구하는 과정을 거치는 셈이지요. 

그러면 구태여 왜 이런 방법을 사용할까요. 이미 눈치채신 분들도 계시겠지만, 그렇게 Call을 연속적으로 하는 경우가 아닌, 한번만 Call 하는 경우라면, 스택을 사용하지 않고 레지스터를 사용함으로써, 그 속도에서 이익을 얻게 되는 것이죠. 

개인적으로는 기능이야 어떻든, Call과 Ret 마저 없어서 코드를 읽기가 상당히 좋지 않다는 생각입니다. 코드를 보고 어디서 어디까지가 한 프로시저인지 쉽게 분간이 안 갈 경우가 많거든요. 

2. ARM7 Status Register 

이제 Status 레지스터를 살펴보려고 합니다. ARM7에는 32비트의 Status 레지스터가 6개가 있습니다. 그러나 6개 모두를 한꺼번에 사용하지는 못하고, 또 그럴 필요도 없죠. 일단은 하나의 32비트 Status 레지스터만 생각하면 됩니다. 

Status 레지스터는 PSR이라고 부릅니다. 그리고 일반적으로 CPSR이라고 하여 Current Processor Status Register로 부릅니다. 

PSR은 크게 Flag Bits부분과 Control Bits부분으로 나뉩니다. 

- Flag Bits

: 어떤 인스트럭션의 결과 등을 나타내는 부분으로 4 비트가 있습니다. 다른 CPU의 그것과 유사한데, 각각 N, Z, C, V 의 4가지입니다. 

1) Negative/Less Than Flag

: N으로 표기되는 이 플래그는 연산의 결과가 마이너스인 경우에 세트됩니다.

2) Zero Flag

: Z로 표기되는 이 플래그는 연산의 결과가 0이 되었을 경우에 세트됩니다.

3) Carry/Borrow/Extend Flag

: C로 표기되는 이 플래그는 자리올림이나 내림이 발생한 경우, 그리고 Shift 연산 등에서 사용됩니다.

4) Overflow Flag

: V로 표기되는 이 플래그는 연산의 결과가 오버플로우 되었을 경우 사용됩니다. 

이상의 Flag Bit들은 다른 칩의 상태 레지스터와 다르지 않습니다. 따라서 이해를 하는 데에도 별 무리가 없으리라 생각되며, 더 자세히 알고 싶다면, 각 명령어와 관련된 문서를 참조하시길 바랍니다. 

- Control Bits 

: 컨트롤 비트들은 인터럽트를 제어하는 비트와 계속해서 언급되기만 하고 실체를 드러내지 않고 있는 Exception과 관련된 CPU 동작모드를 설정하거나 확인할 수 있는 기능을 가진 Bit가 있습니다. 

1) IRQ / FIQ Disable Bit

: ARM7의 인터럽트 중에서 IRQ와 FIQ를 금지시킬 수 있는 플래그입니다. 인터럽트의 종류는 이밖에도 몇 가지가 더 있는데, 그 중에서 IRQ, FIQ는 PSR을 통해 금지시키거나 가능하도록 설정할 수 있습니다.

2) Mode Bits

: M0 에서 M4까지의 모드 비트는 CPU의 6개의 동작 상태를 나타냅니다. 즉, 간단히만 말하자면 ARM7은 6개의 동작 모드를 가지는데, 이를테면 User모드와 인터럽트 모드 등입니다. 역시 자세한 내용은 다음 강좌를 통해 말씀드리겠습니다. 

이제 Status 레지스터를 한번 그려보겠습니다.

+----------------------------------------------------------------+

| N | Z | C | V | ... | I | F | | M4 | M3 | M2 | M1 | M0 |

+----------------------------------------------------------------+

Bit 31 30 29 28 7 6 4 3 2 1 0 

오늘은 ARM7의 레지스터에 대해 기본적인 내용을 알아보았습니다. 하지만 많은 부분에서 ARM7의 동작 모드와 관련되는 부분이 나왔지요. 때문에 다음 시간으로 미룬 부분들이 많군요. 

다음 강좌에서는 ARM7 Exception에 대해서 다루려고 합니다. 오늘은 이만 줄이겠습니다. 

--------------------------------------------------------------------

ARM7 강좌 [5] : Exception (1)

-------------------------------------------------------------------- 

● Exception 

우선 Exception이 무엇을 말하는지를 이제부터 정리해 보고자 합니다. 일반적으로 인터럽트와 유사한 개념으로 사용합니다. 어떻게 보면 인터럽트보다는 조금 큰 개념이랄 수도 있고, 정확한 정의에 대해서는 말씀을 드리지 못하겠군요. 개념을 ARM7에서의 Exception으로 한정해서 말씀드리겠습니다. 

구체적으로 ARM7에는 FIQ(Fast Interrupt reQuest)와 IRQ(Interrupt reQuest), Abort, Software Interrupt, Undefined Instruction Trap의 5가지 Exception이 있고, 각각 Exception이 발생하면 CPU는 대응하는 동작모드로 전환됩니다. 여기에 보통 동작상태인 User 동작모드가 추가되어 동작 모드는 총 6개가 있습니다. 

- IRQ

: 일반적으로 I/O 장치로부터의 입력이 들어오면 반응을 하는 흔히 말하는 인터럽트 Exception입니다. IRQ의 종류로는 내부 타이머나 시리얼, 혹은 외부 IRQ입력 등이 될 수 있습니다.

- FIQ

: 개념적으로는 IRQ와 거의 유사한데, 다만 보다 빠른 처리를 할 수 있도록 제공되는 Exception입니다. IRQ의 소스는 대부분 FIQ로도 매핑 될 수 있습니다. 즉, 타이머 인터럽트를 IRQ로 처리하거나, 혹은 FIQ로 처리할 수도 있다는 의미입니다.

- Abort

: CPU가 메모리로부터 인스트럭션을 가져오거나, 혹은 인스트럭션을 동작시키면서 데이터를 가져오려고 할 경우, 해당 메모리를 억세스 할 수 없다면 Abort Exception이 발생합니다. 위에 제시한 두 가지 경우에 대응하여 Prefetch Abort와 Data Abort로 구분할 수 있습니다.

- Software Interrupt

: 프로그램에서 임의로 인터럽트를 호출하는 경우입니다. ARM Instruction SWI가 이에 해당합니다. 이 Exception이 발생하면 CPU동작모드가 Supervisor 모드로 바뀌도록 되어 있고, 보통 OS의 시스템 Call을 구현하기 위해 사용됩니다.

- Undefined Instruction Trap

: ARM7 에 정의되어 있지 않은 명령어를 만났을 경우 발생하는 Exception입니다. 이 기능은 코프로세서를 사용하는 경우와 관련되어 사용된다고 합니다. 

위에서 언급한 5종류의 Exception에 몇 가지를 더하여, 해당 처리를 위해 ARM7은 0번지에 벡터 테이블을 유지합니다. 즉, 해당 Exception이 발생하면 정해져 있는 벡터 번지로 실행을 옮깁니다. 해당 번지는 다음과 같습니다. 

Address Exception Mode on entry

-----------------------------------------------------

0x0000.0000 Reset Supervisor

0x0000.0004 Undefined Instruction Undefined

0x0000.0008 Software Interrupt Supervisor

0x0000.000C Abort(prefetch) Abort

0x0000.0010 Abort(data) Abort

0x0000.0014 --reserved-- --

0x0000.0018 IRQ IRQ

0x0000.001C FIQ FIQ 

한가지 주의할 점은 8086의 경우엔 해당 벡터에 ADDRESS를 넣어 두면, 인터럽트 발생 시에 해당 주소를 가져다가 PC에 넣어주는 일이 발생하지만, ARM7의 경우엔 그냥 해당 벡터로 점프를 합니다. 예를 들어 IRQ가 발생했다면 다음순간의 pc(r15)값은 0000.0018 이 됩니다. 따라서 해당 벡터 번지에는 단순히 번지가 들어가는 것이 아니라 점프명령 같은 것이 들어갑니다. 

● 동작모드 

위의 Exception과 관련되어 CPU의 동작모드 몇 가지가 나타나 있습니다. 전에도 몇 번 말했듯이 ARM7에는 6가지의 동작 모드가 있습니다. 해당 모드는 User Mode, FIQ Mode, IRQ Mode, Supervisor Mode, Abort Mode, Undefined Mode 등의 6가지입니다. 

- 동작모드와 범용 레지스터 

동작모드가 왜 있는 걸까요? ARM7은 각 동작모드에 따라서 몇 가지 기능을 제공합니다. 가장 큰 것으로 레지스터를 리-맵핑시키는 기능이 있습니다. 좀 다르게 설명하면, 각 모드마다 전용 레지스터가 따로 있다고도 표현할 수 있겠는데요, 차근차근 설명해 보도록 하겠습니다. 

CPU의 동작모드는 보통 때는 User 모드입니다. 이 때는 기본적으로 r0에서 r15까지를 사용하고 있겠죠. 그러다 가령 FIQ가 발생했다고 하면 동작 모드가 FIQ 모드로 바뀌게 됩니다. 이와 동시에 r8부터 r14까지의 7개의 레지스터는 FIQ 전용 레지스터로 리-맵핑됩니다. 즉, User모드의 레지스터와는 별개였던 레지스터 7개가 r8부터 r14까지의 위치에 배치되는 것이죠. 물론 기존의 User모드에서 사용하던 r8-r14까지의 레지스터와는 별개의 레지스터입니다. 

이렇게 하는 장점을 생각해 보겠습니다. 흔히 인터럽트 처리루틴을 작성할 경우 인터럽트 발생 시 가장먼저 하는 일이 사용 중이던 레지스터를 스택에 저장하고, 또 처리루틴이 종료될 때는 다시 복구시키는 일이었습니다. 그러나 ARM7에서 FIQ의 경우를 살피면, FIQ 처리 루틴의 코딩 시에는 r8부터 r14까지를 자유롭게 사용할 수 있고, 또 저장과 복구 과정을 생략해도 좋습니다. CPU모드가 바뀜에 따라 레지스터 자체가 별개의 다른 것으로 바뀌었기 때문입니다. 

해당 내용을 정리해 보도록 하겠습니다. 

-----------------------------------------------------

User FIQ Super Abort IRQ Undefined

-----------------------------------------------------

r0 . . . . .

r1 . . . . .

r2 . . . . .

r3 . . . . .

r4 . . . . .

r5 . . . . .

r6 . . . . .

r7 . . . . .

r8 r8_fiq . . . .

r9 r9_fiq . . . .

r10 r10_fiq . . . .

r11 r11_fiq . . . .

r12 r12_fiq . . . .

r13 r13_fiq r13_svc r13_abt r13_irq r13_und

r14 r14_fiq r14_svc r14_abt r14_irq r14_und

r15(PC) . . . . .

----------------------------------------------------- 

위의 그림이 각 모드에 따라 리-맵핑되는 레지스터들을 나타낸 그림입니다. FIQ모드에서는 7개, 그리고 나머지 모드에서는 2개씩의 레지스터가 리-맵핑됩니다. 

이 개념이 이해하기가 좀 어려울지도 모르겠군요. 시간을 가지고 차근차근 생각해 보시길 바랍니다. 

그러면 왜 다른 모드들에서는 r13과 r14를 따로 두었을까요? 그것은 그 레지스터들이 특별한 목적을 위해 사용되는 레지스터이기 때문입니다. 

레지스터차원에서 이번에는 IRQ가 발생한 경우를 가지고 설명해 보겠습니다. 

r14는 Link 레지스터로써 Call과 같은 인스트럭션이 발생할 경우 복귀 할 번지를 저장해 두는 레지스터입니다. 다음은 IRQ 발생 과정입니다. 

1) User모드에서 r0-r15를 사용하고 있다.

2) IRQ 발생

3) ARM CPU는 동작모드를 IRQ 모드로 바꾼다.

( 이때 r13과 r14는 IRQ 전용 레지스터로 대치된다.)

4) 이 시점의 PC 값은 IRQ 처리 이후 복귀할 번지이다. 그 값을 r14 (이미 IRQ모드가 되었으므로 r14_irq) 에 넣는다.

5) 만약에 r0부터 r12까지를 IRQ처리 루틴에서 사용하고자 한다면 해당 레지스터를 sp(r13, 역시 r13_irq)를 사용하여 스택에 넣는다.

..... 

여기서 5)번 과정을 눈 여겨 볼 필요가 있을 듯 합니다. r13이 스택 포인터로 사용됨은 지난 강좌에서 말씀드렸었습니다. 그런데, 각 모드마다 r13을 따로 가지고 있으므로, 스택을 CPU 동작모드마다 따로 관리할 수 있게 되는 것입니다. 

그림이라도 그려서 설명을 드리면 좋을 듯 한데, 텍스트로만 설명하기가 쉬운 일이 아니군요. 

r14는 복귀번지가 들어가기 때문에 항상 디폴트로 사용되므로 여분의 레지스터가 필요하겠죠. 그런 이유로 r13과 r14를 각 모드마다 따로 둔 것입니다. 혹시 이해가 되시나요? 

FIQ모드는 그 이름에서도 나타나 있듯이 7개의 레지스터를 따로 두어서 레지스터 저장 복구 과정을 거의 생략할 수 있도록 한 것이죠. 

그리고 참고로 Exception에서 복귀할 경우엔 기본적으로는 해당 모드의 r14 번지의 내용을 r15번지로 넣는데, 각 모드마다 조금씩의 차이가 있습니다. 

맨 처음 ARM7 을 소개할 때 범용 레지스터가 31개라고 말씀드렸었는데, 지금 다시 계산을 해보면, User모드의 디폴트 16개 + FIQ 모드 7개 + 나머지 4개의 모드 *2 =8개 해서 16+7+2+2+2+2=31 개로 계산이 됩니다. 

- 동작 모드와 PSR(Status 레지스터) 

범용레지스터와 비슷하게 PSR 역시 동작모드마다 따로 관리가 됩니다. 해당 레지스터는 뒤에 모드 이름을 붙여서 SPSR_fiq, SPSR_svc, SPSR_abt, SPSR_irq, SPSR_und 와 같은 이름으로 부릅니다. 따라서 PSR 개수는 CPSR을 포함하여 총 6개가됩니다. 

SPSR은 CPSR값을 저장해 두는 역할을 합니다. 범용레지스터가 아예 맵핑이 바뀌는데 반해, 모드가 바뀔 경우, 예를 들어 IRQ가 발생했다면, 기존에 User모드에서 사용하는 CPSR값을 SPSR_irq에 저장을 합니다. 그리고 IRQ 모드에서는 CPSR과 SPSR_irq를 둘 다 볼 수 있습니다. 후에 IRQ가 끝나는 시점에서 SPSR_irq의 내용을 CPSR로 복구하면 원래의 CPSR값이 유지되는 것이죠. 

가만히 생각해보면 Exception이 발생했을 때 해당 처리 루틴에는 그 순간의 CPSR값을 그대로 가져오는 셈이지요. 다만 시작할 때 해당 값을 SPSR에 저장해 두었기 때문에 IRQ 처리루틴에서 수정이 된다고 해도, 복귀할 때 SPSR에서 CPSR값을 다시 가져오므로, 실행 중이던 환경은 그대로 유지가 되는 것입니다. 이렇듯 ARM7에서는 Exception처리에 있어 되도록 스택 사용을 최소화하려는 노력을 엿볼 수 있습니다. 

오늘 강좌 내용은 좀 어려웠던 것 같습니다. 다른 CPU에는 없는 개념(?)을 설명하느라 그런 것 같습니다. 더 이상 길어지기 전에 오늘은 이만 줄이려 합니다. 다음 강좌에서는 Exception부분에서 좀 더 알아야 할 몇 가지 사항을 간단히 언급하도록 하겠습니다. 

--------------------------------------------------------------------

ARM7 강좌 [6] : Exception (2)

-------------------------------------------------------------------- 

● Exception Overview 

Exception을 처음부터 완전히 이해 할 필요가 있다고는 생각하지 않습니다. 대부분의 것들이 그러하듯 우선은 이런 것이 뭐다 라고 파악만 하고 있다면, 정작 필요할 경우에 다시 자세히 살펴보아도 좋을 것입니다. 

그런 취지에서 Exception을 바라본다면, ARM 7에는 여섯 가지의 CPU 동작 모드를 지원한다는 사실과, 차후 MMU 같은 것에도 그 동작모드가 관여한다는 것. 그리고 각 모드마다 스택을 따로 설정해 준다는 것... 등. 

꼭 알아야 할 것이 있다면 IRQ나 FIQ 정도가 되겠지요. 흔히 말하는 인터럽트 관련 부분이 바로 이 부분입니다. 실제 코딩을 할 경우에는 CPU에서 정해져 있는 IRQ, FIQ관련 레지스터를 설정하고, 해당 벡터 번지를 바꾸는 정도... 그리고 초기화 시에 해당하는 스택 공간을 따로 잡아주는 정도만 신경을 쓰면 됩니다. 

원래는 각 Exception 모드마다 종료 방법이 각기 다름을 설명 해 드리려고 했는데, (구체적으로는 FIQ는 서비스 종료 시에 SUBS pc,r14_fiq,#4)라는 명령을 사용해야 합니다, 혹은 소프트웨어 인터럽트의 경우엔 MOVS pc,r14_svc 를 사용합니다.) 굳이 그런 내용까지 다룰 필요는 없을 듯 하다는 생각입니다. 필요한 경우 도큐먼트를 참조하면 자세히 나와 있습니다. 참고로 그렇게 각각 경우에 따라 복귀 방법이 다른 이유는 추측하자면 파이프라인 기능과 관련이 있는 것 같습니다. 

그러면, 다시 앞으로 돌아가서, Exception과 CPU동작모드의 연관성에 대해 마저 얘기해 보려 합니다. CPU동작 모드는 일반적으로는 Exception에 의하여 바뀌게 되고, User모드가 아니라면 프로그램에 의해 강제로 바꿀수도 있습니다. 

전에 살펴보았던 CPSR(스테이터스 레지스터)과 관련되어, CPSR의 모드비트 부분에 현재 CPU의 동작모드를 나타내는 비트들이 있는데, 해당 비트를 변경시킴으로서 프로그램에서 동작모드를 전환할 수 있습니다. OS를 포팅 할 경우 동작모드와 관련하여 메모리 보호기능 등도 구현될 수 있습니다. 

마지막으로 몇 가지 사항만 말씀드리고 오늘 강좌를 마치려 합니다. 우선, Exception간의 우선순위 문제인데, 기본적으로 ARM7은 IRQ, FIQ를 지원하지 않습니다. 해당 인터럽트가 발생하면 CPU는 CPSR의 인터럽트 금지 플래그를 설정합니다. 만약 도중에 인터럽트를 받고 싶다면 사용자가 해당 플래그를 클리어 해주어야 합니다. 또, 동시에 여러 개의 Exception 이 발생한 경우라면 그 우선순위는 다음과 같습니다. 

1) Reset (가장 높은 우선순위)

2) Data abort

3) FIQ

4) IRQ

5) Prefetch abort

6) Undefined Instruction, Software Interrupt 

Exception 부분을 설명하다 보니 강좌가 자칫 너무 딱딱해지는 감이 있어서 그냥 이쯤에서 마무리를 지으려 합니다. 

다음 강좌부터는 좀더 구체적인 ARM7의 인스트럭션에 대해 다루겠습니다. 명령어가 몇 개 되지 않기 때문에 3회 정도로 다룰 생각입니다.. 

그럼 다음 강좌에 뵙겠습니다. 

--------------------------------------------------------------------

ARM7 강좌 [7] : Instruction Set (1)

-------------------------------------------------------------------- 

● ARM7 명령어의 특징 

AMR7은 32 Bit 코어입니다. 특징적인 것은 모든 명령어가 32Bit 하나의 Word로 구성된다는 것입니다. 8086의 경우엔 명령어에 따라 1바이트 명령부터 5바이트까지 있나요? 그런데, ARM7은 모든 명령어를 한 워드로 처리합니다. 일단은 명령어의 개수가 몇 안되고, 주소는 상대주소 방식을 사용하며, 심지어는 Immediate 상수 값도 32비트 값은 그대로 넣을 수 없습니다. 

무슨 이야기인가 하면, 만약 r0에 32비트 상수를 넣고 싶다면, 몇몇 예외를 제외하고는 메모리에 미리 넣어두고 해당 메모리를 상대 주소로 참조해서 얻어 와야 한다는 뜻입니다. 

역시 장단점이 있겠지만, 장점으로는 모든 명령어를 같은 사이즈로 처리함에 따라 파이프라인 구현이 용이하다는 점이 있습니다. 그리고 명령어 해석기를 설계할 경우 예외 처리부분이 없으므로, 쉽고 고속으로 처리할 수 있겠지요. 단점은 앞에서도 간단히 언급했지만 코딩 시에 몇몇 제한이 따른다는 점입니다. 상대 주소 지정 방식은, 이때 사용하는 Offset이 24+2=26 비트이므로, 상대주소라고는 하지만 거의 불편이 없고, 다만 Immediate 오퍼랜드를 지정할 경우에 좀 번거롭다는 점이 있습니다. 그러나 8비트의 해상도를 가지는 오퍼랜드라면 한 워드 내에서 처리 가능합니다. 자세한 내용은 다시 말씀드리겠습니다. 

ARM 명령어의 다른 특징으로는 모든 명령어를 조건적으로 실행시킬 수 있다는 것입니다. 저의 경우엔 이 부분에서 대단히 감명을 받았는데요 예를 들어, 8086에서는 jz, jc 와 같은 점프 명령을 사용합니다. 그 의미는 제로 플래그가 설정되어 있으면 점프를 해라, 혹은 캐리 플래그가 설정되어 있으면 점프를 해라.. 라는 의미임을 아실 것입니다. 그냥 무조건 점프의 경우엔 jmp를 쓰지요. 

ARM의 경우엔 그런 플래그의 사용이 점프명령에 국한되지 않고, 예외 없이 모든 명령어에 사용할 수 있습니다. 

ex) BEQ jmp_1 ; Branch if Z flag set to jmp_1

MOVEQ r0,r1 ; r0 := r1 if Z flag set... 

위의 경우를 보시면 jmp에 해당하는 B명령뿐만 아니라 MOV 와 같은 데이터 전송명령에도 플래그 옵션을 사용했음을 볼 수 있습니다. 이런 기능의 장점은 잠깐만 생각해 보아도 알 수 있습니다. 예를 들어 C 연산자 중에 ? 연산자를 컴파일 한다고 생각해 봅시다.

 

ex) a=(b==c) ? d:e;

(편의상 변수를 레지스터로 바꾸어 생각하겠습니다.) 

CMPS r2,r3

MOVEQ r1,r4

MOVNE r1,r5 

아직 명령어를 안 다루었으므로 대충 의미는 추측 해 보세요. 8086이랑 대충은 비슷하니까 어려운 일은 아닐 것입니다. r2와 r3를 비교해서, 그 결과가 같다면 r1에 r4를 넣고, 그렇지 않다면 r1에 r5를 넣는 코드입니다. 만약 같은 일을 8086등에서 하려면 점프 명령이 한 개 이상은 들어가야 하겠죠. 

다시 한번 강조하지만 ARM7에서는 이와 같은 조건 옵션을 모든(!) 명령어에 사용 가능합니다. 실제로 모든 OP 코드의 상위 4비트는 이런 조건옵션을 나타내는데 사용되는 비트입니다. 각 조건에 사용되는 접미사 목록입니다. 

0 EQ Z Set equal

1 NE Z Clear not equal

2 CS C Set unsigned higher or same

3 CC C Clear unsigned lower

4 MI N Set negative

5 PL M Clear positive or zero

6 VS V Set overflow

7 VC V Clear no overflow

8 HI C Set and Z Clear unsigned higher

9 LS C Clear or Z Set unsigned lower or same

10 GE N Set and V Set or greater or equal

N Clear and V Clear

11 LT N Set and V Clear or less than

N clear and V set

12 GT Z clear and greater than

ether N set and V set or

N Clear and V clear

13 LE Z Set or less than or equal

N set and V clear or

N clear and V set

14 AL always

15 NV never 

뒷부분에 가서는 무지 복잡하죠? 저도 치면서 이걸 꼭 쳐야 할 필요가 있을까 생각을 했습니다만, 이왕 시작하는 거.. 하면서 다 쳤군요. 자세하고 정확한 내용은 다른 문서를 참조하시길 바라고 여기서는 그냥 이런 것들이 있구나 하는 정도만 알아두세요. 

다음으로 말씀드릴 명령어의 특징은 대부분의 명령어에 S라는 접미사를 사용하여 플래그 레지스터에 영향을 줄지 여부를 결정할 수 있다는 것입니다. 특히 연산명령을 수행할 때 'S'를 붙이면 해당 결과에 따라서 플래그 값들이 변하게 되고, 붙이지 않으면 영향을 미치지 않도록 할 수 있습니다. 8086에서는 연산의 결과에 따라 항상 플래그 값이 영향을 받죠? 여기서는 받지 않게 할 수도 있다는 점을 말씀드렸습니다. 자세한 내용은 명령어의 세부사항을 참조하세요. 

명령어의 특징을 말씀드리는 중인데, 앞으로도 오퍼랜드 사용 등에 대해 말씀드릴 것이 많이 남아있네요... 그런데 분량은 점점 늘어나고... 

ARM은 지금 말씀드리는 규칙들이 거의 예외 없이 적용됩니다. 명령어가 간단한 대신 옵션이 많거든요...그리고 지금 그 옵션 두 가지를 말씀드렸고요. 

오늘은 그냥 끝내기는 서운하니까 점프 명령 하나만 말씀드리고 마치겠습니다. 

● Branch and Branch with link (B, BL) 

+------------------------------------------------------------------+

| Cond | 101 | L | |

+------------------------------------------------------------------+

 

Cond 부분은 위에서 말씀드린 조건 옵션입니다. 101은 B 명령 코드입니다. 

L 부분은 1일 경우 BL 이 되는 것이고 0이면 B 명령입니다. B는 JMP라고 생각하시면 되고, BL은 CALL로 생각하시면 됩니다. 다만 BL의 경우엔 PC값을 스택에 넣는 것이 아니라 r14(lr)에 넣는다는 것이 차이가 있습니다. 나머지 하위 24비트가 Offset으로 사용되는데, ARM7은 모든 명령어들이 Word단위이므로 총 +/- 32메가 바이트 영역을 커버합니다. 

좀 어수선한 느낌입니다만. 오늘은 이만.

--------------------------------------------------------------------

ARM7 강좌 [8] : Instruction Set (2)

-------------------------------------------------------------------- 

이번 강좌에서는 데이터 프로세싱 명령에 대해 다루려 합니다. 해당 명령은 ARM7의 50%정도에 해당하는 명령입니다. 실제 개수는 16개이고, 연산명령과 비교명령, 비트 연산명령, 데이터 전송 명령 등이 포함됩니다. 

● Data Processing Instruction 

데이터 전송명령의 형식은 다음과 같습니다. 

+--------------------------------------------------------------------+

| Cond | 00 | I | OpCode | S | Rn | Rd | Operland 2 |

+--------------------------------------------------------------------+

4 2 1 4 1 4 4 12 

전에 언급했듯이 모든 인스트럭션의 크기는 32 Bit 입니다. 위의 그림에서 숫자는 해당 필드의 비트 수를 의미합니다. 

1) <Cond> [31:28] 4 Bit 

해당 명령의 조건 실행 플래그입니다. 지난 강좌에서 언급했었던 부분인데, 모든 명령어에 포함되므로 데이터 프로세싱 명령에도 포함됩니다.

혹시나 해서 다시 말씀드리는데, 해당 플래그를 통해 명령을 현재 플래그 레지스터(CPSR)의 상태에 따라 실행 여부를 결정하는데 사용되는 플래그입니다. 

2) <I> [25] 1 Bit 

Operland 2로 지정되어 있는 부분이 Immediate Operand 인지 아닌지 여부를 나타내는 비트입니다. Immediate Operand라 함은, 예를 들어 8086에서 MOV AX,01234h 라고 했을 경우, 1234h를 가리키는 말입니다. 자세한 내용은 Operland2를 설명하면서 자세히 다루겠습니다. 

3) <OpCode> [24:21] 4 Bit 

데이터 프로세싱 명령 중 어떤 명령인지를 나타내는 필드입니다. 해당 필드와 명령어는 다음과 같습니다. 

<OpCode> Instruction Description

-----------------------------------------------------

0000 AND Rd:=Op1 AND Op2

0001 EOR Rd:=Op1 XOR Op2

0010 SUB Rd:=Op1 - Op2

0011 RSB Rd:=Op2 - Op1

0100 ADD Rd:=Op1 + Op2

0101 ADC Rd:=Op1 + Op2 + C

0110 SBC Rd:=Op1 - Op2 + C - 1

0111 RSC Rd:=Op2 - Op1 + C - 1

1000 TST Op1 AND Op2 -> CPSR

1001 TEQ Op1 XOR Op2 -> CPSR

1010 CMP Op1 - Op2 -> CPSR

1011 CMN Op1 + Op2 -> CPSR

1100 ORR Rd:=Op1 OR Op2

1101 MOV Rd:=Op2

1110 BIC Rd:=Op1 AND (NOT Op2)

1111 MVN Rd:=NOT Op2 

명령어들의 간단한 설명만으로도 어느 정도는 이해할 수 있으리라 생각합니다. 각각의 명령에 대해서는 자세히 다루지 않도록 하겠습니다. 나중에 예제를 보시고 이해할 정도라면 족하다고 생각합니다. 

4) <S> [20] 1 Bit 

S 비트가 1인 경우는 데이터 프로세싱 명령의 결과가 CPSR(플래그레지스터)에 영향을 미칩니다. 즉, 0인 경우에는 CPSR은 변하지 않습니다. 

5) <Rn> [19:16] 4 Bit 

ARM 데이터 프로세싱 명령은 그 결과와 첫 번째 오퍼랜드는 항상 레지스터로 지정해야 합니다. Rn은 첫 번째 오퍼랜드를 가리키는 것으로 위에서 Op1으로 표기한 것에 해당합니다. ARM에서 한번에 볼 수 있는 범용 레지스터는 sp, lr, pc 등을 포함해서 r0에서 r15까지라고 말씀 드렸습니다. 즉, 4Bit를 통해 레지스터를 나타내게 됩니다. 해당 필드는 명령에 따라 사용되지 않기도 합니다. MOV나 MVN등이 이에 해당합니다. 

6) <Rd> [15:12] 4 Bit 

오퍼레이션의 결과가 저장될 레지스터를 의미합니다. 역시 레지스터를 가리키므로 4비트를 사용하고 모든 명령에서 디폴트로 사용되는 필드입니다. 말씀드렸듯이 ARM의 데이터 프로세싱 명령의 결과는 항상 레지스터로 들어갑니다. 

7) Operand 2 [11:0] 12 Bit 

드디어 오늘의 가장 험난한 산인 Operand 2 필드까지 왔군요. 설명 드려야 할 부분이 좀 많거든요. 어떻게 설명을 드려야 할지, 막막하긴 하지만, 용기를 가지고 차근차근 설명해 보도록 하겠습니다. 

● 데이터 프로세싱 명령의 Operand 2 필드 

오퍼랜드 2의 의미 자체는 별게 아닙니다. 아마도 다들 아시겠지만, ALU에 연산명령을 내릴 경우 한 쪽 입력은 오퍼랜드 1, 다른 쪽은 오퍼랜드 2 그리고, 결과가 나오고... 앞서 설명한 내용에 의거하면 다음과 같이 표현 할 수 있겠죠? 

Op1(Rn) Operand 2

-------------- ---------

| | / /

| | / /

| | / /

| /

| ALU /

| /

| /

----------------

Rd 

예를 들어 AND r1,r2,r3라는 명령에서 Rd = r1 이고 Rn=r2 입니다. 그리고 r3가 Operand2에 해당하는 부분이 되겠죠. 의미는 r1=r2 & r3 라는 의미입니다. 

여기서 설명하고자 하는 ARM7의 데이터 프로세싱 명령의 Operand2의 타입은 두 가지 종류가 있습니다. <I> 필드의 내용에 따라 구분이 되는데, Immediate Operand 혹은 레지스터 Operand입니다. 

1) Register Operand 

<I> 필드가 0일 경우엔 Op2가 레지스터임을 의미합니다. 레지스터를 나타내기 위해서는 아시다시피 4비트만 있으면 되죠? 그런데 Op2를 위한 비트 수는 총 12 비트입니다. 남는군요. 

구체적으로 레지스터 오퍼랜드2의 형식을 보여드리겠습니다. 

+----------------------------------------------+

| Shift [11:4] | Rm [3:0] |

+----------------------------------------------+ 

위의 그림을 보시면 Rm이라고 레지스터를 지정하는 4비트가 포함되어 있습니다. 그러면 Shift 부분은 뭘까요? 

강좌의 앞부분에서 언급했나요? 무슨 Shift가 ALU의 한쪽에 달려 있다고. 결론적으로는 레지스터를 ALU로 그냥 집어넣는 것이 아니라 Shifter를 통해서 넣어주도록 되어 있습니다. 따라서, Shift라는 필드는 (8비트죠?) 그런 역할을 해주는 것이겠군요. 그럼 왜 8비트일까요? 여기서 다시 한번 Shift를 구체적으로 살펴보겠습니다. 

우선 그전에 Shift 필드에는 Shift 회수를 지정하는 방법이 두 가지가 있는데, 첫 째는 Shift 필드 안에 그 회수를 포함시키는 방법이고, 두 번 째는 Shift 회수가 들어있는 레지스터를 Shift 필드 안에서 지정하는 방법입니다. 경우의 수가 자꾸 늘어가는군요. 해당 타입 두 가지는 Shift 필드의 최하위 비트인 4번 비트에 따라 결정됩니다. 다시 그림을 그려보겠습니다. 

+-------------------+ +-------------------+

| count |type | 0 | | Rs | 0 |type | 1 |

+-------------------+ +-------------------+

5 2 1 4 1 2 1 

최하위 비트의 값이 0이냐 1이냐에 따라 두 가지로 구분이 되었습니다. 왼쪽의 경우가 직접 Shift 회수를 지정하는 방법으로, count 부분이 총 5 비트로서 그 값을 의미합니다. ARM7의 레지스터는 32비트이므로 5비트는 있어야 Shift 회수를 표현할 수 있겠지요. 

그러면 Type은 뭘까요? 2비트인 Type의 의미는 다음과 같습니다. 

00 : logical left (LSL)

01 : logical right (LSR)

10 : arithmetic right (ASR)

11 : rotate right (ROR) 

그렇군요. 단순히 Shift라고 말씀드렸지만 실제로는 좌, 우, 부호의 여부와 Rotate까지 형식을 지정할 수가 있습니다. (무지 복잡해지는 듯한 느낌입니다.^^) 

오른쪽에 레지스터를 지정하는 방식은, 1비트가 남아서 0으로 처리한 것만 제외하고는 별 문제가 없겠죠? 

원래는 여기서 쉬프트 방식 4가지에 대한 설명이 뒤를 이어야 하겠지만. 이러다 보면 한도 끝도 없을 것 같네요. 

2) Immediate Operand 

강좌를 정리하려다 생각하니 Immediate Operand를 설명 안했군요. 여기까지는 해야할 것 같아서. 

레지스터 오퍼랜드의 경우 총 12 비트 중에서 4비트는 레지스터를 지정하고, 나머지 8비트는 해당 레지스터 값을 Shift하는 방법을 지정하도록 되어 있었습니다. 

Immediate 오퍼랜드는 몇 가지 문제가 있습니다. 32비트 레지스터에 값을 써넣고 싶은데 공간은 12비트 밖에는 없다는 것이지요. 8086등에서는 그냥 여러 바이트로 명령을 처리했었으니 그런 문제가 없었지만, ARM에서는 이것 때문에 모든 명령이 32비트라는 규칙을 깰 수는 없었겠지요. 다음은 구체적인 형태입니다. 

+----------------------------------------------------------------+

| Rotate [11:8] | Imm [7:0] |

+----------------------------------------------------------------+ 

이전과 비슷한 모양이군요. 이번엔 Rotate 필드(4비트)가 있고, 또 8비트의 Imm필드가 있습니다. Imm은 말 그대로 Immediate Value를 넣는 공간입니다. 이 공간이 8비트라서, 결국 ARM7에서 어떤 상수 값을 레지스터로 전송하거나 할 경우 8비트까지는 아무런 문제가 없이 넣을 수 있습니다. 그러면 Rotate 필드의 하는 역할은 무엇일까요? 

좀 복잡한데요... ARM7문서에는 다음과 같이 써 있습니다. 

"Immediate Operand rotate 필드는 부호 없는 4비트 정수로서 8비트 Immediate 값에 Shift 오퍼레이션을 할 수 있도록 사용되는 값이다. rotate필드 *2 값만큼 8Bit Immediate Value 값을 Right Rotate 시킨다. 결국 8비트 값을 32비트로 확장시키는 역할을 하며 이를 통해 자주 사용되는 많은 상수들을 사용 가능하도록 한다." 

8비트의 값이 ALU로 들어가기 전에 Shifter로 들어가면, 이미 32비트로 확장이 됩니다. 이후 그 값을 그냥 쓰면 8비트 영역만 표현할 수 있지만 Rotate필드 값을 * 2 한만큼 Rotate Right 시킨다 그랬으니, 어떤 변화가 생기겠죠? 

오늘 분량이 좀 많았네요... 차근차근... 담에 또 말씀드리죠.. 뭐. 몇 가지 예를 들어 보이면서. 오늘 강좌를 정리할까 합니다. 

ADDEQ r2,r4,r5 : 제로 플래그가 설정되어 있다면 r2=r4+r5

SUBS r4,r5,r7,LSR r2 : r4=r5-(r7>>r2) & effect CPSR

--------------------------------------------------------------------

ARM7 강좌 [9] : Instruction Set (3)

-------------------------------------------------------------------- 

지난번 강좌를 쓰고 나서 이것저것 생각을 해봤는데, 내용이 좀 어렵지 않았나 싶네요. 명령 코드를 가지고 접근하는 방식은 디지털 쪽의 기초 지식과 어셈블리에 대한 보편적인 지식을 갖고 접근하는 방법이어서, 혹 그런 기본지식이 없으신 분들에게는 딱딱하고 어렵게 느껴졌을지도 모른다는 생각을 혼자(?) 했습니다. 

강좌에 대한 피드백이 없어서. 그냥 나름대로 생각하고 쓰고 있는데요. 이럴 경우엔 좀 어렵던지. 방향이 틀린 것 같다 라는 식의 의견을 들을 수 있다면 강좌의 방향을 정하는데 도움이 될 것 같다는 생각을 했습니다. 

그간 강좌를 보시고 ARM에 관한 몇 가지 질문들을 주신 분들이 계신데요. 될 수 있으면 답변을 해드리려고 노력중이고, 또 그렇게 함으로써 보람도 느낄 수 있는 것 같습니다. 

제 email 주소는 zartoven@secsm.org입니다. 강좌에 관련된 의견이나 질문이 있으신 분들은 해당 주소로 질문을 주세요. 제가 어떤 사람인지에 대해서도 말씀을 못 드렸는데, 모 전자회사에서 RTOS 업무를 담당하고 있습니다. 아직까지는 주로 pSOS 관련업무를 하고 있고요. 처음에는 pSOS관련 강좌를 운영해 볼까 생각도 해 봤지만, 과연 얼마나 많은 분들이 pSOS를 사용 하실지 의문이 들어서 포기했습니다. 관련해서 제가 알려드릴 부분이 있다면 아는 한도 내에서 최대한 노력해 보겠습니다. 

오늘은 안하던 사설을 길게 늘어놓았군요. 아무래도 지난 강좌에 다루었던 내용이 좀 부실했던 것 같아서, 오늘은 좀 다른 접근 방식으로 명령에 대한 내용을 다루려고 합니다. 자, 그럼 시작하겠습니다. 

오늘 다룰 내용은 주로 "The ARM RISC Chip. A Programmer's Guide"라는 책의 내용을 위주로 하겠습니다. 

1) MOV{cond}{S} Rd,Op2

 

Assembler에서 가장 기본적으로 사용되는 데이터 전송명령입니다. 해당 명령은 8086에서의 MOV, Z80이나 196에서의 LD 명령과 같은 역할을 합니다. 다만 차이라면 ARM7에서의 MOV는 그 Target이 되는 부분이 항상 레지스터라는 점입니다. 

예를 들어 8086에서는 MOV AX,[BX] 의 형태와 MOV AX, BX와 같은 명령의 형태를 같은 MOV명령을 통해 해결합니다만, ARM에서의 MOV는 후자의 것만을 의미합니다. 즉, 레지스터나 Immediate 값 같은 것들을 레지스터에 넣는 명령입니다. 

전자의 경우와 같이 외부 메모리를 액세스하는 명령은 따로 있고, 분류 자체를 다르게 합니다. 

제목에 써놓은 것은 MOV명령의 형식인데요. {cond}부분은 지난번 말씀드렸던 실행 조건을 제한하는 옵션입니다. ARM7에서는 모든 명령어에 해당 옵션을 적용시킬 수 있다고 말씀드렸습니다. 구체적으로는 EQ, NE, 등등의 2자 짜리 접미사 형태이고, 해당 조건에 맞도록 플래그 레지스터가 설정이 되어 있어야 MOV명령이 수행됩니다. 

{S}옵션은 해당 명령의 결과가 플래그 레지스터에 영향을 미칠지 여부를 결정하는 옵션입니다. ARM에서의 MOV는 Data Processing 명령으로 분류되어 Rd에 들어가는 값에 따라 플래그 레지스터가 영향을 받을 수 있습니다. 

하지만, 특별히 사용되는 경우가 있습니다. 좀 어려울지 모르겠지만, Target 레지스터가 PC인 경우 S옵션을 사용하면, Exception모드에서 보통 상태로 빠져 나오는 역할을 하게됩니다. 지금 다루기는 좀 그렇고요. 강좌의 마지막쯤 해서 한꺼번에 다시 다루겠습니다. 지금은 그러려니 하시길 바랍니다. 

Rd는 Target이 되는 레지스터입니다. MOV명령의 Target은 항상 레지스터이어야 합니다. 물론 MOV 뿐만이 아니라 Data Processing 명령으로 분류된 모든 명령들(지난 강좌에서 언급했던)이 다 그렇습니다. 

Op2는 MOV명령에 의해 Rd로 들어갈 내용을 가리키는 오퍼랜드입니다. 지난 강좌에서 이것저것 복잡하게 말씀드렸었는데요, Op2 부분에는 단순히 레지스터가 들어갈 수도 있고, 어떤 immediate값이 들어갈 수도 있고, 또 Shift 오퍼레이션을 가한 레지스터 내용이 들어갈 수도 있습니다. 예제를 통해 확인하시길 바랍니다. 

Ex1) MOV r0,r1

: 단순히 r0:=r1을 하는 명령입니다. 

Ex2) MOV r0,#0

: r0에 상수 0을 넣는 명령입니다. ARM에서는 196에서와 같이 상수에는 #을 붙여서 사용합니다. 또 진법 표현은 C에서의 방법을 사용합니다. 즉 MOV r0,#0x30 이런 식으로 사용할 수도 있습니다. 혹은 &를 붙여서 16진수를 나타낼 수도 있습니다. 

Ex3) MOV r0,#0xfc000003

: r0에 상수 값 0xfc000003 을 넣는 명령입니다. 지난 강좌에서 말씀드렸지만 해당 값은 8비트 값 0xFF를 32비트로 확장하고 오른쪽으로 두 번 Rotate 시킨 값입니다. 그래서 에러가 나지 않는 것이지요. 

Ex4) MOV r0,r1,LSL #1

: 이 명령은 r0:= r1 <<1 을 수행하는 명령입니다. LSL은 logical Shift Left를 의미하는 키워드이고, Op2 부분에 위와 같은 형식으로 올 수 있습니다. 

Ex5) MOV r0,r1,LSR r2

: 이 명령은 r0:=r1 >> r2 에 해당하는 명령이고, LSR은 Logical Shift Right를 의미합니다. 

Ex6) MOV r0,r0,ASR #24

: 이 명령은 r0:=r0 >> 24 를 의미합니다. ASR은 Arithmetic Shift Right를 의미하며 LSR과의 차이는 최 상위 비트가 1인 경우 새로 계속 해당 비트 값을 유지시킨다는 것입니다. 

Ex7) MOVS r0,r1,LSR #1 : C(flag) := r1[0]

MOVCC r0, #10 : if C=0 then r0:=10

MOVCS r0, #11 : if C=1 then r0:=11 

Ex8) MOVS r0,r4 : if r4=0 then r0=0

MOVNE r0,#1 : else r0=1

 

첫 번째 명령에서 r4값을 r0로 넣을 때 {S}옵션에 따라서 플래그 레지스터 값이 변화합니다. 다음 명령에서 NE 조건을 사용했기 때문에, 참고로 NE는 Not Equal, Z플래그가 0일 경우입니다., r4값이 0이었다면 NE는 False가 되어 두 번째 명령을 수행하지 않습니다. 결과적으로는 r0에 0이 들어간 셈이지요. 만약 r4가 0이 아니었다면 두 번째 명령이 수행되어서 r0에는 1이 들어갑니다. 

오늘 강좌는 이것으로 정리하려 합니다. 다음에 뵙겠습니다. 

--------------------------------------------------------------------

ARM7 강좌 [10] : Instruction Set(4)

-------------------------------------------------------------------- 

오늘 강좌에서는 Data Processing Instruction에 대해서 계속 이어나가도록 하겠습니다. 되도록이면 오늘 이 부분을 다 커버하고 싶습니다만 해봐야겠지요. 지난 강좌에서 다루었던 내용 중 오퍼랜드쪽 부분은 계속 겹치는 내용이므로 의문이 생기시면 이전 강좌로 돌아가서 확인해 보시길 바랍니다. 

1) MVN{cond}{S} Rd,Op2

 

해당 명령은 Rd:=NOT Operand2 의 의미를 가진 명령입니다. 기존 어셈블러에서는 볼 수 없었던 낯선 명령이네요. 기능은 써 있듯이 MOV처럼 값을 넣기는 넣는데 NOT를 해서 넣는 명령입니다. 이런 명령이 왜 있는지에 대해서는 확실히 모르긴 몰라도, 아마도 ARM7에서 8비트Resolution Immediate 오퍼랜드만 다룰 수 있기 때문인 듯 합니다. 해당 명령으로 어느 정도 기능을 확장한다고 할까요? 

바로 예제로 들어가겠습니다. 

Ex1) MVN r0,#0 ; r0 := -1

: 사실 MVN의 용도로 위의 경우 밖에는 사용된걸 보지 못했습니다. 만약 MOV r0,#0xFFFFFFFF 이렇게 하면 에러가 발생합니다. 이것은 매번 설명 드리지만 ARM7의 모든 명령이 32비트 한 워드이고 Immediate 오퍼랜드처리를 8비트 값을 Rotate시키는 방식으로 사용하기 때문인데, MVN을 사용함으로서 해당 값을 넣을 수 있습니다. 

다른 부분은 MOV와 동일하므로 그다지 이슈가 될 것이 없을 듯 하군요. 

2) ADD{cond}{S} Rd, Rn, Op2

ADC{cond}{S} Rd, Rn, Op2 

더하기 명령입니다. 8086과 큰 차이는 오퍼랜드를 3개 지정한다는 것입니다. Rd는 결과가 저장될 레지스터로, Data Processing 명령 모두는 그 결과가 레지스터(Rd)로 들어가야만 합니다. 첫 번째 Rd가 결과가 저장 될 레지스터이고, 나머지 두개가 서로 더해질 오퍼랜드입니다. 두개의 오퍼랜드 중 하나는 또 항상 레지스터여야만 합니다. Op2는 거듭 말씀드리지만 Shifted Register 혹은 Rotated Immediate Value 중 하나입니다. 

ADD와 ADC는 널리 사용되는 대로 더하기, 더하는데 캐리플래그랑 같이 더하기 정도입니다. 

Ex1) ADD r0,r0,#1 ; r0:=r0+1 

Ex2) ADD r0,r1,r2 ; r0:=r1+r2 

Ex3) ADDS r0,r1,r1, LSL #2 ; r0:=r1*5

: 위의 명령을 보면 ARM 명령어의 강력함을 알 수 있죠? 위에서 Rd는 r0, Rn은 r1, Op2 부분이 r1,LSL #2 입니다. r1값 더하기 r1을 두 번 쉬프트 한 값, 즉 r1*4값이므로 결과적으로는 *5가 되겠지요. S 옵션이 사용되었으므로 플래그 레지스터에 영향을 미칩니다. 그러면? 위의 1번 2번 예제는 수행하더라도 플래그 레지스터는 영향을 안받는다는 의미지요. 사용하기에 따라서 강력한 역할을 할 수 있을 듯 합니다.

Ex4) in C

 

int addints(int a,int b)

{

int c;

c=a+b;

return c;

} 

in ARM7 Assembly 

ADD r0,r0,r1 ; r0:=r0+r1

MOV pc,lr ; return 

사실 인수 전달에 관련된 코드가 더 들어가지만, 코어부분은 대강 위와 같습니다. 

3) SUB{cond}{S} Rd, Rn, Op2

SBC{cond}{S} Rd, Rn, Op2

RSB{cond}{S} Rd, Rn, Op2

RSC{cond}{S} Rd, Rn, Op2 

위의 네 명령은 빼기 명령입니다. SUB와 SBC는 그런데로 알만 한데, R로 시작하는 두개가 더 있네요. R은 감수(?) 와 피감수를 바꾸는 역할을 합니다. 즉, SUB 명령이 Rd=Rn-Op2 라면 RSC는 Rd=Op2-Rn 입니다. 이런 명령이 왜 필요할 까요? 글쎄요. 우선 Op2가 Rn에 비해서 상대적으로 유연성이 좀더 많아서일까요? 어떻든... 개념은 어렵지 않습니다. 

SBC와 RSC는 캐리플래그가 관련되어 있는 명령입니다. 그런데 명령 해석을 보면 다음과 같이 나와 있네요. 

SBC Rd, Rn, Op2 = Rd=Rn-Op2+Carry-1 

아마도 8086에서의 Carry와는 좀 다른 모양입니다. 뺄셈을 했을 때 자리 내림이 발생을 하면 Carry가 클리어 되는 구조이군요. 아마도 2의 보수 연산을 하기 때문인 듯 합니다. 즉 1을 빼고 싶은 경우 1의 2의 보수를 취해 더해주죠. 해당 값은 FFFFFFFF 이고, 대상이 0이 아니라면 더하기를 통해 Carry가 발생하겠군요. 근데 원래 하고자 했던 것이 뺄셈이었으니까... 피감수가 0인 경우에 Carry가 발생하지 않았고, 나머지의 경우에는 모두 Carry가 발생합니다. 기계적 사고방식에는 그게 맞나 봅니다. 

어떻든 중요한 것은 뺄셈 연산을 통해 borrow가 발생한다면 Carry는 0이고 발생하지 않는다면 Carry는 1이 되는 것이죠. 따라서 SBC와 같은 명령에서는 Carry를 오히려 더해주고 다시 1을 빼 줌으로써 8086 등에서 사용되는 것과 동일한 효과를 얻게 되는군요. 

Ex) 64Bit 뺄셈 

SUBS r4,r0,r2

SBC r5,r1,r3 

: 이렇게 하면 [r5:r4]=[r1:r0]-[r3:r2]가 되겠군요. {S}옵션에 주의하시길 바랍니다. 

4) AND{cond}{S} Rd, Rn, Op2

EOR{cond}{S} Rd, Rn, Op2

ORR{cond}{S} Rd, Rn, Op2 

: 이번에는 Bit연산에 관련된 명령어들입니다. AND는 그대로 AND, EOR은 XOR쯤으로, ORR은 OR로 생각하시면 됩니다. B명령을 제외하고는 웬만한 명령어는 모두 3글자인데, 그래서 ORR로 표기하는 듯합니다. 역시 오퍼랜드는 같은 의미입니다. 

Ex1) AND r0,r0,#0xFF

: r0의 8비트만 남기는 명령입니다. 

Ex2) ANDCSS r0,r1,r2,ASR r3

: 만약 캐리 플래그가 설정되어 있다면...(CS) r1 AND (r2>>r3) 정도를 하는데, 해당 명령의 결과가 플래그 레지스터에 영향을 미칩니다. ASR과 LSR의 차이는 ASR의 경우 최상위 비트가 1이라면 해당 비트는 계속 1로 유지를 하는 것이죠. LSR이라면 새로 들어오는 비트는 항상 0입니다. 이것은 음수를 2의 보수로 사용하는 시스템에서 필요한 방법입니다. 참 결과는 r0에 넣는군요. 

Ex3) EORS r0,r0,r0

: 해당 명령을 수행하면 r0는 0이 될 것이고, N 플래그도 0이 되고 Z플래그는 1이 됩니다. 

Ex4) MOV r0,#0xFF

ORR r0,r0,#0xFF00

: r0에 0xFFFF를 넣는 방법입니다. 

5) BIC{cond}{S} Rd, Rn, Op2

 

: Rd := Rn AND (NOT Op2) 로 설명이 되어 있는 명령입니다. 별별 명령이 다 있다는 생각이 드는군요. AND하기 전에 NOT을 한번 해서 처리하는 명령입니다. 의미는 비트를 클리어 하는 것이고, Op2에 지정한 비트가 0으로 지워지는 결과가 나타납니다. 

Ex) BIC r0,r1,#3

: r0 := r1 and 0xFFFFFFFC 의 의미입니다. 

6) CMP{cond} Rn, Op2

CMN{cond} Rn, Op2 

: 비교 명령입니다. MOV, MVN처럼 인수가 2개인데요, 이번에는 Rd가 빠졌습니다. CMP는 흔히 보던 그 CMP입니다. Rn에서 Op2를 빼 보는 명령이죠. 아시다시피 레지스터 값에는 영향을 미치지 않고 플래그에만 영향을 미칩니다. 그러고 보니 {S}옵션도 없네요. 이 명령들은 디폴트로 {S}를 준 효과가 나타납니다. (일설에는 어셈블러가 그렇게 해 준다고 하던데, 기계어 코드로는 S옵션을 꺼놓은 CMP도 가능하지 않을까 싶네요.) 

CMN은 좀 새롭군요. 이 명령은 CMP가 빼기를 하는데 반해, 두 오퍼랜드를 더해 보는 명령입니다. 역시 생소한 개념인데요. 그럴 필요도 있을까요? 어떻든 CMP가 빼기를 해보는 거라면 CMN은 더하기를 해 보는 명령어랍니다. 

Ex1) CMP r2,#23

MOVEQ r2,#45

: 만약 r2가 23이라면 45를 넣어라. 

Ex2) CMP r0,#0

CMPEQ r1,#0

CMPEQ r2,#0

CMPEQ r3,#0 

MOVEQ r4,#12 

: r0부터 r3까지 모두 0이라면 r4에 12를 넣는 명령입니다. 참 재미있는 구조라고 생각됩니다. 

Ex3) CMN r1,r2

MOVEQ r0,#0

MVNNE r0,#1 

: r0 = ((r1+r2)==0) ? 0:-1; 

위에서 조건부 명령의 강력함을 느낄 수 있나요? 아니라면 다음을 한번 보시죠. 

in C

while (a!=b) {

if (a>b) a-=b;

else b-=a;

} 

in ASM with no conditional Instruction 

gcd CMP a,b

JZ end

JNZ less_than 

SUB a,a,b

JMP gcd 

less_than

 

SUB b,b,a

JMP gcd

 

end

... 

※ ARM도 아니고 8086도 아니고, 명령어가 이상하게 되었네요. 대충 의미만 파악하시길. 

in ARM7 

gcd CMP a,b

SUBGT a,a,b

SUBLT b,b,a

BNE gcd 

직접 보시고, 소감을. 

7) TEQ{cond} Rn, Op2

TST{cond} Rn, Op2 

: CMP와 거의 비슷한 구조를 갖는 명령입니다. 기능도 거의 유사합니다. CMP가 -, CMN이 + 라면, TEQ는 XOR, TST는 AND 연산을 통해 같은 일을 합니다. 하지만 특징이라면 Logical 연산이 일어날 경우 플래그 중에서 V 플래그(오버플로우 플래그)는 영향을 받지 않습니다. 이걸 잘 응용하면 다음과 같은 처리가 가능합니다. 

Ex1) CMP r0,#31 ; test r0<=31 ?

TEQ r0,#127 ; test r0==127 ?

MOVLS r0,#'.' ; if either then r0='.' 

Ex2) TST r1,#3 ; is r1 word aligned?

MOVEQ r0,#1 ; r0:=1 if so

MOVNE r0,#0 ; else r0:=0 

지난번에 다루었던 MOV 명령까지를 합치면 총 16개의 명령을 설명 드렸습니다. 이로서 가장 비중이 큰(분량이 많은?) Data Processing 명령의 설명을 마쳤군요. 

참고로 다루고 있는, 혹은 앞으로 다룰 명령의 종류는 다음과 같습니다. 

(1) Branch 명령

(2) Data Processing 명령

(3) PSR Transfer 명령

(4) Multiply 명령

(5) Single Data Transfer 명령

(6) Block Data Transfer 명령

(7) Swap 명령

(8) SWI 명령 

이밖에도 코프로세서 관련 명령이 있기는 하지만, 그 정도까지는 좀 무리인 듯 싶습니다.

위에 써 놓은 것을 보니 무척 많아 보이는데요, 막상 살펴보면 분류 당 1개~2개정도의 명령밖에는 없습니다. 

자, 그럼 오늘 강좌는 여기에서 줄이겠습니다. 

--------------------------------------------------------------------

ARM7 강좌 [11] : Instruction Set (5)

-------------------------------------------------------------------- 

● PSR Transfer 명령 

기억하실지 모르겠지만 PSR이란 Program Status Register로서 플래그 비트와 Control 비트들로 구성된 레지스터입니다. 해당 레지스터의 값을 일반 레지스터로 옮기거나 반대의 일을 하는 명령이 PSR Transfer 명령입니다. 

PSR은 32비트 레지스터입니다. CPSR과 SPSR 5개를 합쳐서 총 6개가 있습니다. 여기서 SPSR 은 Exception모드에 따라 여분으로 존재하는 PSR을 말합니다. 실행 모드에 따라서 User가 접근할 수 있는 PSR은 한 개, 혹은 2개로 제한됩니다. 예를 들어 User모드(보통모드)에서는 CPSR에만 접근 할 수 있고, IRQ모드에서는 CPSR과 SPSR_irq 에 접근할 수 있습니다. 

여기서 잠깐 지난 강좌의 내용을 떠올려 보죠. CPSR이라고 함은 일반적인 플래그 레지스터라고 생각하시면 됩니다. 그런데, ARM7에서는 6개의 동작 모드가 있고, Exception(IRQ, FIQ, ABORT 등)에 의해 동작 모드가 전환됩니다. 각 동작모드에 따라서 몇몇 레지스터들이 교체되고, 이 덕분에 각 모드별로 스택을 따로 관리할 수 있는 기능이 제공됩니다. Exception Call에 따르는 수행번지 저장도 스택을 통해 하지 않고 r14(lr)을 통해 수행합니다. 플래그 레지스터 역시 Exception에 따라 스택에 저장하지 않아도 되도록 하는 기능을 제공해 주는데, 이런 역할을 하는 것이 SPSR 입니다. SPSR은 총 5개가 있습니다. User모드를 제외하고 나머지 5개의 동작 모드마다 하나씩 존재하는데요. 

예를 들어 IRQ가 걸렸다고 하면, 우선 CPU동작모드 IRQ 모드로 바뀌고 이에 따라 r13_irq, r14_irq 로 레지스터 2개가 대치됩니다. 다음 r14_irq에 기존의 pc(r15)값을 저장합니다. 다음 지정된 벡터로 이동하겠죠. 이때 플래그레지스터, 즉 CPSR의 값도 보전할 필요가 있죠. 그래서 하는 일이 CPSR값을 pc와 비슷한 메커니즘으로 SPSR_irq로 넣어두는 것입니다. r13_irq와는 좀 차이가 있죠. r13과 같은 범용 레지스터들은 각 수행모드 별로 그 값이 계속 유지가 됩니다만, SPSR이나 r14는 Exception시에 기존 레지스터 값의 보관을 위해 사용되는 버퍼 역할을 합니다. 

어떻든 간에... 오늘 설명할 명령어는 두가지입니다. 사실 그다지 쓰일 일은 없고, CPU동작모드를 임의로 설정하거나, 현재 동작모드를 확인하기 위해서 사용되는 경우가 있습니다. 

1) MRS{cond} Rd,<psr> : Transfer PSR contents to a register

MSR{cond} <psr>,Rm : Transfer register contents to PSR

MSR{cond} <psrf>,Rm : Transfer register contents to PSR

flag bits only 

MRS명령과 MSR명령의 의미가 헛갈릴 수 도 있는데요, M을 Move로, R을 레지스터로, S를 PSF로 파악하면, MRS의 경우엔 Move Reg,PSR이 정도로 생각할 수 있습니다. 즉, 레지스터에 PSR값을 넣는 명령이죠. MSR의 경우엔 반대로 생각 할 수 있습니다. 

참고로 CPSR의 컨트롤비트를 바꾸면 CPU의 동작모드를 임의로 설정할 수 있습니다만, USER모드에서는 해당 기능을 사용할 수 없습니다. 

Ex1) MSR CPSR_all,r0 

: 해당 명령이 USER모드에서 수행되었다면 Control Bit들은 영향을 받지 않고 Flag Bits[31:28]만 영향을 받습니다. 

만약 USER모드를 제외한 다른 모드에서 수행되었다면 CPSR의 모든 비트들이 변화하게 됩니다. 

Ex2) MSR CPSR_flg,r0 

: CPSR에 접미사 _flg를 붙여주어서 모드에 상관없이 Flag 비트들만 영향을 받도록 합니다. 

Ex3) MRS r0,CPSR 

: CPU동작모드에 상관없이 CPSR의 모든 비트들을 r0로 복사합니다. 

Ex4) MSR SPSR_all,r0 

: r0의 값을 SPSR의 모든 비트에 반영합니다. 해당 명령은 USER모드에서는 수행 불가능합니다. USER모드에서는 접근 가능한 SPSR 자체가 없기 때문입니다. 

Ex5) MSR SPSR_flg,#0xC0000000 

: SPSR의 N, Z플래그를 세트하고 C, V플래그를 클리어 하는 명령입니다. 위와 같이 MSR명령을 Flag비트에 제한을 두어 사용할 경우엔 Immediate 값을 사용할 수 있다고 합니다. 

오늘 강좌는 간단하게 마치려고 합니다. 오랜만의 강좌라 기대를 많이 하신 분들이 혹(?) 계시다면 죄송하고요. 요즘 들어서 주변상황이 좀 어수선해서 조만간 다시 올리도록 하겠습니다. 

--------------------------------------------------------------------

ARM7 강좌 [12] : Instruction Set (6)

-------------------------------------------------------------------- 

정말 오랜만에 강좌를 쓰는군요. 생활에 여유가 좀 있어서 강좌를 시작했는데 예상보다 강좌가 길어지고 더불어 점점 다른 일들이 생겨서 요즘에는 통 시간을 낼 수가 없었습니다. 혹, 강좌를 기다리신 분이 계시다면 죄송하다는 말씀을 드려야겠군요. 아무래도 강좌를 빨리 정리해야겠다는 생각이 듭니다. 자꾸 늘어지니까, 저도 부담스럽고, 읽으시는 분들에게도 폐를 끼치는 것 같아서. 

남은 부분에 대해서는 최대한 핵심만 얘기하려 합니다. 

사실 명령어 하나하나에 대해 하나하나 설명한다는 것이... 뭐 그다지 의미 있는 일 같지도 않고, 이쯤까지 왔다면 대충 어떤 명령어들이 있는지 파악하시고, 나중에 필요하실 때 데이터시트 찾아보시면 될 것 같아요. 

정리를 해보자면, 이제 말씀드릴 명령은

곱하기 명령 (MUL,MLA),

데이터 전송 명령 (LDR, STR),

블록 데이터 전송명령 (LDM, STM),

기타 명령(SWP, SWI)

정도입니다. Coprocessor 명령은 생략하도록 하고, 명령이 끝나면 실전 케이스로 간단한 예제 설명을 하나 드리려고 하고, 마지막으로 StrongARM의 Spec 정도를 간단히 언급하겠습니다. 

남은 부분이 앞으로 몇 번에 걸쳐서 매듭지어질지는 해봐야겠지만, 최대한 스피디한 진행을 하려 합니다. 

차후에 기회가 되면 MMU 부분 같은 것들을 짧게 다룰 수도 있겠지요. 

자, 이제 시작하겠습니다. 

● 곱하기 명령(MUL, MLA) 

ARM7에서의 곱하기 명령은 크게 두 종류가 있습니다. 하나는 그냥 곱하는 것이고, 다른 하나는 곱해서 더하는 것입니다. ^^ 명료하죠? 

1) MUL{cond}{S} Rd,Rm,Rs 

cond 부분은 해당 명령의 실행 조건입니다. S플래그는 결과가 플래그 레지스터에 영향을 미칠지의 여부라고 계속 말씀 드렸죠? 다음으로 레지스터 3개를 지정하도록 되어있는데, Rd는 결과가 저장될 레지스터이고, Rm과 Rs는 곱해질 두개의 레지스터입니다. 보셨듯이 이 명령에서는 레지스터만을 사용해야 합니다. 

Ex) MUL R1,R2,R3 ; R1:=R2*R3 

# 참고로 곱하기의 결과가 32비트를 넘는다면, 하위 32비트만 결과 레지스터에 남습니다. 

2) MLA{cond}{S} Rd,Rm,Rs,Rn 

위와 비슷합니다만, 이번에는 레지스터가 4개입니다. 단순 명료하게 의미를 말씀드리면, 

Rd := Rm * Rs + Rn 의 의미입니다. 

● Single Data Transfer (LDR, STR) 

해당 명령은 레지스터와 외부 메모리와의 데이터 전송을 담당하는 명령입니다. 무척 사용빈도가 높은 명령입니다. 86에서는 MOV하나로 레지스터간의 데이터 전송과, 외부메모리와의 데이터 전송의 두 가지 목적으로 사용하지만, ARM7 에서는 구분이 되어있습니다. 

즉, MOV명령은 레지스터간의 전송명령으로 분류도 데이터 처리명령으로 분류되고, 데이터 전송명령으로는 LDR과 STR이 있습니다. 

여기에 사용되는 옵션이 많은데요, 우선, LDR은 로드라는 의미이므로 외부 메모리로부터 레지스터로 데이터를 읽어오는 명령이고, STR은 반대의 기능을 하는 명령입니다. 

- 명령 형식 

LDR{cond}{B} Rd, address{!} Rd:= contents of address

LDR{cond}{B} Rd, =expression Rd:= expression

STR{cond}{B} Rd, address{!} contents of address := Rd 

LDR과 STR은 Single Data 전송 명령입니다. 비슷한 명령으로 LDM, STM은 여러 개의 레지스터 내용을 전송할 수 있는 명령입니다. 이밖에 SWP라는 스왑 명령이 있는데, 해당 5개의 명령만이 외부 메모리와 레지스터간의 전송을 가능하게 하는 명령입니다. 

LDR과 STR의 경우 전송 단위를 바이트, 혹은 워드(32Bit)단위로 수행 할 수 있습니다. 바이트 단위 전송의 경우 해당 레지스터의 어떤 부분이 사용될지의 여부는 해당 프로세서의 Endian에 달려 있습니다. 또, 워드 전송 명령을 사용할 경우, 메모리 어드레스는 Word align이 되어야 합니다. 

다음 표는 LDR과 STR에서 사용하는 전송 모드를 나타낸 것입니다. 

--------------------------------------------------------------------

Mode Effective address Indexing

--------------------------------------------------------------------

[Rn] Rn none

[Rn,+- expression] Rn +- expression Pre-indexed

[Rn,+- Rm] Rn +- Rm Pre-indexed

[Rn,+- Rm, shift cnt] Rn+-(Rm shifted by cnt) Pre-indexed

[Rn],+-expression Rn Post-indexed

[Rn],+-Rm Rn Post-indexed

[Rn],+-Rm,shift cnt Rn Post-indexed

-------------------------------------------------------------------- 

# Rn : base 주소를 가지고 있는 레지스터

Rm : r15를 제외한 레지스터(Offset), 부호 값 사용

expression : -4095 - +4096 범위의 Immediate 값(12Bit)

shift : LSL, LSR, ASR, ROR, RRX

cnt : 1..31 사이의 값. 

상당히 복잡한 내용입니다. 표에서 Mode 부분이 실제 어셈블러에서 사용하는 명령의 형식이라고 보시면 됩니다. 각 모드별로 예제를 들어서 설명하도록 하죠. 

1) Pre-Indexed Addressing Mode 

이 모드에서는 Rn을 베이스 주소로 사용합니다. 여기에 더해서 Offset을 지정하거나, 혹은 지정하지 않을 수 있습니다. Offset을 사용할 경우에는 해당 Offset을 베이스 주소에서 더하도록 하거나 뺄 수 있는데, 위의 표에서 +, - 기호가 그것을 의미합니다. 

Offset은 부호가 있는 12Bit Immediate값을 사용하거나 레지스터를 지정해서 해당 레지스터의 내용으로 사용할 수 있습니다. 또한 레지스터를 Offset으로 사용하는 경우에는 Shift 시켜서 적용시킬 수 있습니다. 관련 내용을 다시 확인하고 싶으신 분들은 데이터 전송명령의 오퍼랜드 2에 대한 설명을 다시 확인하시길 바랍니다. 

Ex) LDR r0,[r1] ; r1을 베이스로 사용하고 Offset은 지정하지 않는 형태입니다. r0에 r1을 번지로 하는 워드(4바이트)를 읽어드립니다.

LDR r0,[r1,#132] ; 이번에는 Offset으로 132를 지정한 형태입니다.

STR r0,[r1,r2] ; 베이스는 r1, Offset은 r2를 사용한 형태입니다. 즉

*(r1+r2)=r0 와 같은 의미.

LDR r0,[r1,r2,LSL #2] ; 베이스 r1, Offset은 r2<<2 의 형태. 

이번에는 Write-Back 기능에 대해서 알아보겠습니다. LDR명령의 경우 옵션으로 Write-Back을 지정할 수 있는데, 지정할 경우 원래 베이스에 Offset을 더한 값을 다시 베이스 레지스터로 넣는 기능을 합니다. 제 생각에는 이 기능이 C에서 ++와 같은 의미라 생각되는데요. 글쎄, 쓰기 나름이겠지요. 다음은 예제입니다. 

Ex)

1: LDR r0,=table_end

2: LDR r1,=table

3:

4: MOV r2,#0

5:loop STR r2,[r0,#-4]!

6:

7: ADD r2,r2,#1

8: CMP r0,r1

9: BNE loop

10:

11: ...

12:

13: ALIGN

14:table % table_length*4

15:table_end 

예제가 좀 길군요. 주의해서 보실 부분은 5번 라인입니다. 해당 명령은 STR r2,[r0,#-4]! 이죠. r2를 r0를 베이스로 삼고 Offset으로 -4값을 사용했군요. r0가 가리키는 포인터가 실제 버퍼로 사용할 공간이 끝난 바로 다음을 가리키고 있으므로 -4를 하면 마지막 워드 엔트리 포인트가 됩니다. 그리고 주의하실 점은 !를 사용한 것인데요. 이것이 바로 Write-Back기능입니다. 위의 설명에 나와있듯이 베이스 값(여기서는 r0가 되겠군요.)을 갱신하는 것인데요... 

예를 들어 1000번지부터 2개의 entry를 가정한다면, table은 1000이 될 것이고 table_end는 1008 번지가 될 것입니다. 이때 STR명령에서 1008을 베이스로 -4를 Offset으로 설정했으므로 실제로 r2값은 1004번지부터 4바이트에 기록이 될 것입니다. 이후 Write-Back 옵션이 적용되어 해당 명령이 끝나면 r0값은 1004로 (1008-4) 바뀌게 됩니다. 

참, 여기서 Pre-Index Mode이기 때문에 실제 주소를 구할 때 Offset을 먼저 빼 주었군요. 아무쪼록 이해 하셨기를 바라며 다음으로 넘어가렵니다. 

2) Post-Indexed Addressing Mode 

Post인덱스 모드의 경우에는 Pre인덱스 모드에 비해 Effective Address는 항상 Rn, 즉 베이스 어드레스를 나타내는 레지스터의 값입니다. 그리고 한가지 주의하실 점은 Post인덱스 모드의 경우엔 따로 !를 사용 하지 않더라도 디폴트로 Write-Back 모드가 사용됩니다. 그렇겠죠? Post인데 Write-Back이 안된다면, Offset을 사용할 이유가 없군요. 

Ex) LDR r0,[r1],r2 ; 대괄호의 사용이 Pre 인덱스의 경우와

다릅니다. 실제 수행되는 것은 r0에다

r1을 주소로 하여 값을 읽어오고 다시

r1에는 r2를 더해주는 일을 합니다. 

STR r0,[r1],#20 ; [r1]:=r0, r1:=r1+20 

1: LDR r0,=table

2: LDR r1,=table_end

3:

4: MOV r2,#0

5:loop STR r2,[r0], #4

6:

7: ADD r2,r2,#1

8: CMP r0,r1

9: BNE loop

10:

11: ...

12:

13: ALIGN

14:table % table_length*4

15:table_end 

마지막 예제는 위에서 나왔던 예제와 비슷하니 잘 분석해 보시길 바랍니다. 

3) Relative Addressing Mode 

해당 Addressing 모드는 어셈블러가 적절히 지원하여 변환해 주는 모드라고 생각하시면 됩니다. 

Ex) LDR r5,ThreeCubed

... 

ThreeCubed DCD 27 

위와 같은 경우 실제로는 LDR r5,[PC,#constant] 형태의 코드로 번역해 줍니다. 즉 PC를 베이스로 삼아서 코드를 만드는 것이지요. 만약 해당 Symbol이 지정하는 범위가 너무 커서 상수로 지정할 수 없다면 어셈블을 할 때 에러를 내게 됩니다. 

또 많이 사용되는 표현으로 다음과 같은 표현이 있습니다. 

Ex) LDR r0,=0x12345678 

사실은 위의 예에서도 사용했었는데요. 이 경우 어셈블러가 해당 상수 값을 특정 공간에 모아서 삽입 해 주고 (이공간을 Literal Pool이라 하는군요) 역시 마찬가지로 PC를 베이스로 해서 명령코드를 만듭니다. 


자.. 오늘은 이만 쓰렵니다. 사실 열두번째 강좌는 쓰기 시작한지 몇 주만에 끝내게 되는군요. 중간에 계속 일이 생겨서. 미뤄두고 있다가, 메일로 강좌를 재촉하시는 분들이 계셔서. 

아무튼, 다음강좌에 뵙도록 하겠습니다.

--------------------------------------------------------------------

ARM7 강좌 [13] : Instruction Set (7)

-------------------------------------------------------------------- 

● Block Data Transfer 명령(LDM,STM) 

해당 명령은 개인적인 생각으로 참 독특하다고 생각합니다. 지난 강좌에서 다루었던 LDR, STR과 마찬가지로 실제 메모리에 레지스터의 내용을 전달하거나, 전달받을 수 있는 명령입니다. ARM7에서는 이런 명령이 몇 안되죠... 

LDR명령이 메모리 번지의 내용을 지정된 레지스터로 가져오는 명령이라면 LDM은 가져오긴 하는데, 여러 개의 레지스터의 내용을 한 큐에 가져오는 명령입니다. 가장 많이 사용되는 경우는 스택 연산인 것 같습니다. 전에 말씀드렸었지만, ARM7에는 Push, Pop 명령이 없습니다. 대신 LDR이나 STR을 쓸 수도 있겠고, 또 LDM이나 STM을 쓸 수도 있죠. 후자 쪽이 더 많이 사용되는 듯 합니다. 

1) <LDM|STM>{cond}mode Rn{!},{reg_list}{^} 

위 명령에서 {cond}는 늘 보아오던 명령어 실행 조건입니다. Rn은 전송에 사용될 베이스 번지를 지정하는 레지스터입니다. !를 붙이면 Wrte Back 기능이죠. LDR과 STR에서 다루었습니다. 자세한 내용은 뒤에서 언급하도록 하겠습니다. 

{reg_list} 부분은 전송하거나 전송 받을 레지스터의 목록을 나타내는 부분입니다. 예를 들어 1000번지에 r1,r2,r3를 저장하고 싶다 했을 경우에, 일단 1000번지 값을 어떤 레지스터에 넣어두고, 여기서는 그 레지스터를 r13이라고 하죠, 그러면 Rn은 r13이 되는 거구요, {reg_list}는 {r1,r2,r3} 이 되는 것입니다. mode 라고 되어있는 부분은 여러 개의 레지스터를 메모리에 넣거나 가져올 때 어떤 방식으로 동작할 지를 지정하는 접미사입니다. 이 접미사 종류가 8가지가 있는데요. 

무지하게 복잡해 보입니다. 일단은 각 요소의 의미만 간단하게 정리하고, 다음으로 넘어가죠. 

마지막으로 {^}부분은... 글쎄요 잘 이해가 안되는 부분입니다만, 제가 보는 책과 데이터 시트에서 예제가 나와 있지 않군요. 그냥 문서의 내용을 그대로 적어보겠습니다. 

{^} if present set S bit to load the CPSR along with the PC, or

force transfer of user bank when in privileged mode...(???) 

자, 그럼 이제 본격적으로 설명에 들어가겠습니다. 

먼저 1단계, LDM 과 STM의 의미입니다. 

LDM : 베이스 레지스터(Rn)로 지정된 번지에서 레지스터 목록으로 지정된 각 레지스터의 내용을 읽어들이는 명령.

STM : LDM과 반대. 

여기까지는 별 무리가 없으리라 생각합니다. 혹시 이 명령을 8086등에 있는 Block Data 전송명령 등과 혼동하지 않으시길 바랍니다. 어렴풋이 기억하는데, 8086등에는 메모리에서 메모리로 Block 전송을 할 수 있는 명령이 있죠... 또는 특정 길이만큼 메모리를 어떤 값으로 설정하는 Block 설정 명령도 있었던 듯 합니다. 

ARM7의 LDM과 STM은 Block 전송이 아니라 Multiple Register 전송입니다.

쉽게 생각하면 

push ax

push bx

push cx

push dx 

가 8086형태라고 할 때, ARM7에서 Single 데이터 전송 명령을 사용하면 

STR r0,[sp],#4

STR r1,[sp],#4

STR r3,[sp],#4

STR r4,[sp],#4 

가 되겠고, 또 Multiple 전송명령을 사용하면, 

STMEA sp!,{r0,r1,r2,r4} 

제가 방금 적어본 것이라 맞는 것인지 확신은 없습니다만, 그냥 개념이 이렇다는 것만 파악하셨으면 합니다. 

그러면 이제 2단계, {Reg_List}를 자세히 다루어 보죠. 위의 예에서 나와있듯이 중괄호 사이에 전송 대상이 되는 레지스터를 넣어주면 됩니다. 그렇다면 몇 개까지 가능한 것일까요? ARM7에서 한 시점에 사용할 수 있는 레지스터의 개수는 r0에서 r15까지 총 16개죠. LDM이나 STM명령에서 지정할 수 있는 레지스터의 개수는 최대 16개입니다. 즉, 한 명령으로 모든 레지스터를 저장하거나, 가져올 수 있다는 의미입니다. 

참 재미있는 사실은, LDM명령의 니모닉상에 16비트의 공간이 있어서 각 비트가 레지스터 r0-r15와 1:1로 대응이 된다는 사실입니다. 따라서 {reg_list}에는 어떠한 레지스터의 조합도 올 수 있습니다. 감동 ! 

그리고 어셈블러의 문제겠지만, {r0,r2} 이런 형식뿐만 아니라, {r0-r5} 와 같은 형식, {r0-r3,r6-r7} 이런 형식도 사용할 수 있습니다. 

마지막으로 확인할 것은, {r3,r2,r1} 이렇게 썼을 때와 {r1,r2,r3} 이렇게 썼을 경우, 메모리에 저장되는 순서가 다를까요. 아닐까요. 말씀드렸듯이 16비트의 비트필드가 존재해서 각각 레지스터와 1:1대응이 된다고 하였으니, 소스코드에서 어떤 형식을 쓰든지 간에 니모닉으로 변환될 때는 그 순서는 아무 의미가 없겠지요. 결국 같다는 말입니다. 

자. 이번에는 3단계입니다. 동작 모드!!! 

위의 STM명령에서 제가 STMEA라고 명령을 적었습니다. EA가 동작모드를 지정하는 부분입니다. 이와 같은 키워드가 8가지가 있고, 동작모드는 4가지가 있습니다. 

먼저 4가지의 동작모드를 말씀드리겠습니다. 

A) Post-Increment Addressing 

여기서 동작모드는 여러 개의 레지스터 값을 메모리로(혹은 로부터) 전송할 경우 해당 메모리 번지를 증가시키면서 저장할지, 혹은 감소시키면서 저장할지를 지정하는 것과, 증/감을 하는데, 저장하기 전에 증/감을 할지, 아니면 저장하고 나서 증/감을 할지를 지정하는 것을 의미합니다. 

처음 설명할 동작모드는 저장 이후 증가하는 방식입니다. 

예를 들어 R10에 0x1000이 들어있다고 가정하고 R10을 베이스레지스터로 사용해서 {r1,r2}를 저장한다면, Post-Increment모드에서는, 

1. 0x1000 번지에 r1이 저장된다.

2. Base 번지값이 0x1004로 증가한다.

3. 0x1004 번지에 r2가 저장된다.

4. Base 번지값은 0x1008로 증가한다. 

만약 !를 사용했다면 r10의 값은 0x1008이 될 것입니다. 

B) Pre-Increment Addressing 

말 그대로 먼저 증가하고 다음에 저장하는 동작 모드입니다. 위와 같은 조건을 가정해 봅시다. 

1. Base 번지값이 0x1004로 증가한다.

2. 0x1004번지에 r1이 저장된다.

3. Base 번지값이 0x1008로 증가한다.

4. 0x1008번지에 r2가 저장된다. 

역시 !를 사용했다면 r10의 값은 0x1008이 됩니다. 

C) Post-Decrement Addressing 

이번에는 베이스 번지가 감소하는 경우죠. 좀 특이한 것은, 감소 모드로 저장(로드)을 할 경우 아까는 레지스터번호가 빠른 것부터 저장하거나 불러들였는데, 이번에는 거꾸로 라는 것입니다. 결과적으로, 메모리에 저장되는 레지스터의 순서는 항상 동일하다는 것이죠. 마찬가지로 같은 조건에서 예제를 들겠습니다. 

1. 0x1000번지에 r2가 저장된다.(!!! r1이 아니라 r2)

2. Base번지값이 0x0FFC로 감소된다.

3. 0x0FFC번지에 r1이 저장된다.

4. Base번지값이 0x0FF8로 감소된다. 

만약 !를 사용했다면 r10의 값은 0xFF8이 된다. 

D) Pre-Decrement Addressing 

1. Base번지값이 0x0FFC로 감소된다.

2. 0x0FFC번지에 r2가 저장된다.

3. Base번지값이 0x0FF8로 감소된다.

4. 0x0FF8번지에 r1이 저장된다. 

만약 !를 사용했다면 r10의 값은 0xFF8이 된다. 

여기까지 4개의 동작모드를 설명했습니다. 

동작모드를 나타내는 키워드는 8개인데요. 각각의 동작모드에 대해서 스택처럼 사용할 경우, 혹은 아닐 경우 2가지로 나누어서 나타내기 때문입니다. 

다음 표는 각 동작모드에 대한 명령어입니다. 

==================================================================

동작 Stack Other

------------------------------------------------------------------

pre increment load LDMED LDMIB

post increment load LDMFD LDMIA

pre decrement load LDMEA LDMDB

post decrement load LDMFA LDMDA 

pre increment store STMFA STMIB

post increment store STMEA STMIA

pre decrement store STMFD STMDB

post decrement store STMED STMDA

================================================================== 

Stack인 경우와 아닌 경우 키워드가 다른 것은, 단지 User의 편의를 위한 배려라고 생각됩니다. 즉, 키워드를 LDMED로 썼을 경우나 LDMIB로 썼을 경우, 동작상에 차이는 없는 듯 합니다. 

키워드를 무작정 붙인 것 같지는 않고요. 먼저 Other의 키워드를 살피면, I는 increment를 의미하고요. D는 decrement겠죠. 그리고 B는 Before를, A는 After를 의미합니다. 

그러므로 만약 LDMDA 는 post decrement 모드를 의미하는 것입니다. 

Stack의 경우엔, E는 Empty를 F는 Full을 의미한답니다. 스택을 구현하는 경우 현재 sp가 가리키는 번지의 내용이 차있는지, 비어있는지를 의미한다고 보시면 될 듯 합니다. 무슨 이야기인가 하면 만약 Post 모드를 사용한다면, 스택을 구현할 경우, 어떤 내용을 넣고 다음에 번지를 증/감하므로 결국 어떤 시점에서 스택포인터가 가리키는 번지는 비어있게 됩니다. 이 경우 Empty가 되겠죠. 

Load의 경우엔 Empty 형태의 스택이라면 sp가 가리키는 공간에 아무 내용도 없으므로 먼저 sp를 변화시키고 데이터를 가져와야겠죠. 그래서 Load는 Pre가 Empty 와 대응이 됩니다. 하지만 반대로 Store의 경우엔 Empty 형태의 스택을 위해서는 먼저 데이터를 넣고 sp를 변화시켜야 합니다. 그렇다면 post모드가 Empty와 대응이 되겠군요! 

Full은 더 이상 말 안해도 되리라 믿습니다. 

다음으로 D는 Decending, A는 Ascending을 의미합니다. 이것은 스택이 거꾸로 커지는지 아니면 반대인지와 관련이 있습니다. 8086에서는 Push를 하면 sp값이 작아지죠? 그렇다면 decending Stack이라고 볼 수 있습니다. push와 STM이 대응되므로 STM의 Decrement 모드는 D 라는 키워드를 사용했군요. Pop의 경우는 LDM과 대응되고 decending stack에서 Pop을 할 경우 sp값은 증가되어야겠죠. 그래서 LDM에서는 increment모드가 D입니다. 

A는 반대이겠죠. 결국 스택관련 명령에서는 LDM이나 STM에서 같은 접미사를 사용하면 되는 것입니다. 물론 동작 방식은 LDM과 STM에서 각기 다르지만요. 

자.. 이제 예제를 하나 보이고 오늘 강좌를 정리하려 합니다. 

STMED sp!,{r0-r3,r14} 

BL somewhere 

LDMED sp!,{r0-r3,r15} 

첫 번째 명령에 STMED는 Empty Decending Stack Operation이므로 실제로는 post-decrement 동작모드를 의미하죠.. sp(r13)가 가리키는 번지에 r0,r1,r3,r14를 저장합니다. BL로 이 루틴에 들어왔다면 r14에 복귀 번지가 들어가 있다는 것을 감안하십시요. 

BL에서 뭔가 처리를 하고, 마지막으로 LDMED명령에서 레지스터를 복구합니다. 이번에는 pre-Increment 동작모드입니다. 

한가지 주의하실 점은 r14대신에 r15로 복구를 시켰다는 것입니다. ARM7에서는 ret명령 대신 mov r15,r14를 사용한다고 말씀드렸죠. 

LDMED 명령에서 레지스터 복구와 서브루틴 복귀를 동시에 처리하는 부분입니다. 

자. 오늘 강좌는 이렇게 정리할까 합니다. 거의 1달만에 강좌를 썼군요. 그동안 메일이나 게시판을 통해서 질문과 격려를 보내주신 분들에게 죄송하다는 말씀을 드려야겠군요. 

이제 강좌도 종반을 향해 달리고 있습니다. 아마도 2회 정도면 계획했던 모두가 끝이 날것 같군요. 다음 강좌를 기약하며 이만 줄이겠습니다. 

--------------------------------------------------------------------

ARM7 강좌 [14] : Instruction Set(8)

-------------------------------------------------------------------- 

오늘 다룰 명령은 SWP와 SWI 두 가지입니다. Co-Process 명령을 제외하면 이 명령이 마지막이겠군요. 코프로세서는 다루지 않을 생각이니. 참 홀가분한 느낌입니다. 

1. Single Data Swap : <SWP>{cond}{B} Rd,Rm,[Rn] 

레지스터를 3개 지정하도록 되어 있습니다. 실제 동작은 Rd:=[Rn], [Rn]:=Rm이 한번에 일어나는 명령입니다. 여기서 한번이라는 말은 한 Clock을 의미하는 것이 아니라, 명령 도중에 인터럽트 등에 의해 중단되지 않고 계속 이루어진다는 것입니다. 그리고 B접미사는 계속 보아 왔듯이 워드 Operation이 아니라 Byte Operation을 의미합니다. 

예제를 보죠. 

SWP r0,r1,[r2]

; r0:=[r2], [r2]:=r1 입니다. 

SWPB r2,r3,[r4]

; r2:=[r4], [r4]:=r3 입니다. 다만 B가 붙었으므로 Bit 0에서 7까지만 영향을 미칩니다. 

SWPEQ r0,r0,[r1]

; Flag의 상태를 확인하여 r0와 [r1]의 내용을 바꾸는 형태입니다. 보셨듯이 Rd와 Rm이 같을 수도 있군요. 

한가지 더 언급하고 싶은 것은 SWP를 세마포어 구현에 사용하는 방법입니다. 어떤 문서에선가 SWP명령이 세마포어를 구현하는데 유용하다고 읽었는데, 처음에는 이해가 안되더군요. 한참 뒤에 이해할 수 있었습니다. 

인터럽트를 금지시키지 않고 Semaphore 연산을 할 수 있다는 것이 SWP명령의 강점입니다. 여기서 Semaphore를 설명 드리기는 좀 그러니, 간단히 핵심만 말씀드리고, 이해하실 분은 하시고, 안해도 별 수 없겠죠. 

보통 세마포어의 p()연산을 구현하는 순서로, 먼저 세마포어 변수를 읽어오고, 다음에 비교를 하죠. 그 값이 0보다 크다면 감소를 시켜 다시 Write합니다. Test and Set 연산이라고도 하던데요. 

SWP명령에 적용시키려면, [Rn]부분이 변수가 되어야겠군요. 그러면 Rd에는 SWP명령을 통해 세마포어 변수 값이 들어오고요, 물론 세마포어 변수의 상태를 알지 못하므로 어떤 값이 들어올지는 모릅니다. 따라서 이 단계에서는 세마포어 변수에 어떤 값을 다시 Write해야 할지도 모릅니다. 

핵심은 변수에 Write되는 값을 무조건 0으로 설정한다는 것이죠. 즉. 

r3가 Semaphore 변수의 주소를 가리키고 있다고 하고, r2의 값은 0이라고 한다면, 

SWP r1,r2,[r3] 

와 같은 명령으로 처리할 수 있습니다. 위의 명령을 통해 원래 세마포어 변수의 값이 r1으로 로드됩니다. 0보다 큰 지의 여부는 이제부터 비교해야겠지요. 한가지 특이한 것은 세마포어 값을 읽어옴과 동시에 0을 넣어주었다는 것입니다. SWP명령의 특성상 읽어오는 동작과 0을 넣는 동작 사이에는 인터럽트 등이 걸릴 수 없습니다. 

이제, r1의 세마포어 값을 비교하는 부분으로 넘어가면 되는데, 이 와중에 인터럽트가 걸리고 다른 Task가 세마포어 변수를 Access하려고 하더라도 0이 들어 있으니 자연히 대기상태로 인식되어 더 이상 진행을 하지 못하게 될 것입니다. 

이밖에도 v()연산에서도 뭔가 더 해주어야 하겠지만.

(괜한 얘기를 꺼냈나 하는 후회가 엄습하는 중입니다...^^) 

2. Software Interrupt : SWI{cond} <expression> 

SWI명령은 소프트웨어 인터럽트 명령입니다. 8086에는 INT 명령이 있죠? Exception 파트를 보시면 언급이 있었습니다. 

SWI명령이 걸리면 동작모드가 변화합니다. Supervisor 상태로 진입을 하게 됩니다. 이런 특성 때문에 pSOS의 경우는 System Call의 진입방법으로 사용합니다. 

명령의 형식을 보시면 <expression>부분이 있는데, 무슨 역할을 하는 것일까요? 8086계열처럼 INT 21H 또는 INT 10H 이런 식으로 인수를 주는 것일까요? 8086이야 Interrupt 벡터를 지정하는 것이었지만, ARM7에는 해당 Vector는 고정이 되어 있습니다.(Software Exception 한가지로) 

CPU는 expression에 대한 아무런 일도 하지 않습니다. 실제 명령어 구조를 보면 총 32비트 중 상위 4비트는 조건 Flag에 사용되고, 다음 4비트가 모두 1111 이면 SWI명령으로 판단됩니다. 이후 24비트는 실제로는 무시되는 내용입니다만... 

위와 같이 써주면 expression의 내용이 SWI명령의 Low 24Bit부분에 인코딩 됩니다. 하지만 말씀 드렸듯이 ARM7은 SWI명령의 Low 25Bit내용이 뭐든 간에 동일하게 동작합니다. 

그럼 왜 그렇게 쓰는걸까요? 

예제를 보면 SWI명령을 만나면 소프트웨어 Exception Handler로 이동하고 복귀번지는 r14_svc로 저장이 됩니다. 그런데 Handler 부분에서 복귀 번지를 이용하여 해당 명령을 직접 읽어다가 Low 24 Bit 부분을 인수로 해석해서 사용할 수 있는 것입니다. 

물론 이런 일들은 ARM7이 해주는 것이 아니라 User가 Handler에서 직접 프로그램 하는 것이죠. 

다음은 Handler 부분의 예제입니다. 

STMFD r13,{r0-r2,r14}

LDR r0,[r14,#-4]

BIC r0,r0,#0xFF000000

... 

위에서 보시면 결국 r0에 SWI명령의 low 24Bit가 얻어지죠. 

오늘 강좌까지 길고 길었던 정말 길었던 ARM Instruction 부분을 끝냈습니다. 

계획했던 분량은 3회였는데... 결국 8회 분량으로 늘어나고 말았군요. 이것저것 후회가 많았던 부분이었습니다. 이렇게 저렇게 숙제하듯이 여기까지 해치우고는... 

다음엔 무엇을 써야 할지... 고민을 하게 되는군요. 

뭐가 되었든 다음 강좌로 ARM7 강좌를 정리하겠습니다. (마음의 준비를...^^)

그럼 이만.

--------------------------------------------------------------------

ARM7 강좌 [15] : 최종회

-------------------------------------------------------------------- 

드디어 ARM7강좌 최종회를 쓰게 되었습니다. 제가 ARM7을 기준으로 강의를 해 왔지만, 실제로 사용했던 CPU는 StrongARM이었습니다. 그래서, 오늘은 StrongARM SA1100에 대해서 간단히 말해 보고자 합니다.(사실 별로 아는 것도 없지만..) 

물론 자세한 Spec은 메뉴얼을 통해 살피시는 것이 더 정확할 테니까 제가 말씀드려봐야 별 의미가 없을 듯 하고. 

그냥 StrongARM을 사용하면서 인상깊었던 점을 몇 가지 말씀드리고자 합니다. 

첫 번째로 가장 중요한 점으로 생각되는 것은 CPU 동작속도가 200MHz정도까지를 지원한다는 점입니다. 이전에 접했던 Embedded CPU 가 빨라야 50MHz이었던 것을 감안한다면, 참 빠른 CPU입니다. 그런데 이 칩은 신기하게도 열이 별로 안난다는 것이 또한 인상적입니다. 

보드를 몇 일씩 켜 놓아도 안정적이고, 불안하지가 않더군요. 옛날에 AMD188을 사용할 때에는 잠시만 켜 놓아도 보드가 녹아나는 것이 아닐지 얼마나 불안했던지 그만큼 전력 소모도 작다는 뜻이겠지요. 

두 번째로는 LCD 컨트롤러가 내장되어 있어서 1024*1024의 해상도까지 지원하고, 컬러는 3만 컬러까지 지원합니다. 역시 일반 On-Board칩과 비교할 만한 일은 못되겠지만, 그런 칩만 다루었던 제게는 참 흐뭇한 일이었습니다. SA1100 보드에 640*480 TFT LCD가 달려있었는데, 거기에 고소영 사진을 띄워놓고 얼마나 흐뭇해했던지...^^ 

세 번째 인상 깊었던 것은 MMU 입니다. 학교 다닐 때 OS 수업시간에나 들어봤던 MMU라는 것을, 직접 프로그램 해야 했으니까요. 나중에 차차 알게된 사실이지만, 이 MMU가 있는지의 여부가 Linux와 같은 OS를 포팅 할 경우에는 무척 중요하다고 하군요. StrongARM의 경우는 Two-Level Virtual Memory를 지원합니다. 메모리를 최소 400H Byte단위로, 최대 1Mega Byte단위로 제어할 수 있습니다. 

이밖에도 GPIO에서 Edge Detect Interrupt기능을 지원한다는 사실과, PCMCIA와 같은 각종 주변장치를 지원한다는 것 등. 

StrongARM은 Embedded CPU 보다는 PC용 CPU에 근접 하다는 느낌이 들었고. 그럼에도 불구하고 낮은 전력소모 때문인지 Embedded용으로 많이 사용되고 있는 것 같습니다. 

ARM7강좌를 하면서 개발환경에 대해서 궁금해하시는 분들이 계셨습니다.

"ARM7을 공부해 보고 싶은데 보드가 없다"... 라든가 하는 식의.

그렇게 보면 제가 운이 좋았던 것 같습니다. 회사에 정말 훌륭한 보드가 있었거든요. 

물론 제품을 위해 사용되는 보드였기는 하지만... LCD와 Keyboard, 카메라

까지 달린 보드였고, 충분한 메모리와 Flash까지 있었으니까요... 

사실 여전히 ARM을 공부하기 위한 보드를 찾기는 쉬운 일이 아닌 것 같더군요. 저도 언젠가는 StrongARM보드를 만들어 보리라 생각했었지만. 그게 그리 만만치 않은 일이었고. 앞으로도 가능할지는 모르겠습니다. 

별로 할 말도 없으면서 강좌를 쓰려니 이상한 말만 나오는군요...

 

모두에게 감사한 마음과 죄송한 마음을 갖고 있습니다. 

사실 시작할 때의 마음가짐을 끝가지 가지고 가지 못했던 것도.. 그렇고.. 

이렇게 강좌란에 허튼 소리를 쓰고 있는 것도 그렇고.. 

강좌를 해 오면서, 정말 많이 알고, 잘 하시는 분들이 참 많구나 하는 생각을 했습니다. 거기에 비하면 이제 막 공부를 하고 있는 제가 이런 강좌를 주제넘게 시작했구나 하는 후회도 들었고요. 부끄러운 생각도 많이 들었습니다. 

그동안 관심을 가져주신 모든 분들께 다시 한번 감사 드리면서 ARM7 강좌를 이렇게 정리할까 합니다. 

그럼 이만.

 

 

신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2011.04.05 02:04

임베디드 시스템 엔지니어를 위한 리눅스 커널 분석

남상규

http://ruby.medison.co.kr/~halite
선임 연구원
(주)메디슨
초음파 연구소

halite (at) medison.com

$Date: 2002/05/21 01:10:08 $

 

이 문서는 리눅스 커널을 임베디드 시스템에 포팅하려는 엔지니어들을 위한 기본 지식 습득을 위해 만들어졌다. 리눅스 커널 자체의 원론적인 것 보다는 임베디드 시스템에 리눅스 커널을 포팅할 때 엔지니어가 리눅스 커널에 쉽게 접근하기 위한 정보나 혹은 방법을 제공하는 것이 목적이다. 그러므로 OS에 대한 이론 보다는 OS가 만들어지는 방법이나 부팅되는 순서 메모리에 적재되고 실행되는 순서 등에 대해 기술하고 더불어 커널을 만들기 위해 필요한 도구들의 사용법에 대해 알아본다.

원문은 http://ruby.medison.co.kr/~halite 에있고 가장 먼저 업데이트될 것이다.

틀린 내용이 있을 수도 있다. 이런 것에 대해선  으로 연락 바란다.

 

$Revision: 1.13 $

차례
1. 리눅스 커널 컴파일하기
1.1. 리눅스 일반
1.1.1. 왜 리눅스인가?
1.1.2. 리눅스 소스 디렉토리 구조
1.2. LXR
1.3. 소스 코드 얻기
1.4. 소스 코드 풀기
1.5. 컴파일 준비
1.6. 커널 설정
1.7. 커널 컴파일
1.8. 커널 테스트 및 설치
2. Makefile 분석
2.1. 부팅 과정의 이해[1]
2.2. 커널 이미지 파일의 구조
2.2.1. 커널의 부팅
2.2.2. zimage와 bzImage의 차이
2.3. bzimage가 만들어지는 과정 추적-Makefile 분석
2.3.1. $(topDIR)/Makefile
2.3.2. $(topDIR)/arch/i386/Makefile
2.3.3. $(topDIR)/arch/i386/boot/Makefile
2.3.4. $(topDIR)/arch/i386/boot/compressed/Makefile
2.3.5. $(topDIR)/arch/i386/boot/tools/build.c
2.4. bzImage가 만들어지는 과정 추적-Log 분석
2.4.1. make bzImage 순서 정리
2.4.2. Log
2.5. 단계별 자세한 분석
2.5.1. -Ttext 0x0의 의미
2.5.2. 분석
3. 크로스 컴파일러 만들기
3.1. 크로스?
3.2. 툴체인
3.2.1. 배경
3.2.2. 미리 만들어진 툴체인
3.2.3. 툴체인 만들기
4. ARM 리눅스
4.1. ARM 프로세서 MMU(Memory Management Unit)
4.1.1. 개요
4.1.1.1. TLB
4.1.1.2. 메모리 접근
4.1.1.3. 변환 테이블
4.1.1.4. 도메인
4.1.2. 변환 절차
4.1.3. 변환 테이블 베이스
4.1.4. 1레벨 읽기
4.1.5. 1레벨 디스크립터
4.1.6. 섹션 디스크립터와 섹션 변환
4.1.7. 페이지 테이블 디스크립터
4.1.8. 2레벨 디스크립터
4.1.9. 큰 페이지 변환
4.1.10. 작은 페이지 변환
4.1.11. 캐시와 쓰기 버퍼 제어
4.1.12. 접근 권한
4.2. Assabet 보드용 커널 컴파일
4.3. ARM 리눅스 Makefile 분석
4.3.1. $(TOPDIR)/arch/arm/Makefile
4.3.2. $(TOPDIR)/arch/arm/vmlinux.lds
4.3.3. $(TOPDIR)/arch/arm/boot/compressed/vmlinux.lds
4.3.4. Log 분석
4.4. 소스 분석
4.4.1. arch/arm/boot/compressed/head.S
4.4.2. arch/arm/kernel/head-armv.S
5. 리눅스 커널 부팅
5.1. 커널 시작
5.2. lock_kernel()
5.2.1. Lock이 왜 필요하지?
5.2.2. Lock - 기초적 설명
5.2.3. i386, ARM의 스핀락
5.3. setup_arch()
5.4. trap_init()
5.5. init_IRQ()
5.6. sched_init()
5.7. init()
5.8. dmesg 정리
6. 디바이스 드라이버
6.1. 디바이스 번호
6.2. 샘플 디바이스 드라이버
6.3. 모듈 동작의 이해
6.4. 알아야할 것 들
A. SEGA DreamCast Linux
A.1. LinuxSH
A.2. 드림캐스트에서 리눅스 실행해 보기
B. 리눅스에 시스템 콜 만들어 넣기
B.1. 시스템 콜의 흐름
B.2. IDT(Interrupt Descriptor Table)
B.3. 시스템 콜 테이블
B.4. 시스템 콜 추가
C. Inline Assembly
C.1. 인라인 어셈블리 기초
C.1.1. 알아야할 것 들
C.1.2. 어셈블리
C.1.3. Output/Input
C.1.3.1. Constraints
C.1.3.2. Modifier
C.1.3.3. ARM Family Constraints
C.1.3.4. i386 Family Constraints
C.2. 사례 분석
C.2.1. strcpy()
C.2.2. _set_gate()
신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2011.04.05 01:52

신고
Posted by ipod apple

댓글을 달아 주세요

Algorithm_Solving2011.04.05 01:33

alias(명령어 간소화하기) 
apropos(관련된 명령어 찾기) 
arch(컴퓨터 종류 알기) 
arp(같은 서브넷의 IP 보여주기) 
at(작업 시간 정하기) 
atd(계획성 있는 작업 실행하기) 
awk(특정 패턴 문자 처리하기) 
a2p(펄 파일로 바꾸기) 
badblocks(배드 블럭 검사하기) 
bc(계산기) 
biff(메일 수신 소리로 확인하기) 
bg(후면작업; 배경화면 설정) 
bind(키나 함수 순서 결합하기) 
break(루프 빠져나가기) 
cal(달력보기) 
builtin(내부 명령어 알아보기) 
case(조건 처리하기) 
cat(화면상에서 파일 보기) 
cd(디렉토리 변경하기) 
cfdisk(디스크 설정하기) 
chattr(파일 속성 변경하기) 
chfn(사용자 정보 변경하기) 
chgrp(파일, 디렉토리가 속했던 그룹 바꾸기) 
chmod(파일 권한 바꾸기) 
chown(파일 주인 바꾸기) 
chsh(지정된 셸 바꾸기) 
cksum(CRC값을 점검한다) 
clear(화면 청소하기) 
clock(CMOS 시각을 조정하기) 
cmp(파일 비교하기) 
colcrt(문자 변환 필터) 
colrm(열 삭제하기) 
column(가로 정렬하기) 
comm(파일 비교 출력하기) 
command(명령어 알아보기) 
continue(루프 계속돌기) 
cp(파일 복사하기) 
cpio(복사본 만들기) 
crontab(cron을 관리한다) 
csplit(파일에 서식, 규칙 정하기) 
cut(필요한 필드만 출력하기) 
date(날짜 보기) 
dd(블럭장치 읽고 쓰기) 
debugfs(ext2 파일 시스템 디버깅하기) 
declare(변수 선언하기) 
df(파일 시스템의 사용량 보기) 
dirs(디렉토리 목록 표시하기) 
dmesg(부팅 메시지 보기) 
dnsdomainname(DNS 이름 출력) 
domainname(NIS 이름 출력&설정) 
du(디렉토리와 파일의 용량 파악하기) 
dumpe2fs(파일 시스템 정보 보기) 
echo(표준 출력하기) 
eject(장치 해제하기) 
elm(메일 관련) 
enable(내부 명령어 지정) 
env(환경변수 출력하기) 
e-val(인수 읽기) 
exec(셸 명령어 실행하기) 
exit(종료하기) 
expand(탭을 공백으로 변환하기) 
export(변수 지정하기) 
e2fsck(파일 시스템 복구하기) 
fc(지정된 편집기 받기) 
fdformat(플로피 디스크 포맷하기) 
fdisk(파티션 나누기) 
fg(지정된 작업을 전면 프로세스로 시작하기) 
file(파일 종류 보기) 
find(파일 찾기) 
finger(사용자 정보 알기) 
fold(정형화하기) 
fmt(정형화하기) 
for(반복 실행하기) 
free(메모리 사용량 알아보기) 
fsck(파일 시스템 검사하기) 
fstab(파일 시스템에 대한 고정적인 정보 저장하기) 
ftp(파일 전송 프로그램) 
fuser(프로세스 ID 출력) 
getkeycodes(매핑 테이블 출력하기) 
grep(특정 문자(열) 검색하기) 
gzexe(실행 파일 압축하기) 
gzip(압축하기) 
halt(시스템 종료하기) 
hash(기억해 두기; index 역할) 
head(파일의 앞부분 출력하기) 
help(도움말 보여주기) 
host(호스트 정보 보기) 
history(사용 명령어 목록보기) 
hostname(서버 이름 알기) 
id(계정 정보 알기) 
if(조건문 실행하기) 
ifconfig(랜카드에 주소 할당하기) 
imolamod(모듈 설치하기) 
inetd(인터넷 서비스의 최상위 데몬) 
init(실행 단계 정하기) 
ispell(철자법 검사하기) 
jobs(수행중인 프로세스 알기) 
kbd_mode(키보드 모드 출력하기) 
kill(프로세스 죽이기) 
klogd(커널 로그 데몬) 
ldd(공유 라이브러리의 의존성 알기) 
less(페이지 단위로 출력하기) 
let(정규식 표현하기) 
lilo(부팅하기) 
ln(링크하기) 
locate(패턴에 맞는 파일 찾기) 
login(로그인하기) 
logger(시스템 로그 기록하기) 
logname(사용자 로그인명 보여주기) 
logout(로그인 셸 종료하기) 
look(특정 단어 검색하기) 
losetup(중복 장치 확인하기) 
lpd(프린트 데몬) 
lpq(현재 프린트 작업 상태 출력하기) 
lpr(출력하기) 
lprm(대기열에 있는 문서 삭제하기) 
ls(디렉토리 내용보기) 
lsattr(파일 시스템의 속성 보여주기) 
lsdev(하드웨어 장치 출력하기) 
lsmod(모듈 정보 출력하기) 
mail(메일 관련) 
make(컴파일하기) 
man(매뉴얼 보기) 
mattrib 
mbadblocks 
mcd 
mcopy 
mdel 
mdeltree 
mdir 
mesg(메시지를 받을 수 있는지 확인하기) 
mformat 
minfo 
mkdir (디렉토리 만들기) 
mke2fs(파일 시스템 생성하기) 
mkfs(파일 시스템 만들기) 
mknod(특수 파일 만들기) 
mkswap(스왑 영역 지정하기) 
mlabel 
mmd 
mmount 
mmove 
mpartition 
mount(장치 연결하기) 
more(화면 단위로 출력하기) 
mrd 
mren 
mtoolstest 
mtype 
mutt(메일 관련) 
mv(파일 옮기기) 
mzip 
netstat(현재 네트웍 상황 보기) 
nice(프로세스 우선 순위 변경하기) 
od(8진수로 파일 보기) 
passwd(암호 입력하기) 
pidof(실행중인 프로그램의 프로세스 ID 찾기) 
pine(메일 관련) 
ping(네트웍 확인하기) 
popd(pushd 취소) 
ps(프로세스 상태 알기) 
pstree(프로세스 상관관계 알기) 
pwd(절대경로 보여주기) 
quota(디스크 한계량 알기) 
rarp(rarp 테이블 관리하기) 
rcp(원격 호스트에 파일 복사하기) 
rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기) 
rdate(네트웍으로 시간 설정하기) 
reboot(재부팅하기) 
rmmod(모듈 지우기) 
readonly(읽기 전용으로 표시하기) 
renice(프로세스 우선 순위 바꾸기) 
reset(터미널 초기화하기) 
restore(다시 저장하기) 
rlogin(바로 접속하기) 
rm(파일 지우기) 
rmdir (디렉토리 지우기) 
route(라우팅 테이블 추가/삭제하기) 
rpm(프로그램 추가/삭제) 
rpm2cpio(rpm을 cpio로 변환하기) 
rsh(원격으로 명령어 실행하기) 
rup(호스트 상태 출력하기) 
rusers(호스트에 로그인한 사용자 출력하기) 
rwall(호스트 사용자에게 메시지 뿌리기) 
script(기록하기) 
set(변수값 설정하기) 
setup(시스템 관련 설정하기) 
showmount(호스트의 마운트 정보 보여주기) 
shutdown(전원 끄기) 
sleep(잠시 쉬기) 
source(스크립트 번역하기) 
split(파일 나누기) 
ssh(암호화된 원격 로그인하기) 
stty(터미널라인 설정 보여주기) 
su(계정 바꾸기) 
suspend(셸 중단하기) 
swapoff (스왑 해제하기) 
swapon(스왑 활성화하기) 
sync(버퍼 재설정하기) 
syslogd(로그인 과정 설정하기) 
tac(거꾸로 보기) 
tail(문서 끝부분 출력하기) 
talk(이야기하기) 
tar(파일 묶기) 
tcpdchk(tcp wrapper 설정하기) 
tcpmatch(네트웍 요청에 대해 예측하기) 
tee(표준 입력으로부터 표준 출력 만들기) 
telnet(원격접속하기) 
test(테스트하기) 
times(셸에서의 사용자와 시스템 시간 출력하기) 
top(cpu 프로세스 상황 보여주기) 
tr(문자열 바꿔주기) 
true(종료 코드 리턴하기) 
type(유형 보기) 
ul(밑줄 처리해서 보여주기) 
ulimit(제한하기) 
umask(매스크 모드 설정하기) 
umount(장치 해제하기) 
unalias(별명 제거하기) 
uname(시스템 정보 보기) 
unexpand(공백 문자를 탭으로 변환하기) 
uniq(중복된 문장 찾기) 
useradd(사용자 계정 만들기) 
userdel(계정 삭제하기) 
usermod(사용자 계정정보 수정하기) 
unset(설정 변수 해제) 
uptime(시스템 부하 평균 보여주기) 
users(로그인된 사용자 보여주기) 
w(시스템에 접속한 사용자 상황 알아보기) 
wait(프로세스 기다리기) 
wall(모든 사용자에게 메시지 보내기) 
wc(문자, 단어, 라인수 세기) 
whatis(명령어의 간단한 설명보기) 
while(루프 명령어) 
who(사용자 알기) 
write(콘솔 상에서 간단한 메시지 보내기) 
xcopy(반복적으로 복사하기) 
XFree86 
ypchfn(NIS에서 사용하는 chfn 명령어) 
ypchsh(NIS에서 사용하는 chsh 명령어) 
yppasswd(NIS에서 사용하는 passwd 명령어) 
zcat(압축 파일 보기) 
zcmp(압축 파일 비교하기) 
zforce(강제로 gz 만들기) 
zgrep(압축 상태에서 grep 실행하기) 
zmore(압축 상태에서 more 실행하기) 
znew(.Z 파일을 .gz로 다시 압축하기) 


Part 2 편집기 


ed(라인 편집기) 
sed(스트림 에디터) 
pico(텍스트 에디터) 
vi 
emacs(편집기)

신고
Posted by ipod apple

댓글을 달아 주세요

Algorithm_Solving2011.04.05 01:27

커널 결과물은 표준 출력(stdout)이 아니라 커널 링 버퍼에 들어간다는 사실에 주의하자. stdout은 프로세스에 밀접한 개념이기 때문이다. 커널 링 버퍼에 들어있는 메시지를 검사하려면, dmesg 유틸리티를 사용한다(아니면 cat /proc/kmsg 명령을 내려 /proc 자체 기능을 활용하면 된다). Listing 6은 dmesg를 사용해 마지막 커널 메시지 몇 개를 보여준다.

신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2011.02.14 01:14

회사생활 때문에 바빠서 신경도 못쓰고 ..

이제 찾아오는사람도 없는 블로그가 되어버렸겠구나.. 흑 ㅠㅠ

시간날때마다 단장을 좀 해야겠다..

신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2010.07.27 12:20
오늘 갑자기 방문객들이 많아진거 같아서 유입키워드를 보니 웹통째로 긁기, 싸이탈퇴, 싸이사진긁기 등이 눈에 띄네요 ~
네이트온 고객정보 수집약관을 맥 어드레스 주소와 컴퓨터 이름까지 긁는다던데 ..

지금같이 오픈이 대세이고 Facebook 같이 초글로벌 SNS도 간단한 정보만을 요하는데
이건 뭐 떨어지는 폭포수 위로 헤엄치고 올라갈 기세네요 ..

얼마전에는 로그인하면 익스플로어에 자동으로 네이트온 뜨게끔 해서 캐욕먹더니...

망할 날이 머지 않은 듯...
신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2010.07.23 21:31
www.vuze.com

토렌토 클라이언트인데

속도도 빠르고 괜츊합니다. ㅎㅎ

그.러.나. 한글검색이 안된다는거!!

음... 팁을 말씀드리자면

검색할때 DVDSCR 이나 XVID .. 이런식으로 검색하면 짱짱한 화질의 영화를 다운로드 받을수 있습니다.

근데 ... 영화는 걍 영화관 가서 봅시다... ^^;;;
신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2010.07.23 21:29
https://www.torproject.org/

프록시서버를 두어서 추적을 못하게 합니다.

추적을 못하게 한다니 뭔가 캥기는 냄새가 나기는하는데... ㅎㅎ

뭔가 자기주장을 펴고 싶은데 잡혀갈꺼같다거나... ㅋㅋ

그럴떄 긴요하게 쓰일 수 있죵

사용법은 뇌이버박사님에게 물어보삼 ㅎㅎㅎ


네이트온, MSN이나 각종 사이트 막혀있다면 .... 시원하게 뚫어드림. ㅋ
신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2010.07.23 21:23
강력한 정적 코드 분석 툴 ! CodeSonar

Memory Leak, 미초기화변수 등등...

코드를 정적으로 분석하여 각종 Error 및 Warning 을 잡아줘요 !! 넘흐 조 ㅎ ㅏ ㅋㅋ
신고
Posted by ipod apple

댓글을 달아 주세요

분류없음2010.07.06 01:30
골수 윈도우즈 프로그래밍 하다가

임베디드 하니깐 정신이 없네용

학생때 리눅스에 관심이 있었지만 다시 손을 댈려니...이거 영 ㅋ

출처 : 리눅스포털 http://www.linux.co.kr/



리눅스에 대한 기본적인 얘기들


작성자 : (주)수퍼유저코리아, http://www.superuser.co.kr 서버팀



차례(전체목차)

1. 리눅스와 운영체제?

2. 리눅스커널의 탄생과 역사

3. 리눅스커널의 표시와 의미

4. 리눅스의 배포판의 구성요소

5. 리눅스배포판의 종류

6. 아키텍쳐별 리눅스의 종류


1. 리눅스와 운영체제

top


  • 운영체제의 구성(일반론)

    - kernel : 커널 (가장 작은 의미의 운영체제)

    - SHELL : 사용자인터페이스

    - 시스템유틸리티, 응용프로그램들

  • 리눅스의 구성요소들


  • 2. 리눅스 커널

    top


  • 리눅스커널 버전의 역사

    - 0.02버전 : 1991년 10월5일 첫발표 (0.01버전은 발표안함)

    - 0.99버전 : 1993년 12월 발표

    - 1.0 버전 : 1994년 발표

    - 2.0 버전 : 1996년 6월 9일 발표 (SMP기능)

    - 2.2 버전 : 1999년 1월

    - 2.4 버전 : 2001년 1월

    - 2.6 버전 : 2003년 12월 - 2.6.16버전 : 현재 최종버전


  • 리눅스커널 공식 발표 및 소스구하기

    - 공식웹사이트 : www.kernel.org


  • 3. 리눅스커널 버전 표시와 의미

    top


    리눅스커널소스 압축파일
    - kernel-2.6.15.tar.gz
    - kernel-2.6.16.tar.gz
    - kernel-2.6.17.tar.gz
    - kernel-2.6.18.tar.gz

    운영중인 리눅스에서 커널버전 확인방법

    [root@papa ~]# uname -r
    2.6.15-1.1831_FC4
    [root@papa ~]#
    [root@papa ~]#
    [root@papa ~]# uname -a
    Linux papa.superuser.co.kr 2.6.15-1.1831_FC4 #1 Tue Feb 7 13:37:42 EST 2006 i686 i686 i386 GNU/Linux
    [root@papa ~]#

     


    4. 리눅스배포판의 구성요소

    top


    linux kernel : 수정, 패치 또는 그대로 사용

    + 여러가지 shell들 : Bash쉘, Born쉘, Korn쉘, C쉘등

    + 설치용 프로그램 : anaconda등

    + 부트로더(Boot Loader) : LILO, GRUB등

    + system utility들

    + system program들

    + 언어사용에 필요한 각종 font들

    + 각종 library들

    + X windows 프로그램들 : KDE, Gnome등

    + 업무용 응용프로그램들 : OA용 프로그램들

    + 리눅스기반의 수많은 프로그램들 : 웹서버용,게임,그래픽관련등


    5. 리눅스의 배포판의 종류

    top


    리눅스명 관련사이트URL
    레드햇(Redhat)리눅스 http://www.redhat.com
    페도라(Fedora) http://www.fedora.redhat.com/
    데비안(Debian) http://www.debian.org
    슬랙웨어(Slackware) http://www.slackware.com
    맨드레이크(Mandrake) http://www.linux-mandrake.com
    와우리눅스(Wowlinux) http://www.wowlinux.com
    수세리눅스(SuSe Linux) http://www.suse.com
    한소프트리눅스(아시아눅스) http://www.haansoftlinux.com
    http://www.asianux.com
    마루 http://www.linuxone.co.kr
    부요 ETRI에서 주도하여 개발한 리눅스
    우분투(ubuntu) http://www.ubuntulinux.org
    SULinux http://www.sulinux.net

     


    6. 아키텍쳐별 리눅스

    top



    알파기반리눅스(Alpha Linux)

    인텔기반리눅스(Intel Linux)

    스팍기반리눅스(Sparc Linux)


     

    신고
    Posted by ipod apple

    댓글을 달아 주세요

    분류없음2010.07.06 00:51

    무슨 이유인지는 모르겠지만

    익스플로어에서는 Picasa 다운로드가 되지 않았다. (스크립트로 막아놓은건가 .. )

    걍 간단히 소스보기 해서 exe파일 찾기 해서 경로를 찾음

    http://dl.google.com/picasa/picasa36-setup.exe


    ^^;
    신고
    Posted by ipod apple

    댓글을 달아 주세요

    분류없음2010.06.18 03:22

    7장 남았습니다.

    댓글 순서대로 드리도록 하지요!

    메일주소를 남겨주세요!

     

    감사합니다.

    신고
    Posted by ipod apple

    댓글을 달아 주세요

    분류없음2010.06.18 02:10

    cdt4cygwin17.reg

     

    Eclipse와 Cygwin 꼭 같은 드라이브에 깔아주고

    위 레지스트리를 실행!

     

    -출처 : http://xuny.egloos.com/2572636 -

    신고
    Posted by ipod apple

    댓글을 달아 주세요

    분류없음2010.06.18 02:06

     

    아래 그림과 같이 구축!

     

     

     

    image

    신고
    Posted by ipod apple

    댓글을 달아 주세요

    분류없음2010.05.22 00:22

    http://mugtug.com/sketchpad/

    신기하네요 :) 플래쉬를 대체하는 웹표준인가요 ...?

    와 ~~ :)


    신고
    Posted by ipod apple

    댓글을 달아 주세요