부트로더란?

  • 시스템의 하드웨어를 초기화하고 운영체제의 커널을 메모리에 올려 실행시키는 시스템 프로그램
  • JTAG/BDM -> 부트로더의 디버깅 및 Writing을 도와주는 장비

 

 부트로더의 위치

  • 일반적으로 시스템 메모리의 물리 주소 0번지부터 위치
  • 롬, 플래시메모리, SRAM 등 정적인 메모리에 위치.

 

 부트로더의 기능

  • 메모리 초기화
  • 하드웨어 초기화
    • 직렬포트의 초기화
    • 네트워크초기화
    • 프로세서 속도, 인터럽트의 초기화
  • 커널과 램 디스크 적재: 커널과 램 디스크를 램에 적재하여 실행
  • 사용자 인터페이스 기능


부트로더의 특징
  • 하드웨어 의존성이 강하다.
  • 초기화코드는 대부분 어셈블리언어로 작성된다.
  • 프로그래머는 프로세서 구조, 특징, 사용법을 알고 있어야 한다.
    • clock, memory controller, UART, Ethernet, 기타 등등...


부트로더의 종류

  • U-Boot(Universal Bootloader)
    • PPCBoot와 ARMBoot 프로젝트 기반
  • LILO(Linux Loader)
  • GRUB(Grand Unfied Bootloader)
  • Loadlin
  • EtherBoot
  • Blob
    • ARM용 부트로더
  • PMON(PROM Monitor)
    • MIPS 보드용
  • RedBoot
    • RedHat에서 개발 및 배포
    • eCos 기반

 

임베디드 시스템이란? 정의 및 개념 총정리 - 도라가이드


호스트 시스템(Host System)

타깃 시스템을 개발하기 위한 개발환경을 제공하는 시스템.

타깃 시스템을 위한 어셈블러, 컴파일러, 링커 등 개발도구 제공

보통 IDE(Integrated Development Environment)형태로 제공.

 

타깃 시스템(Target System)

개발하고자 하는 임베디드 시스템

 


크로스 디벨롭(교차 개발, Cross Development)을 위한 개발 도구

 


1. 교차 컴파일러(cross compiler)

: 호스트 시스템의 프로세서와 운영체제 위에서 동작하면서, 

다른 프로세서 용 오브젝트 코드를 생성할 수 있는 컴파일러


- 교차컴파일러의 예:

- GNU의 GCC

- ARM의 ADS(ARM Devlopment Suit)/ RVDS(RealView Develpment Suit)

- CodeWarrior for ARM


임베디드 시스템 소프트웨어의 개발은 Cross Compiler를 이용함.

(보통 타깃 시스템에서 직접 개발하는 것은 어려움.)

 


2. 링커(Linker)

: 불완전한 오브젝트 파일들을 합쳐 모든 코드와 데이터를 포함한 새로운 오브젝트 파일을 생성해 내는 도구.

크로스 컴파일 후 생성된 오브젝트 파일은 단순히 명령어 코드로 해석만 되어있는 상태, 

문법적으로 해석만 되어있는 상태이다.

프로그래머가 선언한 변수의 메모리 공간이나 참조한 함수의 위치에 대한 정보 등이 결정되지 않은 상태.

링커는 각각의 오브젝트 파일들이 서로 참조하고 연결될 수 있도록 링크시키는 역할을 한다.

 


3. 로케이터(Locator)
: 메모리에서 실행 가능하도록 코드와 데이터를 배치하여 최종 바이너리 이미지를 생성하는 도구.

프로그램의 일부분은 ROM에 있어야 하고, 또 다른 부분은 RAM에 있어야 한다.

소스 코드는 전원이 꺼지더라도 지워지짖 않아야 하기 떄문에 ROM에 있어야 한다.

변수는 값이 변경되어야 하기 떄문에 RAM에 있어야 한다.

- 부팅 시 RAM영역으로 Copy.

- 부트코드에 ROM에서 RAM으로 복사하는 과정이 필요.


Linker Script 파일

: 코드와 데이터의 메모리 배치를 정의한 파일

대부분 링커에 포함되어 있다.


1.src

src는 그림을 올릴때 사용하는 속성이죠

ex)<img src="그림파일.jpg">

근데 여기서 주의하실점이,

저 그림파일이 htm파일과 같은곳에 저장되있어야

인터넷으로 켯을때 이미지가 안깨지고 제대로 나옵니다.

아니면 저장을할때 그 폴더 까지 써주시면되는데요.

 

예를들어서,

<img src="내 그림/그림파일.jpg">

이렇게 앞에 내 그림은 폴더 이름이죠.

저건 내그림 폴더안에 그림파일.jpg 그림을 불러오는거예요.

 


2.width

width는 가로크기를 변경해주는 속성입니다.

ex) <img src="그림파일.jpg" width=100>

이렇게 쓰면 저 그림파일의 가로크기를 100픽셀로 설정 한것입니다.

 

3.height

height는 세로크기를 변경해주는 속성입니다.

ex) <img src="그림파일.jpg" height=200>

이렇게 쓰면 그림파일의 세로크기를 100픽셀로 설정 한것입니다.

 


4.border

border는 그림 테두리를 표시하는겁니다.

ex)<img src="그림파일.jpg" border=2>

이렇게 쓰면 그림파일의 테두리가 2만큼 되는데요.

만약 테두리를 표시하지 않으려면 border를 0으로 주면되고

