2014-04-05 3 views
0

커널 커널 개발자는 시작 지점을 커스터마이징 할만큼 경험이 풍부하기 때문에 main이 리눅스 커널의 시작점이 아니라는 것을 알고 있습니다.리눅스 커널의 시작점에 관해서

는 다음과 같은 고려 :

qemu-system-arm -M versatilepb -m 128M -kernel arch/arm/boot/uImage -initrd rootfs.img -append "root=/dev/ram rdinit=/sbin/init" -dtb "versatile-pb.dtb" 

위, 나는 이제 처음 실행 커널에있는 파일, 메인 라인 커널의 입력으로 커널 이미지, 장치 트리, rootfs.img을 공급했다. 그것이 초기화 파일이라면 누군가 커널 이미지 내에서 초기화 코드를 트리거 할 것입니다. 그렇다면 어떤 파일이 해당 작업을 수행합니까? 제발 조언.

참고 : 명확한 답변, 즉 정확한 아키텍처 아키텍처를 찾고 있습니다.

+0

http://kernelnewbies.org/을 보시기 바랍니다. –

+2

'main'은 존재하는 운영 체제의 모든 이진 파일의 진입 점이 아닙니다. 이것은 시스템 특정 부트 스트랩 코드에 의해 호출되는 함수입니다. C++과 gcc 확장자를 사용하면'main'이 호출되기 전에 많은 일을 할 수 있습니다! –

+1

찾고있는 파일이 실제로 명확하지 않습니다! (커널은 프로세스가 아닙니다.) 초기화를 처리하는 첫 번째 C 함수 (그것은 글로벌 구조를 수행하는 C 런타임 함수와 비슷하게 작동합니다. 사용자 영역에서) 또는 실제 엔트리 포인트 (어셈블리에서 필연적으로 구현되는)? –

답변

2

리눅스 커널의 진입 점은 다른 ELF 바이너리와 마찬가지로 _start입니다. ARM의 경우, arch/arm/boot/bootp/init.S에 정의되어 있습니다.

+0

정확히 답변을 요청합니다. 실제로 도움이 될지 확신 할 수 없습니다. 다른 코멘트에서 언급했듯이, 여기에서 무엇이든 찾을 수있는 길은 _ 길 _ 방법입니다. –

+0

커널에 태그가 있습니다. -> kernel_start : ZImage에 접근하려고합니까? 이 어셈블리는 어떻게됩니까? 지금 당장 당신이 설명 할 수있는 긴 과정 인 이유를 이해합니다. 적절한 문서를 참조하십시오. –

관련 문제