저는 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에는 부트로더가 포함되어 있지 않습니다. 이는 별도로 처리해야 합니다.