크게하려면 숫자를 점점 올리면 됩니다.

 


5.alt

alt는 그림에다가 마우스를 대면 설명글이 나오게하는 거예요.

ex)<img src="그림파일.jpg" alt="히히하하">

이렇게하면 그림에다 마우스를 갖다대면 히히하하 라고 뜨게됩니다.

 


6.align

align은 다 아시죠?

그림을 특정위치로 정렬 해주는 거예요.

왼쪽,가운데,오른쪽 만 있는게 아니고

위,아래등등의 옵션도 있어요.

ex)<img src="그림파일.jpg" align=right>

=그림 오른쪽 정렬

<img src="그림파일.jpg" align=bottom>

=그림 하단에 맞춰 정렬

 


7.hspace

hspace는 그림 좌우에 여백을 설정하는 거예요.

ex)<img src="그림파일.jpg" hspace=20>

이건 그림 좌우에 20픽셀의 여백을 설정 하는 것입니다.

 


8.vspace

vspace는 그림 상하에 여백을 설정하는 거예요.

ex)<img src="그림파일.jpg" vspace=20>

이건 그림 상하에 20픽셀의 여백을 설정 하는 것입니다.


ODROID-XU – ODROID


LG전자 인턴에서 사용했던 보드인 ODROID-U2,

오드로이드 U2는 '하드커*" 사이트에서 구매 가능합니다... 

(직접 언급하면 상업적인 광고효과가 있을까봐... ㅎㅎ *가 궁금하면 메일이나 쪽지 보내주세요)

 

그래서 그 하드커* 사이트를 오랜만에 들어가봤는데, ODROID-XU 라고 하는 친구가 보이더군요??

흠흠 그 친구를 The world's first ARM big.LITTLE architecture based single board computer 라고 자랑해놓았더라구요.

 

big.LITTLE... 이 놈은 무엇인가? 왜 빅을 작게 쓰고 리틀을 크게 썼는지 참 반항아같은(?) 놈입니다만

오늘은 이 '빅 리틀'(big.LITTLE) 이란 놈에 대해서 설명해볼까 합니다.


빅 리틀 아시기 전에 아셔야 하는 배경지식은 바로 이겁니다.

성능이 우선시 되는 코어는 소비 전력이 큽니다. 반대로, 전력이 우선시 되는 코어는 성능이 비교적 약합니다.

이 이유는 아주 간단합니다. "명령어 처리 속도가 높다 = 성능이 좋다." 라고 할 수 있을텐데,

명령어 처리를 짧은 시간에 많이 진행할 수록 전기 회로에 흘러야 할 전류 량은 더 많아지니까 당연히 소비 전력이 커지게 되는 것이죠.

흠흠... 너무 당연한 설명을 하는 건가요?

 

자 이제, 두 개의 아키텍처 A15 , A7 이 있다고 생각해봐요.

A15 는 성능만을 고려한 아키텍처이고, A7 은 저전력을 고려해서 만든 아키텍처 입니다.

그런데 성능도 놓치기 싫고, 저전력도 놓치기 싫죠?

바로 이러한 문제의 솔루션이 빅 리틀입니다.

 

빅 리틀은 상황에 따라 프로세서를 맞게 쓰자는 겁니다.

성능이 필요할 땐 고성능 아키텍처 프로세서를, 

배터리 사용시간을 늘려야할 때는 저전력 아키텍처 프로세서를

쓰자는 겁니다.

 

즉, 두 아키텍처를 결합해서 만든 CPU 아키텍처를 바로 big.LITTLE 아키텍처라고 합니다.


linux ubuntu 환경에서 특정 유틸리티를 받아야 하는 경우

 

$ sudo apt-get install <packages to install...>


위와 같은 명령어를 자주 사용하실 겁니다. 

 

그런데, sudo apt-get install 명령어를 사용하다 보면 느려서 속 터지는 경우가 많으실 거에요. 인터넷 속도가 꽤 빠르고 컴퓨터 성능도 나쁜 편이 아님에도 느린 다운로드 속도를 보여주는 경우가 꽤 많습니다... 막 몇 십 kb/s 속도가 나오는 경우 컴퓨터를 부서버리고 싶죠...

 

왜 apt-get install 명령어로 설치를 하면 그렇게 느린 속도를 보여줄까요?

이유는 다운로드를 받는 서버 상태가 꽝이라서 그렇습니다. 우분투를 설치하고 나면 기본적으로 kr.archive.ubuntu.com 사이트에서 유틸리티를 다운 받고, 우분투 시스템 업데이트를 진행하게 됩니다. 우리는 조금 더 빠른 업데이트 서버를 찾을 필요가 있습니다. 

우리는 업데이트 서버를 변경해야 합니다.

 

업데이트 서버는 어디에 저장되어 있을까요?  source.list 라고 하는 파일에 저장되어 있습니다. 이 파일의 위치는...


/etc/apt/source.list

 

따라서, vi 에디터로 source.list 파일을 수정해보도록 합시다.

 

$ vi /etc/apt/source.list


그리고 source.list 파일 속에 있는 모든 

http://kr.archive.ubuntu.com/ubuntu/ 를 http://ftp.daum.net/ubuntu 로 고쳐주시면 됩니다.

 

 

 


이상, 느린 속도의 apt-get install 명령어 속도를 빠르게 할 수 있는 방법에 대한 포스팅이었습니다.

감사합니다.

 

+ Recent posts