부트로더를 만들어 보려고 하는데, 자유도가 높은 개발보드는 무엇이 있을까요?
글쓴이: babach / 작성시간: 화, 2015/03/10 - 4:57오전
1~2년동안 주요 관심사가 OS 여서 커널, 파일시스템 같은 걸 주로 공부하다가
드디어 몇 달전부터 더 밑단에 관심이 가기 시작했습니다.
계속 원리를 공부하고 알게되고 추상화 layer의 한단계를 벗겨내서 새로운 추상화 layer를 보고 이런 과정자체가 즐겁더라구요.
커널이라는 것도 결국 cpu와 주변장치와의 상호작용의 추상화라서 커널(운영체제)를 온전히 이해하려면 결국 하드웨어도 궁금해지는 지경에 오는 것 같습니다.
그래서 커스텀 부트로더를 만들어보고 커널도 수정해서 올려보는 등 이것저것 보드 가지고 만져보려고 하는데, 이것에 적합한 개발보드는 무엇이 있을까요?
라즈베리파이는 예전에 사놨는데, 목적에 적합한 보드인지는 모르겠습니다. 커스텀 부트로더를 올릴 수 있는 건지 아직 잘 모르겠네요.
beagle-bone 이라는 것도 있던데 혹시 다른 분들은 이런 목적의 보드로 어떤 걸 사용하시나요?
Forums:
..
보드 종류는 별로 관계없어보입니다만, x86이 아닌이상 일단 부트로더를 굽는데 JTAG과 같은 장비가 필요할 것 같습니다. 보드가 벽돌이 되기도 쉬우니 살려야하고 NAND혹은 RAM등을 직접 엑세스해야하고 해서요..
A rose is a rose is a rose..
찾아보니 JTAG 가격이 꽤 나가네요. ARM
찾아보니 JTAG 가격이 꽤 나가네요. ARM Cortex M3로 한정해도 보드 종류가 너무 많군요ㅜ
... ARM cortex-m3 나 cortex-m4
... ARM cortex-m3 나 cortex-m4 를 사용한 대부분의 CPU 는 자체 부트롬을 가지고 있습니다.
JTAG 이 없어도 USB 나 UART 를 사용해서 CPU 내장 flash 에 프로그램 다운로드가 가능합니다.
다운로드 프로그램도 CPU 메이커가 제공하고요.
그래서 딱히 부트로더가 필요하진 않은데,
CPU 내장 flash 의 수명이 줄어드는게 안타까운 분은 CPU 내장 SRAM 에 다운로드해서 바로 실행시켜주는 프로그램을 만드셔서 CPU 내장 flash 에 기록해 놓고 그걸로 부팅해서 사용하시더군요.
ARM cortex-a9 이상을 사용하는 대부분의 고급 SoC 들 역시 부트롬을 내장하고 있습니다.
CPU 메이커마다 제각각 다양한 기능을 집어넣고 있는데, 거의 모두가 SD card 부팅 정도는 지원합니다.
다만, SD card 의 어디에 사용자 부트로더를 넣어야하는지는 제각각이죠. 파티션 테이블 문제 때문에.
아... Intel 이 친숙하시다면 이런 놈도 있습니다.
http://elinux.org/Minnowboard:MinnowMax
도대체 무슨 생각인지는 모르겠지만, Intel 이 몇 년째 열심히 이것저것 붙였다뗐다 주물럭거리는 SoC 를 사용한 보드입니다.
(현재는) BayTrail 이라는 이름으로 알려져 있죠.
각설하고... 부트로더를 직접 개발하신다면 디버깅을 위해서 JTAG 장비가 필요합니다. 다운로드는 둘째문제고요.
CPU 안 메모리맵이 보통 internal
CPU 안 메모리맵이 보통 internal flash(ROM), internal SRAM 이렇게 제공되나보군요.
http://markdingst.blogspot.kr/2012/06/make-own-bootloader-for-arm-cortex-m3.html 말씀해주신 ROM과 SRAM의 관계는 여기 포스트에서 말하고 있는 바와 비슷한것 같기도한데,
결국 부트로더를 ROM이나 SRAM 으로 가져오는건 별 문제가 안되는데, 계속 부트로더를 ROM에 쓰면서 디버깅 할 수 없으니
JTAG 이라는 장비를 이용해 디버깅 하는게 좋다 정도로 이해했는데 맞게 이해한지 모르겠습니다ㅎㅎ 감사합니다! 어느정도 의문이 풀린 것 같아요! 살만한 JTAG 을 좀 찾아봐야겠네요ㅎㅎ
+ 추가 질문이 있는데, 부트로더를 qemu 같은 시뮬레이터에서 만들면서 디버깅 해보고, 실제로 개발보드에 물리적으로 덜 빈번하게 쓰는 방법도 혹시 할만 할까요?
QEMU 사용하시는걸 추천합니다. 시중에 파는 개발
QEMU 사용하시는걸 추천합니다.
시중에 파는 개발 보드들 왠만한거는 다들 커스텀 부트로더를 올릴 수 있습니다.
부트롬 설정으로 대부분 됩니다만, 그걸 설정하는 방법이 천차 만별입니다.
ARM 기반이면 극단적으로 말해 부트로더 뭐 별거 없습니다. 0x0 메모리 주소에 내가 원하는 코드 올려서 그거 돌게 만들고
그 코드가 부팅 작업을 하면 그게 부트로더입니다.
https://kldp.org/node/145143
이 글 참초해서 qemu에 0x0에 원하는 이미지 올려서 돌려보면 부트로더 연습은 충분히 하실 수 있을겁니다.
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
감사합니다. 우선 QEMU 로 주로 만지작
감사합니다. 우선 QEMU 로 주로 만지작 해봐야겠네요. 사실 물리적인 보드를 사서 해보려는건 어떤 느낌인지 감(?) 을 잡고 싶은 이유가 가장 컸습니다.
실험, 테스트 용으로 중고 개발보드 싼거 아무거나 사서 이것저것 해봐야겠네요.
아, 그리고 나빌레라 님 OS 책은 정말 많은 도움이 되고 있습니다. 커널 소스만 계속 읽어도 뜬구름 잡는 느낌이었는데, 제가 직접 수정해보면서 화면으로 확인해보고 이런 과정을 거치니 이제 좀 감이 오더군요^^ 적당한 때에 적당한 난이도의 책을 만난것 같습니다. 한국에도 이런 류의 책이 많아졌으면 좋겠어요.