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

안녕하세요.

 

안드로이드 디바이스 드라이버 모델 및 카메라 관련 공부중인데요.

 

그중에서 Board file 관련해서 궁금한점이 있어서요

 

커널이 시작되고,Start_kernel()

 

쭉 따라내려가다 보면, Setup_arch()라는 곳에서 분명히 보드 파일을 불러들어와서

 

MACHINE_START 로 Macro 된곳에서 machine 보드 init 파일을 실행해주잖아요.

 

그런데, 이 파일 예를들어 board_s3c_xxxx.c 에 들어가보면,

 

I2C및 여러가지 Bus들을 초기화 해주는 부분이 있어요, 그리고 Platform Device로 등록을 해주던데

 

제가 알기론 분명히 Devices,Bus,Class 등 및 Platform Device Bus는 Start_kernel()의 Rest_init()에서

 

초기화 해주는 걸로 알고 있거든요.

 

 

 

즉, 질문을 줄여보자면, Rest_init에서 Platform Bus를 등록하기 이전에 Platform Device 등록이 가능하냐는 것이구요.

 

하나 더 질문하고 싶은게, Platform Bus의 경우Bus뿐만 아니라 Device로도 등록이 되던데 왜이러는지 아시는 분이 있으시다면

 

좀 알려주셨으면 합니다.

 

Linux Device Driver Model은 정말 어렵군요... Kobject 쪽은 손도 못대겠어요..;;


고도리

2011.07.03 00:12:06
*.200.239.234

kernel device model의 요지는


"모든 디바이스와 드라이버는 반드시 bus에 존재해야 한다"입니다. 이 말을 제대로 설명해 놓은 문서가 없어서 문제지요...^^

funmoney

2011.07.04 20:52:26
*.169.251.167

Q : Rest_init에서 Platform Bus를 등록하기 이전에 Platform Device 등록이 가능하나 ?

A : MACHINE_START ~~~ MACHINE_END 사이의 구조체는 ./linux/arch/arm/kernel/vmlinux.lds 를 linker 가 참조하여

       MACHINE_START ~~~ MACHINE_END 사이코드 내용을 __initcall_start ~~ __initcall_end 사이의 주소영역에 위치

       됩니다. 즉, ./linux/arch/{target}/mach-xxxx.c 나 board-xxxx.c 등의 파일에 이는 MACHINE_START ~~~ MACHINE_END

       은 그 코드를 실행하는 것이 아니라 그 구조체 내용이 우치할 memory section 을 정의한 것입니다.

 

       그렇다면 MACHINE_START ~~~ MACHINE_END 사이에 등록되는 .init_machine 의 펑션포인터는 언제 실행이 되는냐?

       이것은 ./linux/init/main.c 에서 start_kernel() --> kernel_start() thread 내부에서 __init_start ~ __init_end 사이의 memory section

       에 등록된 function pointer 들을 실행할 때 함께 실행됩니다.

 

       즉, .init_machine 이 실행되기 이전이 start_kernel() 이 이미 질생되면 device 파일을 등록할 준비가 끝나 있는 것입니다.

 

Q : Platform Bus의 경우Bus뿐만 아니라 Device로도 등록이 되던데 왜이러는지 ?

A : bus 는 단독으로 존재할 수 없습니다. 즉, Master(Host) 라는 device 가 있어야지만 bus 가 존재합니다.

       즉, bus 를 device 와 혼동하면 않됩니다. bus 는 C 코드상에 존재하는 논리적인 개념에 불과합니다.

       즉, Bus 의 Master device 가 존재하지 않으면 bus 는 존재의 의미가 없습니다.

       다시말해서, bus 에 데이터를 실어 보내려면 Bus 의 host device 를 거져야 합니다. 따라서 bus 의 host device 를 통하여

       bus 에 데이터를 보내려면 당연히 그와 맵핑된(얼라이어싱된) device file 과 device driver 가 있어야 합니다.

      

        이러한 이유로 bus 와 bus에 대한 master deivce 를 별개로 생할 수 없습니다.

 

 

List of Articles
번호 제목 글쓴이 날짜 조회 수
4728 마스터 볼륨이란? [3] 꺼북이 2011-07-06 1255
4727 uboot에서 yaffs랑 MoviNAND에 동시에 write 하려면? [2] 텡구 2011-07-06 1012
4726 안드로이드 recovery system utility font 변경 질문드려요 이시우 2011-07-06 685
4725 블루투스 with HCI 새희망 2011-07-05 706
4724 예전에 등록되었던 자료를 찾고 있습니다. [2] jameskody 2011-07-05 488
4723 로비/인터폰 구현시 적절한 레퍼런스류 및 구조 조언 부탁합니다 [2] 마은빈 2011-07-05 1549
4722 [질문 수정했음] RTC 드라이버 포팅 관련 .... file [5] 장석원 2011-07-05 1524
4721 u-boot와 kernel MACH_TYPE에 대해서 질문 드립니다. [8] 데카 2011-07-05 1338
4720 android 부팅메시지 관련 질문드립니다. [1] 죠니주니 2011-07-05 529
4719 i2c 연결에 관해 질문드립니다. [2] 한승우 2011-07-05 513
4718 Platform Bus/Device/Driver에 대해서 간략히 정리해 보았습니다. [1] 코와붕과 2011-07-05 2024
4717 커널 패닉시 콘솔에 출력 되는 패닉 메시지에 관한 질문 [1] k0cool 2011-07-04 579
4716 u-boot용량이 늘어날때 [1] 다크썩흘 2011-07-04 501
4715 Linux kernel L2 캐쉬 policy [2] 양파링 2011-07-02 639
4714 상용단말 디바이스 퍼미션 문제 [1] kwak 2011-07-02 489
4713 진저브레드에서 마우스 커서 문제 [1] 가족사랑 2011-07-01 1036
» 리눅스 Boot Sequence 관련해서 Setup_arch()와 rest_init() 질문!... [2] 코와붕과 2011-07-01 868
4711 안드로이드 루트이미지에서 기본 화면 방향 설정 [2] 김태영 2011-07-01 1031
4710 S3C64X0 예전 계시물(자료)는 어떻게 구하죠? jameskody 2011-07-01 521
4709 커널패닉을 LCD에 출력하기 질문.. k0cool 2011-07-01 469

사용자 로그인