기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요 ^^;;

Bootloader분석중에..조금 이해가 안가는게 있어서 이렇게 글을 올리게 되었습니다..

부끄럽지만..용기내어서 여쭤보겠습니다..

ARM가지고있는 레지스터가..

r0 ~ r15 까지의 레지스터가 있고

CPU State를 가지고있는 레지스터들이 있는 것들은 문서를 봐서 알게 되었습니다..

제가 궁금한 것은 ARM 어셈블리로 짠 start.S 파일에 들어있는 Source내용인데요..

그 곳에서 사용하는 r0~r15 ...CPSR.. 이런게 보이는데요..

거기에 mov를 이용해서 r0에 값을 넣고 그것을 다시 CPSR에 적용시키고...하는 것들이

ARM이 가지고 있는 레지스터에 직접적으로 넣고 연산하는 것으로 이해하고 있는데 제가 알고 있는게 맞나요?

그렇다면..레지스터에 왜 값을 넣는 것인지 잘 모르겠습니다...

레지스터에 특정한 값들을 넣으면 초기화가 되는 것인지...그 저장되어 있는 값을 C파일에서 가져다 쓰는 것인지..

ARM7 강좌와 고도리님이 작성하신 문서를 보며 start.S를 분석하고 있는데..

기초지식이 없어서 그런지..이해하기가 어렵네요 ㅠㅠ

어떻게 생각하고 있어야 잘 분석할 수 있을까요?..


고현철

2009.04.18 09:31:58
*.59.122.218

레지스터라는 것은 sram입니다.

거기에 세팅을 하면 그 값대로 회로가 동작하도록 cpu가 구성되어 있는 것입니다.
asm routine은 C 코드랑은 거의 상관없이 동작한다고 보시면 되고요. C코드는 asm이 끝난후에야 동작합니다.

답변이 되었는지 모르겠네요.

김형태

2009.04.20 18:17:15
*.187.60.171

아 sram이 레지스터라는 것이 였군요..
정말 모르는게 너무 많은 것 같네요..ㅠㅠ
조언 감사드립니다~!

이훈기

2009.04.18 20:17:00
*.76.137.41

원글)
그 곳에서 사용하는 r0~r15 ...CPSR.. 이런게 보이는데요..
거기에 mov를 이용해서 r0에 값을 넣고 그것을 다시 CPSR에 적용시키고...하는 것들이
ARM이 가지고 있는 레지스터에 직접적으로 넣고 연산하는 것으로 이해하고 있는데 제가 알고 있는게 맞나요?
답변) 맞습니다.
원글) 그렇다면..레지스터에 왜 값을 넣는 것인지 잘 모르겠습니다...
CPU의 모든 연산은 register안에 오퍼랜드값이 있어야만 가능합니다. C로 짜셔도 컴파일하고 난 다음에 어셈블러 레벨에서 보면 두 값 더하기 할 때 r0 r1 에 두개 값 넣고 r3에 값을 가져온다. 이런식으로 바뀌어지는 겁니다.

r0 부터 r12까지는 general purpose로써 원하는 결과를 얻기위해 연산시 operand를 넣는 용도로 사용합니다.
r13은  stack pointer, r14 는 link register (return address를 넣어놓습니다.) r15는 PC (program counter)입니다.
r0 부터 r3까지는 jump시에 (ARM은 최대 4개인자까지만) 인자로 사용됩니다. subroutine을 짜실 때에는 r0 부터 r3는 내용이 바뀌어도 상관이 없지만, r4-r12까지는 다 스택에 넣었다가 사용하고, 리턴하기전에 다시 원래 값으로 복구해야 합니다.  
CPCR은 CPU의 특정한 control을 위해 사용합니다. (예를 들면 little endian/big endian, etc)
CPSR은 status를 보여줍니다. 연산 결과에 의해 C (carriage) N(negative) O (overrun) Z (zero) 같은 bit가 setting됩니다.
Co-processor register가 있습니다. 이것도 특정한 (예를 들면 MMU같은거) 를 컨트롤하기 위해 사용합니다. ARM 9은 CP0 ~ CP 15까지 있죠.

