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

linux/arch/arm/mach-at91/ 폴더에 있는 board-sam9m10g45ek.c 파일은 무엇에 쓰이는 함수들인가요?

제가 이 위치에 있는 board-sam9m10g45ek.c 를 함 살펴보니..

 

왠지 펌웨어 하던 시절에 제가 짰던 시작 코드 부분인듯해서요...왠지 죽 흘터보니..보드의 설정등에 쓰이는 함수들의

모임인듯 한데요...여기에 있는 함수들이 보드 셋업 부분이 맞나요?

 

그리고 만약 셋업 부분이라면 이 함수들을 어딘가에서는 사용해야 할 텐데 어디서 어떤 함수에서 사용되는 것인가요?

 


freestyle

2012.03.09 03:47:35
*.33.89.239

* 잘못된 내용이 포함되었을 수 있습니다. 참고만 하세요.


살펴보신 바와 같이 해당 보드에 대한 설정(레지스터 세팅 등)을 해주는 부분입니다.


호출과정의 실마리를 찾기 위해서는 파일 가장 아래의 다음 부분을 보셔야 합니다.


MACHINE_START(AT91SAM9M10G45EK, "Atmel AT91SAM9M10G45-EK")

    /* Maintainer: Atmel */

    .timer      = &at91sam926x_timer,

    .map_io     = at91_map_io,

    .init_early = ek_init_early,

    .init_irq   = at91_init_irq_default,

    .init_machine   = ek_board_init,

MACHINE_END



MACHINE_START, MACHINE_END는 arch/arm/include/asm/mach/arch.h에 선언된 매크로로,

struct machine_desc 구조체 변수를 선언해 .arch.info.init 영역(arch/arm/kernel/vmlinux.lds.S)에 저장해 줍니다. 


(struct machine_desc 구조체의 선언은 arch/arm/include/asm/mach/arch.h에 있습니다)


부팅 과정에서 이 구조체의 멤버 변수로 등록된 함수 포인터를 따라가 함수를 실행시켜 주는 형태인데,

예를 들어 보면 

    .init_early = ek_init_early,에서 .init_early에 등록한 함수 포인터는

arch/arm/kernel/setup.c의 setup_arch에서 호출해주고,

setup_arch는 init/main.c의 start_kernel에서 호출해 줍니다.

start_kernel은 arch/arm/kernel/head-common.S에서 호출해 주고요.



장황하게 설명했는데 정리하면

'매크로 확장이 되면 함수 포인터 등을 멤버로 하는 구조체 변수가 선언되고,

이렇게 등록된 함수들은 초기화 과정(init/main.c)에서 초기화 함수에 의해 각각 호출되어 해당 보드의 특성에 맞는 초기화를 수행한다'

입니다.

고도리

2012.03.09 04:57:27
*.200.239.234

보통 Machine code라고 불리우는 코드입니다.


ARM에서 Machine은 Board를 지칭한다라고 보시면 됩니다.

거기 있는 함수들은 


커널 start시 setup_arch() 함수에서 특정 함수 포인터로 세팅이 되고, 각 단계별 함수에서 초기화시 호출이 됩니다.

초기화 코드라고 보시면 되고, 호출되는 순서는 각 단계별 함수를 봐야 알 수 있습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
5248 u-boot에서 커널을 로드 하지 못할 때 (can't get kernel image!)는... file [3] 혜민아빠 2012-03-16 2378
5247 LVDS에 관한 문의입니다 [3] 박영호 2012-03-15 1348
5246 램을 늘리려 하는데요. [4] 현쓰 2012-03-15 1399
5245 mtd partition을 보드 셋업 코드에서 어떻게 나누는 것이 맞는 것... file [4] 혜민아빠 2012-03-14 1470
5244 ICS S4210 (type password to decrypt storage?) 문제... file [4] 아명 2012-03-14 1759
5243 커널에 드라이버를 포함했을 때는 동작하고 모듈 형태로 할 때는 동... 혜민아빠 2012-03-13 1075
5242 directfb + gtk2 + webkit 1.2.7 (without X11)관련 문의 [3] laconicblue 2012-03-13 1520
5241 USB 3.0 관련 질문 [3] 신현호 2012-03-12 1560
5240 안드로이드 플렛폼 질문... [2] 하루천재 2012-03-12 1392
5239 exynos4210(V310)의 u-boot에서 GPY0CON의 주소를 모르겠네요. [4] 훌러덩 2012-03-10 1817
5238 커널에 드라이버를 포함했을 때 인터럽트 함수를 사용했을 때 커널 ... [6] 혜민아빠 2012-03-09 2113
5237 분석과 포팅책을 보고있는데 질문하나드립니다. [3] daem0n 2012-03-09 1389
5236 Origen보드용 새 SD카드 사용하기 문의 [2] 다콩 2012-03-09 1642
» linux/arch/arm/mach-at91/ 폴더에 있는 board-sam9m10g45ek.c 파일은 무엇... [2] 혜민아빠 2012-03-09 1792
5234 patch software 버전에 따라 patch가 제대로 되지 않을 수 있나요... [2] 혜민아빠 2012-03-08 1304
5233 V310에서 u-boot쪽에서 SROM_CSn[1]을 선택 하려고 하는데요. memo... [1] 훌러덩 2012-03-08 1034
5232 V210 JTAG 추천 부탁 [3] 박명대 2012-03-07 1373
5231 임베디드 리눅스를 보드에 타겟팅 했을 때 부팅이 되지 않는 이유는... [2] 혜민아빠 2012-03-07 1668
5230 build.prop 생성방법이 궁금합니다. [1] yama 2012-03-04 1475
5229 출력에 대해서 궁금해서 질문 올립니다. [7] 하루천재 2012-03-03 1148

사용자 로그인