장치 트리 Blob(바이너리)

장치 트리 Blob(바이너리)

우리는 아치 리눅스를 포팅한 armv7(freescale IMx6DL) 보드를 가지고 있습니다. iuf를 빌드한 후 모든 주변 장치, 버스 등을 포함하지 않는 .dts 파일이 표시됩니다.

dts(소스) 파일이 있는 경우 .dtb(장치 트리 blob)를 생성하는 방법을 알려줄 수 있는 사람이 있나요? 주어진 Makefile은 단독으로 작동하지 않습니다. dtb 파일은 빌드 시 생성됩니다.

dts 파일이 있는 경우 dtb 파일을 별도로 생성할 수 있나요?

답변1

예, Makefile이 수행하는 모든 작업은 수동으로 수행할 수 있습니다. 커널 장치 트리 소스의 경우 장치 트리 언어 및 컴파일러가 이를 지원하지 않더라도 C 전처리기 명령을 사용합니다.

커널이 수행하는 작업(및 사용자가 수행해야 하는 작업)은 다음과 같이 장치 트리 소스 코드를 C 전처리기에 전달한 다음 장치 트리 컴파일러에 전달하는 것입니다.

cpp -Iinclude -E -P -x assembler-with-cpp imx6dl-boardname.dts | dtc -I dts -O dtb -o imx6dl-boardname.dtb -

(이것은 제가 직접 사용하는 명령입니다. 분명한 설명은 다음과 같습니다.보드 이름내 하드웨어를 반영하도록 변경되었습니다. Makefile 규칙과 전처리기 오류 메시지를 기반으로 이를 함께 엮었습니다.

전처리기 매개변수:

  • -Iinclude커널 장치 트리 소스 #include <dt-bindings/interrupt-controller/irq.h>는 주로 arch/arm/boot/dts/include.

  • -Ecpp전처리만 나타냅니다. 명령을 사용할 때 전처리가 필요한지 확실하지 않습니다.

  • -P장치 트리 컴파일러를 혼란스럽게 하는 소스 줄 번호 주석을 비활성화합니다.

  • -x assembler-with-cpp전처리기가 특정 언어 모드에서 실행되도록 강제합니다. 이는 전처리기 지시문과 동일한 파일에 있는 장치 트리 구문으로 인해 혼동되지 않는 데 도움이 된다고 생각합니다. 커널 Makefile에 있기 때문에 사용하고 있습니다.

  • imx6dl-boardname.dts자리 표시자이므로 최상위 장치 트리 소스 파일의 이름으로 변경해야 합니다.

장치 트리 컴파일러 매개변수:

  • -I dts입력 형식을 텍스트 장치 트리 소스로 지정
  • -O dtb장치 트리 바이너리 Blob 생성을 지정합니다.
  • -o imx6dl-boardname.dtb출력이 있을 파일 이름을 정의합니다. 원하는 DTB 파일 이름으로 바꿔야 합니다.
  • -입력 파일이 다음과 같음을 나타냅니다.stdin

관련 정보