이런 것들은 CPU에 매우 dependent한 부분들은 C의 제네럴한 연산으로는 access가 안되기 때문에 어쩔수 없이 assembler level에서만 짜야 합니다. 그래서 부트로더나 bsp의 시작 부분들은 대부분 assembler로 짭니다.  일단 C로 안되는 것들만 assembler로 짜놓고요. 그다음은 C로 할 수 있으면 대부분 C로 하지요.

원글) 어떻게 생각하고 있어야 잘 분석할 수 있을까요?..
먼저 사용하시는 해당 ARM CPU의 일반적인 내용을 이해하셔야 합니다. ARM사에서 나온 ARM technical reference 다 읽으시고요.. 그다음에는 Assembler language guide 읽으시면 일반적인 ARM은 이해가 된 겁니다.  제가 위에서 대충 설명드린 내용은 위 두 도큐먼트에 아주 자세하게 나옵니다. 아마 여기 자료실에도 올려져 있을 겁니다. 

그 다음은 board-specific한 내용을 이해해야 합니다. 예를 들면 보드상의 메모리 (DRAM/SRAM/Flash의 물리적 시작 주소/사이즈) .. serial이나 ethenet 칩같이 기본이라고 생각되어지는 하드웨어들에 대한 주소/정보/spec 등등...  이 시점에서는 하드웨어 엔지니어의 도움/설명이 필요하겠죠.

그리고나서, 소스 분석 시작하세요.

김형태

2009.04.20 18:23:28
*.187.60.171

정말 공부 해야할게 산더미군요..ㅠㅠ

열심히 노력해야겠습니다..

조언 감사드립니다^^

List of Articles
번호 제목 글쓴이 날짜 조회 수
428 clock 변경 관련 질문 [6] 최영진 2009-04-23 890
427 6410 보드 카메라 & 무선랜 관련 세미나 질문드려요 ^-^; [2] 서덕재 2009-04-22 852
» Bootloader 기초적인 질문.. [4] 김형태 2009-04-17 1008
425 g.711 포맷의 음성파일2개 합치는 방법 [4] 최강산 2009-04-17 1132
424 Bootloader 분석중... [3] 김형태 2009-04-17 1051
423 RealView Multi-ICE에 대해서... [5] 김형태 2009-04-14 1161
422 USB 와 YAFFS2 파일시스템 문의 [2] 한진희 2009-04-12 1605
421 kernel 2.6 uart device driver관련질문 [4] 문철민 2009-04-10 953
420 compile error 좀 부탁드립니다. [2] 최영진 2009-04-09 704
419 ( aESOP S3C6410 보드) LMS350DF01 LCD 및 터치 스크린 구매관... [2] 김성도 2009-04-09 1955
418 임베디드리눅스 GUI 설계쪽 경험자분께 문의드립니다 [3] 장석원 2009-04-09 1128
417 6410 칩 수급 관련해서 질문드립니다. [1] 홍경동 2009-04-06 635
416 TFT-LCD 16bit 모드상에서의 문제 [3] 한석준 2009-04-04 879
415 [재질문]u-boot의 pxa255소스에서 16bit bitmap 이미지 지원을 안하... [2] 한석준 2009-03-30 824
414 virtualbox linux apt-get timeout [2] 오태호 2009-03-30 1337
413 몇차보드인걸까여?; [2] 서승원 2009-03-28 982
412 FW에서 I2C 제어하기 - 2탄 [2] 최현정 2009-03-27 2257
411 기존의 u-boot소스에서 16bit bitmap 이미지 지원을 안하나요? [3] 한석준 2009-03-27 1191
410 FW에서 I2C 제어하기 [2] 최현정 2009-03-27 1344
409 이더넷 MAC내장한 CPU중에 제일 가격이 싼것은? [3] 민세홍 2009-03-27 1081

사용자 로그인