본문 바로가기

프로젝트/[중단] 라즈베리파이 가지고 놀기(망가짐)

라즈베리파이에 나의 os 올리기 간단 요약

728x90

참고!

http://wiki.osdev.org/Raspberry_Pi_Bare_Bones#Booting_the_Operating_System


#라즈베리파이에 나만의 OS 만들어 올리기


What?

라즈베리파이는 값싼 교육용, 개인용 전자보드로 ARM 아키텍쳐를 이용한 broadcom 사의 보드를 사용한다. (bcm2835 (rpi b+))

OS는 운영체제로 하드웨어에 올라가는 공통적인 소프트웨어 플랫폼이다. 

이 주제는 결국 라즈베리파이에 나만의 OS를 제작하여 포팅하는 것이다.


Why?

배울 것이 많다. 여러 문서들을 읽어가며 진행해야한다. 만약 센서를 연결한다면 회로까지 보게된다. 이보다 배울게 많은게 있을까...


How?

쉽지 않다. 어떤면에서?

첫번째, OS를 올리기 위해선 Boot에 대한 지식이 필요하다.

두번째, 보드마다 Boot의 방식이 다를 수 있다.

세번째, 여러번의 테스트과정에서 시간 소모가 클 수 있다.

네번째, 보이지 않는 결과도 있다. 그리고 그것이 올바르게 설치되었는지 확인하기가 쉽지 않다.

...



그러나 라즈베리파이에서는 쉽다고 할 수 있다.

초반 부팅 과정은 SoC 내부 칩에 내장되어 있으므로 그 이후의 과정만 따라가면 된다.

따라서 우리는 SD Card에 있는 kerner.img 파일만 수정하면 된다.



준비작업

1. 라즈베리파이와 노트북 USB 포트와 시리얼 연결 (usb to serial)


What?

rs232c 는 시리얼 통신 프로토콜로 Tx, Rx, GND, VCC  네 단자만으로 구현 가능하다.(저것만 있는 것은 아닙니다... CTS ? 이런 단자도 있습니다. 자세한 것은 구글을 참고하시면됩니다.) 시리얼 통신이므로 시리얼 특징을 가지고 있다.

디버깅시, 센서 제어시에 유용하다. 비슷한 프로토콜로 CAN(자동차 통신용)을 말하곤 한다. (CAN은 범용성이 높아 자동차 뿐만아니라 가정용 센싱기기 제어에 자주쓰인다고 알려져있다.)


Why?

시리얼 통신이므로 타겟보드의 반응을 즉각적으로 볼 수 있다. 디버깅, 센서 제어에 유용하다. 즉, kernel 이 잘 동작되는지 외부에서(노트북 환경) 곧바로 확인할 수 있게 하기 위합니다.


How?

직접연결 이후 VMWare linux 에서 연결한다. 

+ 작업 환경은 linux가 편하므로 되도록 linux에서 연결하자.(심지어 본인은 msata ssd 외장하드에 linux vmware를 넣어 돌리고 있다.)


참고

http://mc500.tistory.com/154


https://kerneltweaks.wordpress.com/tag/raspberry-pi/


1+ 라즈베리파이와 vmware의 rs232c 포트 연결 


setserial 확인 명령어 설치

$sudo apt-get install setserial

$setserial -a /dev/ttyS0

$sudo apt-get install minicom

+명령어 로그 체크 .bash_history


minicom 으로 체크

$sudo minicom -s

+Save setup as dfl 꼭해줘야함

?minicom ttyS0 설정, 윈도우 COM4 , dmesg | grep tty  소용 없음. 

+vmware에서 serial port 추가해줘야한다. (COM4)에 맞춰야함.

+그다음 linux 에서 ttyS0, ttyS1을 체크해봐서 맞는거로 minicom 잡아주면된다.


2. 라즈베리파이의 boot order

What?

boot란 하드웨어의 작동을 시작으로 최종적으로  kernel이 작동되기까지의 과정을 boot라고 한다.

(특정 기기의 경우 OS 위의 특정 프로세스가 동작해야만 하는 경우가 있다.)

한편 라즈베리파이는 SoC로 첫 boot order가 내장되어 있다. 따라서 이부분은 수정불가!

그 이후의 부분에 대해 수정해보도록 하자.


Why?

OS(kernel)이 올라가기 위해선 그 올라갈 위치와 범위, 순서가 정해져 있다. 이는 boot order과정 상의 약속이다.

HW가 동작하기 이전에 SW가 센서를 잡는다는건 말도 안된다.  HW의 초기화 과정이 필요하며 이를 boot 과정에서 수행한다.

따라서 초기화 과정을 확인하는 것과 더불어 어떤 단계에 걸쳐 어떤 내용으로 boot가 되는지 확인해야한다.

-linux boot 과정 학습 

-linux kernel img 생성 과정 학습 요망

- 점프 구간을 캣취하고 제어하는 능력이 필요함


How?

우선 navilux 코드 분석

-> 라즈베리파이 boot 과정 추적

-> 라즈베리파이 boot 과정 압축

-> rpi boot 간소화

 


http://archive.arm.linux.org.uk/lurker/message/20011005.154003.5d698445.html

여기서 kernel의 boot order는 어떤 kernel을 쓰냐에 따라 바뀌는데

zImage 기준으로, 

compressed/head.S (아니면 head-*.S) -> compressed/misc.c -> kernel/head-armv.S (arch/arm/mm/proc-*.S)

->start_kernel in init/main.c


kldp 4장에 있음

https://wiki.kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/


참고 http://ssel.sejong.ac.kr/documents/linux-2.6.32.27/arch_2alpha_2boot_2misc_8c.html


라즈베리파이 bootloader만 uboot 로 올리는 방법


http://elinux.org/RPi_Upstream_Kernel_Compilation#Building_your_bootloader