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

리눅스 말고 


그냥 bare-metal 코드로요. 보드는 exynos4412에요.


지금 u-boot에서 리눅스 대신 main()만 만들어두고 그리로 PC값 점프시켜서 printf 출력되게 해놨거든요.

MMU설정은 u-boot의 설정을 그대로 쓰고 있어요.


ARM공식 싸이트 예제 보면 bare-metal code로 secondary cpu를 WFI 걸어두고 CPU0가 main()에서 


send_sgi로 깨우더라구여. 그런데 u-boot는 secondary cpu들을 부팅시킨 후


lowlevel_init.S 파일의 "nscode_base"로 오게해서 WFE를 걸어두네요. 

https://github.com/hardkernel/u-boot/blob/odroid-v2012.07/board/samsung/smdk4x12/lowlevel_init.S#L306


그런데 ARM 문서를 보면 리셋시에는 모든 코어가 0번지 부터 fetch를 시작하는 것으로 나오고 예제를 봐도 HW reset이 되면 일단 모든 코어가 reset벡터부터 실행되다가 cpu id를 읽고나서 자신이

secondary면 WFI를 걸고 대기하도록 되어 있는데요.


그래서 일단 secondary core가 살아났는지 확인하려고 u-boot에서 secondary가 WFE를 거는 인스트럭션 실행하기 바로 전에 보드의 LED를 off하는 코드를 심어봤는데 LED반응이 없네요. 이부분에 전역변수 넣고 +1 하게 한 뒤 u-boot 프롬포트가 떴을 때 내장 명령어 추가로 해당 변수값 출력해봐도 system.map상의 변수 주소는 일치하는데 값은 0이에요.

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

ldr r1,=0x11400080

mov r2,#0x3

str r2,[r1]

WFE

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

 linux 의 boot_secondary 함수를 보면 

198 #ifdef CONFIG_ARM_TRUSTZONE

199         if (soc_is_exynos4412())

200             exynos_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0);

와 같이 HW적인 리셋을 다시 하도록 되어 있는 것 같은데
그럼 u-boot에서는 처음 부팅됐을 때 secondary는 어디서 뭐하고 있는 걸까요.

ARM example은 전원이 인가되면 4코어 모두 동작을 시작해서 cpu id 확인하는 부분부터 서로 다른 부분으로
분기하도록 되어 있는데,

u-boot의 WFE호출 직전에  코드를 넣어보면 아무 반응이 없고. 

리눅스 없이 secondary 코어 깨우는법 조금이라도 아시는분 힌트 부탁드려요.

유희재

2014.09.10 21:07:56
*.32.72.57

 ldr  r1, =START_ADDR  

@exynos는 다른 코어들이 iRom에서 Exception Entry 값을 받을때 까지 루프로 돌고 있었던걸로 기억합니다.

ldr  r0, =V_ADDR  

@Exception Entry 넣어 주시면 됩니다. 값을 넣어주면 분기 해서 실행 될껍니다.

 STR  r0, [r1]
 SEV


List of Articles
번호 제목 글쓴이 날짜 조회 수
6128 Nand 파일 시스템 깨지는 문제 문의 [3] 카보 2014-10-23 1393
6127 uart register 에대한 iowrite32 쓰기가 되질 않습니다. [2] erdos 2014-10-22 1158
6126 양산할 때 MAC address 방법 문의입니다. [2] 열심히 2014-10-22 1628
6125 ubuntu 64bit 관련 질문 [2] blue0sky 2014-10-21 1085
6124 혹시 Kernel에서 context switching 관려한 hz를 바꾸려면 어디를... [2] 혜민아빠 2014-10-16 1080
6123 U-Boot와 Kernel에서 NAND Bad block scan 관련 질문 [2] SpecialCase 2014-10-09 1213
6122 Samsung프린터나 Canon 등 다른 제조사의 프린터도 hplip같은것이 있... [2] xoduddk123 2014-10-07 1254
6121 Device Driver를 설계 할 때...(probe함수에 대해서) [1] 혜민아빠 2014-10-02 1167
6120 /lib/libc.so.6 GLIBC_2.15 not fount가 나오는데요 libc 다른버전... [1] biokk 2014-09-30 1346
6119 사용중인 SDIO(mmc)의 mode를 알 수 있는 방법이 있나요? [1] xoduddk123 2014-09-27 1260
6118 S5PV210 MEMCONTROL 레지스터 설정 관련 질문 [2] 김진만 2014-09-25 914
6117 리눅스(커널)에서 지원하는 웹캠이 따로 있는건가요? 같은소스에서도 ... [1] ice179 2014-09-24 1008
6116 NAND bad block 관련 질문 드립니다. [3] 엉금엉금 2014-09-23 1260
6115 V4L2에서 포멧설정이 여러종류가 있는데요 설정된 포멧으로 데이터를... [2] ice179 2014-09-16 1237
6114 arm 바이너리가 실행이 안되는데요 확인좀 부탁드립니다. [1] ice179 2014-09-11 1157
» u-boot에서 WFE 걸어둔 secondary core들 깨우는법 아시는분(corte... [1] 쁘앙쁘앙 2014-09-06 1461
6112 SC54412ACF-A040 과 SC54412ACD-A040 의 정확한 차이를 알고 있... [3] 혜민아빠 2014-09-05 1314
6111 Exynos4412 SDIO3문의 [1] funlife 2014-09-03 1235
6110 com.google.android.maps.jar는 어디서 얻는 것인가요??? [2] 천동이 2014-09-02 52270
6109 Root file system [2] JinJi 2014-08-26 1265

사용자 로그인