← Documents Documentation/devicetree/bindings/firmware/coreboot.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

Coreboot Firmware Information

Coreboot table과 CBMEM 위치를 kernel에 전달하는 바인딩입니다.

Source pathDocumentation/devicetree/bindings/firmware/coreboot.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

coreboot.txt:1-33

두 memory region의 순서와 magic identifier를 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 COREBOOT firmware information
2
3 The device tree node to communicate the location of coreboot's memory-resident
4 bookkeeping structures to the kernel. Since coreboot itself cannot boot a
5 device-tree-based kernel (yet), this node needs to be inserted by a
6 second-stage bootloader (a coreboot "payload").
7
8 Required properties:
9 - compatible: Should be "coreboot"
10 - reg: Address and length of the following two memory regions, in order:
11 1.) The coreboot table. This is a list of variable-sized descriptors
12 that contain various compile- and run-time generated firmware
13 parameters. It is identified by the magic string "LBIO" in its first
14 four bytes.
15 See coreboot's src/commonlib/include/commonlib/coreboot_tables.h for
16 details.
17 2.) The CBMEM area. This is a downward-growing memory region used by
18 coreboot to dynamically allocate data structures that remain resident.
19 It may or may not include the coreboot table as one of its members. It
20 is identified by a root node descriptor with the magic number
21 0xc0389481 that resides in the topmost 8 bytes of the area.
22 See coreboot's src/include/imd.h for details.
23
24 Example:
25 firmware {
26 ranges;
27
28 coreboot {
29 compatible = "coreboot";
30 reg = <0xfdfea000 0x264>,
31 <0xfdfea000 0x16000>;
32 }
33 };
34

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Coreboot firmware 정보

1-23

이 device tree node는 memory에 상주하는 coreboot bookkeeping structure의 위치를 kernel에 전달합니다. Coreboot 자체는 아직 device-tree 기반 kernel을 boot할 수 없으므로 second-stage bootloader인 coreboot `payload`가 이 node를 삽입해야 합니다.

필수 `compatible`은 `coreboot`입니다. `reg`에는 두 memory region의 address와 length를 순서대로 넣습니다. 첫 번째는 coreboot table로, compile time과 run time에 생성된 여러 firmware parameter를 담은 가변 크기 descriptor 목록입니다. 첫 4 byte의 magic string `LBIO`로 식별하며 자세한 형식은 coreboot의 `src/commonlib/include/commonlib/coreboot_tables.h`에 있습니다.

두 번째는 CBMEM 영역입니다. Coreboot가 상주 data structure를 동적으로 할당하는 아래 방향으로 성장하는 memory region입니다. Coreboot table을 member로 포함할 수도 있고 포함하지 않을 수도 있습니다. 영역의 가장 위쪽 8 byte에 있는 magic number `0xc0389481`의 root node descriptor로 식별하며 자세한 형식은 coreboot의 `src/include/imd.h`에 있습니다.

Coreboot reg memory 영역
IndexRegion식별 방법
0Coreboot table첫 4 byte의 `LBIO`
1CBMEM최상위 8 byte의 root descriptor `0xc0389481`

`reg`에 기록하는 두 영역의 순서와 식별자를 정리합니다.

Coreboot 예제

24-33

예제 `firmware` node 아래의 `coreboot` node는 coreboot table과 CBMEM 영역을 각각 `reg` entry로 제공합니다. 두 영역은 같은 base address에서 시작할 수 있습니다.

firmware {
        ranges;

        coreboot {
                compatible = "coreboot";
                reg = <0xfdfea000 0x264>,
                      <0xfdfea000 0x16000>;
        }
};