부트로더, 커널, 장치 트리, 램디스크에서 부팅 가능한 ELF 생성

부트로더, 커널, 장치 트리, 램디스크에서 부팅 가능한 ELF 생성

저는 Linux 커널 프로그래밍이 처음이고 부팅 가능한 이미지를 구축하는 마지막 단계에 대해 매우 혼란스러워합니다.

일부 배경 지식을 위해 JTAG를 통해 전체 운영 체제 이미지를 Virtex 5 FPGA 내부의 강화된 PPC440 프로세서에 업로드해 보았습니다. 우리는 더 이상 사용되지 않는 운영 체제에서 Xilinx 맞춤형 Linux 커널로 전환하고 지속적인 지원을 제공하고 있습니다. 이 업로드에 필요한 파일은 부트로더, 커널, 장치 트리 및 램디스크 이미지로 구성된 전체 운영 체제와 해당 애플리케이션을 포함하는 ELF입니다.

ELDK를 사용하여 구축하는 데 성공했으며 올바른 파일을 생성하고 프로세서에서 실행됩니다. 그러나 ELDK에 대한 지원은 제한적이며 이전 라이브러리( libc예: 2.6) 및 노후화 유틸리티를 포함합니다. 새로운 툴체인과 프로그램을 구축하는 것이 유지 관리 측면에서 더 좋습니다.

몇 단계를 거쳐 우리는 ELF의 핵심 구성 요소로 간주되는 것을 구축할 수 있습니다. 우리는 부트로더용 u-boot, 커널 zImage, 컴파일된 장치 트리 blob, 필요한 모든 라이브러리가 포함된 램디스크 이미지를 가지고 있습니다.

이해하는데 어려움이 있는 것은 파일로 패키지하는 방법입니다. u-boot에는 mkimage마지막 세 항목을 연결하고 u-boot 프롬프트에서 단일 명령으로 해당 항목을 로드할 수 있는 유틸리티가 포함되어 있지만 ELDK는 다음을 포함하는 단일 파일을 생성하므로 분명히 네 개 항목을 모두 연결하는 것이 가능합니다. ) 모든 것 단일 파일 안에 있는 조각입니다.

내가 여기서 무엇을 놓치고 있는지 아는 사람 있나요? 이 일련의 단계는 단순합니까, 아니면 우리가 궤도에서 벗어나 있습니까?

감사해요!

답변1

나는 이 질문에 답할 수 있게 되었습니다. 리눅스 커널을 만들 때 다음과 같이 대상을 지정하면 됩니다 simpleImage.initrd.[device-tree-name]. 이는 Makefile이 zImage, 램디스크 이미지(이름을 지정 ramdisk.image.gz하고 에 배치 해야 함 arch/[your-arch]/boot) 및 dts(이름을 지정 device-tree-name하고 에 배치 해야 함 arch/[your-arch]/boot/dts)를 래핑하도록 지시합니다. 또한 make 중에 파일을 자동으로 컴파일합니다 .dts..dtc

이 출력 ELF에는 부트로더가 포함되어 있지 않습니다. 이는 별도로 처리해야 합니다.

관련 정보