어떤 장치 트리 Blob (DTB 파일)을 사용 중인지 어떻게 알 수 있습니까?


9

Yocto Linux를 실행하는베이스 보드에 연결된 '컴퓨터 온 모듈'내장 TS-4900과 함께 작업하고 있습니다. U-Boot를 사용하여 시작하고 아마도베이스 보드 모델을 기반으로 시작할 올바른 dtb 파일을 선택하고 올바른 파일을 찾지 못하면 내 모듈의 '일반'파일로 돌아갑니다.

그러나 어떻게 / 어디가 올바른 것을 결정합니까? 어떤 .dtb가 사용되었는지 또는 어떤 것을 사용해야하는지 어떻게 알 수 있습니까?

아래는 U-Boot의 부팅 메시지입니다.

U-Boot 2014.10-g3ac6ec3 (Jan 29 2015 - 17:20:15)

CPU:   Freescale i.MX6SOLO rev1.1 at 792 MHz
Reset cause: POR
Board: TS-4900
Revision: C
       Watchdog enabled
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected N25Q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   using phy at 7
FEC [PRIME]
Press Ctrl+C to abort autoboot in 1 second(s)
(Re)start USB...
USB0:   Port not available.
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
No storage devices, perhaps not 'usb start'ed..?
Booting from the eMMC ...
** File not found /boot/boot.ub **
** File not found /boot/imx6dl-ts4900-13.dtb **
Booting default device tree
42507 bytes read in 196 ms (210.9 KiB/s)
118642 bytes read in 172 ms (672.9 KiB/s)
ICE40 FPGA reloaded successfully
4609784 bytes read in 337 ms (13 MiB/s)
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.10.17-1.0.0-technologic+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4609720 Bytes = 4.4 MiB
   Load Address: 10008000
   Entry Point:  10008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 18000000
   Booting using the fdt blob at 0x18000000
EHCI failed to shut down host controller.
   Loading Kernel Image ... OK
   Using Device Tree in place at 18000000, end 1800d60a

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0

(Kernel startup commences...)

답변:


7

나는 이것에 늦었지만이 스크립트를 구현했으며 인터넷 검색 엔진을 사용하여 이것을 찾는 사람이라면 이것을 해결할 것입니다.

이 컴퓨터 온 모듈은 거의 모든 선반 TS 또는 맞춤형베이스 보드에 장착 할 수 있으며 사용자가 사용 된 장치 트리를 조정할 필요없이 자동으로 작동하기를 원했습니다. 우리는베이스 보드의 고유 ID를 가진 모든 캐리어 보드에 8 입력 시프트 레지스터를 가지고 있습니다. TS-8550에서 이것은 0x13입니다. http://wiki.embeddedarm.com/wiki/TS-4900#Baseboard_ID

따라서 U-Boot에서 bbdetect추가 한 명령은이 시프트 레지스터에 연결된 GPIO를 읽고 $ baseboardid 환경 변수를 설정합니다. U-Boot는 먼저에서베이스 보드 특정 장치 트리를로드하려고 시도합니다 /boot/imx6${cpu}-ts4900-${baseboardid}.dtb. 하나를 찾지 못하면에서 대체 장치 트리를 사용합니다 /boot/imx6${cpu}-ts4900.dtb. 후자의 파일에는 모든 캐리어 보드에서 작동하는 정상 기본값이 있습니다. TS-8550에는베이스 보드 특정 캐리어 보드가 필요하지 않으므로 표준 장치 트리로 돌아가서 계속 부팅됩니다.

원래 질문에 대답하기 위해

cat /proc/device-tree/model

모든 장치 트리는 장치 트리에서 모델이 약간 다릅니다.
예를 들어 안전한 폴백은 다음과 같습니다.

  • "Technologic Systems i.MX6 쿼드 TS-4900 (기본 장치 트리)"

또는 특정 장치 트리가있는 TS-TPC-8390 캐리어 보드 :

  • "Technologic Systems i.MX6 쿼드 TS-4900 (TS-TPC-8390)"

8

U-Boot는 boot 명령을 실행할 때 커널의 메모리 주소와 장치 트리 BLOB의 메모리 주소를 제공합니다. 따라서이 명령 전에 이러한 파일을 메모리에로드해야합니다. 제공 한 메시지에 따라 eMMC / SD 카드에서 두 개의 파일을로드하지 못했습니다.

/boot/boot.ub
/boot/imx6dl-ts4900-13.dtb

이러한 파일이 없거나 경로가 잘못되었거나 장치가 잘못되었을 수 있습니다. 파티션이 U-Boot load 명령에 제공되었습니다. 어쨌든 명령이 실패합니다. 이 시점에서 부트 로더는 부트 로더 자체와 동일한 매체에 저장된 "기본"장치 트리를로드하려고합니다.

무슨 일이 일어나고 있는지 정확히 알아 보려면 부트 로더에서 부팅 프로세스를 중단하고 U-Boot 명령 프롬프트에 액세스하십시오. 여기에서 다음을 입력 할 수 있습니다.

printenv

그러면 U- 부트 환경 변수가 인쇄됩니다. 이러한 변수 중 다수는 다른 변수를 참조합니다. 이러한 변수 중 일부는 종종 스크립트처럼 실행되므로 부팅 스크립트, 커널 및 fdt로드 스크립트 등을 볼 수 있습니다. 부팅 순서를 파악하려면 bootcmd (또는 이와 유사한 것) 라는 변수를 찾으십시오 . 이것은 일반적으로 부팅시 궁극적으로 실행되는 것입니다. 이 시점부터 여러 변수를 통해 부팅 순서를 추적해야하지만로드 명령을 사용하여 FDT를 메모리로로드하는 위치를 확인해야합니다. printenv 의 출력을 게시하려면 여기에 사용 된 정확한 논리를 식별 할 수 있습니다.


1
감사. 초기 시작 스크립트를 포함하는 하나의 env 변수 인 bootcmd 는 내가 필요한 것입니다.
SF.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.