← Documents Documentation/firmware-guide/acpi/chromeos-acpi-device.rst GitHub 원문 ↗

Linux 6.18.37 · Firmware

Chrome OS ACPI Device

Chrome OS ACPI 장치의 스위치·펌웨어·부팅·GPIO·검증 데이터 인터페이스 전문 번역입니다.

Source pathDocumentation/firmware-guide/acpi/chromeos-acpi-device.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약·해설

chromeos-acpi-device.rst:1-362

Chrome OS ACPI 장치는 `GGL0001`·`GOOG0016`으로 식별되며, 메서드마다 스위치 상태, 펌웨어 버전, 부팅 모드, GPIO 배선, CMOS 위치, 플래시맵 주소와 검증 데이터를 반환한다. 메서드는 모두 인수가 없지만 결과 형식은 정수, 문자열, 버퍼, 단일·중첩 패키지로 서로 다르다.

구현에서 특히 주의할 부분은 `CHSW`의 예약 비트, `BINF` 예약 필드의 고정값 `0x100`, GPIO 극성과 중첩 패키지 순서, VBNV 오프셋의 기준점, 0일 수 있는 MECK 버퍼다. 문자열은 모두 종료 널과 길이를 검증하고, 열거값의 예약 범위를 그대로 유지해야 한다.

지원 여부는 문서의 개요 표만으로 단정하지 않고 `MLST` 결과를 기준으로 판단한다. 현재 규격의 MLST에는 개요 표에서 빠진 `MECK`도 포함되며 `MLST` 자신은 포함되지 않는다.

Chrome OS ACPI 데이터 경로
GGL0001·GOOG0016 장치 식별MLST로 지원 메서드 확인메서드별 정수·ASCIIZ·버퍼·Package 수신비트·열거값·필드 순서와 예약값 검증부팅 상태·하드웨어 위치·검증 데이터로 전달

장치 탐색부터 반환 형식별 검증까지의 핵심 흐름이다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 =====================
4 Chrome OS ACPI Device
5 =====================
6
7 Hardware functionality specific to Chrome OS is exposed through a Chrome OS ACPI device.
8 The plug and play ID of a Chrome OS ACPI device is GGL0001 and the hardware ID is
9 GOOG0016. The following ACPI objects are supported:
10
11 .. flat-table:: Supported ACPI Objects
12 :widths: 1 2
13 :header-rows: 1
14
15 * - Object
16 - Description
17
18 * - CHSW
19 - Chrome OS switch positions
20
21 * - HWID
22 - Chrome OS hardware ID
23
24 * - FWID
25 - Chrome OS firmware version
26
27 * - FRID
28 - Chrome OS read-only firmware version
29
30 * - BINF
31 - Chrome OS boot information
32
33 * - GPIO
34 - Chrome OS GPIO assignments
35
36 * - VBNV
37 - Chrome OS NVRAM locations
38
39 * - VDTA
40 - Chrome OS verified boot data
41
42 * - FMAP
43 - Chrome OS flashmap base address
44
45 * - MLST
46 - Chrome OS method list
47
48 CHSW (Chrome OS switch positions)
49 =================================
50 This control method returns the switch positions for Chrome OS specific hardware switches.
51
52 Arguments:
53 ----------
54 None
55
56 Result code:
57 ------------
58 An integer containing the switch positions as bitfields:
59
60 .. flat-table::
61 :widths: 1 2
62
63 * - 0x00000002
64 - Recovery button was pressed when x86 firmware booted.
65
66 * - 0x00000004
67 - Recovery button was pressed when EC firmware booted. (required if EC EEPROM is
68 rewritable; otherwise optional)
69
70 * - 0x00000020
71 - Developer switch was enabled when x86 firmware booted.
72
73 * - 0x00000200
74 - Firmware write protection was disabled when x86 firmware booted. (required if
75 firmware write protection is controlled through x86 BIOS; otherwise optional)
76
77 All other bits are reserved and should be set to 0.
78
79 HWID (Chrome OS hardware ID)
80 ============================
81 This control method returns the hardware ID for the Chromebook.
82
83 Arguments:
84 ----------
85 None
86
87 Result code:
88 ------------
89 A null-terminated ASCII string containing the hardware ID from the Model-Specific Data area of
90 EEPROM.
91
92 Note that the hardware ID can be up to 256 characters long, including the terminating null.
93
94 FWID (Chrome OS firmware version)
95 =================================
96 This control method returns the firmware version for the rewritable portion of the main
97 processor firmware.
98
99 Arguments:
100 ----------
101 None
102
103 Result code:
104 ------------
105 A null-terminated ASCII string containing the complete firmware version for the rewritable
106 portion of the main processor firmware.
107
108 FRID (Chrome OS read-only firmware version)
109 ===========================================
110 This control method returns the firmware version for the read-only portion of the main
111 processor firmware.
112
113 Arguments:
114 ----------
115 None
116
117 Result code:
118 ------------
119 A null-terminated ASCII string containing the complete firmware version for the read-only
120 (bootstrap + recovery ) portion of the main processor firmware.
121
122 BINF (Chrome OS boot information)
123 =================================
124 This control method returns information about the current boot.
125
126 Arguments:
127 ----------
128 None
129
130 Result code:
131 ------------
132
133 .. code-block::
134
135 Package {
136 Reserved1
137 Reserved2
138 Active EC Firmware
139 Active Main Firmware Type
140 Reserved5
141 }
142
143 .. flat-table::
144 :widths: 1 1 2
145 :header-rows: 1
146
147 * - Field
148 - Format
149 - Description
150
151 * - Reserved1
152 - DWORD
153 - Set to 256 (0x100). This indicates this field is no longer used.
154
155 * - Reserved2
156 - DWORD
157 - Set to 256 (0x100). This indicates this field is no longer used.
158
159 * - Active EC firmware
160 - DWORD
161 - The EC firmware which was used during boot.
162
163 - 0 - Read-only (recovery) firmware
164 - 1 - Rewritable firmware.
165
166 Set to 0 if EC firmware is always read-only.
167
168 * - Active Main Firmware Type
169 - DWORD
170 - The main firmware type which was used during boot.
171
172 - 0 - Recovery
173 - 1 - Normal
174 - 2 - Developer
175 - 3 - netboot (factory installation only)
176
177 Other values are reserved.
178
179 * - Reserved5
180 - DWORD
181 - Set to 256 (0x100). This indicates this field is no longer used.
182
183 GPIO (Chrome OS GPIO assignments)
184 =================================
185 This control method returns information about Chrome OS specific GPIO assignments for
186 Chrome OS hardware, so the kernel can directly control that hardware.
187
188 Arguments:
189 ----------
190 None
191
192 Result code:
193 ------------
194 .. code-block::
195
196 Package {
197 Package {
198 // First GPIO assignment
199 Signal Type //DWORD
200 Attributes //DWORD
201 Controller Offset //DWORD
202 Controller Name //ASCIIZ
203 },
204 ...
205 Package {
206 // Last GPIO assignment
207 Signal Type //DWORD
208 Attributes //DWORD
209 Controller Offset //DWORD
210 Controller Name //ASCIIZ
211 }
212 }
213
214 Where ASCIIZ means a null-terminated ASCII string.
215
216 .. flat-table::
217 :widths: 1 1 2
218 :header-rows: 1
219
220 * - Field
221 - Format
222 - Description
223
224 * - Signal Type
225 - DWORD
226 - Type of GPIO signal
227
228 - 0x00000001 - Recovery button
229 - 0x00000002 - Developer mode switch
230 - 0x00000003 - Firmware write protection switch
231 - 0x00000100 - Debug header GPIO 0
232 - ...
233 - 0x000001FF - Debug header GPIO 255
234
235 Other values are reserved.
236
237 * - Attributes
238 - DWORD
239 - Signal attributes as bitfields:
240
241 - 0x00000001 - Signal is active-high (for button, a GPIO value
242 of 1 means the button is pressed; for switches, a GPIO value
243 of 1 means the switch is enabled). If this bit is 0, the signal
244 is active low. Set to 0 for debug header GPIOs.
245
246 * - Controller Offset
247 - DWORD
248 - GPIO number on the specified controller.
249
250 * - Controller Name
251 - ASCIIZ
252 - Name of the controller for the GPIO.
253 Currently supported names:
254 "NM10" - Intel NM10 chip
255
256 VBNV (Chrome OS NVRAM locations)
257 ================================
258 This control method returns information about the NVRAM (CMOS) locations used to
259 communicate with the BIOS.
260
261 Arguments:
262 ----------
263 None
264
265 Result code:
266 ------------
267 .. code-block::
268
269 Package {
270 NV Storage Block Offset //DWORD
271 NV Storage Block Size //DWORD
272 }
273
274 .. flat-table::
275 :widths: 1 1 2
276 :header-rows: 1
277
278 * - Field
279 - Format
280 - Description
281
282 * - NV Storage Block Offset
283 - DWORD
284 - Offset in CMOS bank 0 of the verified boot non-volatile storage block, counting from
285 the first writable CMOS byte (that is, offset=0 is the byte following the 14 bytes of
286 clock data).
287
288 * - NV Storage Block Size
289 - DWORD
290 - Size in bytes of the verified boot non-volatile storage block.
291
292 FMAP (Chrome OS flashmap address)
293 =================================
294 This control method returns the physical memory address of the start of the main processor
295 firmware flashmap.
296
297 Arguments:
298 ----------
299 None
300
301 NoneResult code:
302 ----------------
303 A DWORD containing the physical memory address of the start of the main processor firmware
304 flashmap.
305
306 VDTA (Chrome OS verified boot data)
307 ===================================
308 This control method returns the verified boot data block shared between the firmware
309 verification step and the kernel verification step.
310
311 Arguments:
312 ----------
313 None
314
315 Result code:
316 ------------
317 A buffer containing the verified boot data block.
318
319 MECK (Management Engine Checksum)
320 =================================
321 This control method returns the SHA-1 or SHA-256 hash that is read out of the Management
322 Engine extended registers during boot. The hash is exported via ACPI so the OS can verify that
323 the ME firmware has not changed. If Management Engine is not present, or if the firmware was
324 unable to read the extended registers, this buffer can be zero.
325
326 Arguments:
327 ----------
328 None
329
330 Result code:
331 ------------
332 A buffer containing the ME hash.
333
334 MLST (Chrome OS method list)
335 ============================
336 This control method returns a list of the other control methods supported by the Chrome OS
337 hardware device.
338
339 Arguments:
340 ----------
341 None
342
343 Result code:
344 ------------
345 A package containing a list of null-terminated ASCII strings, one for each control method
346 supported by the Chrome OS hardware device, not including the MLST method itself.
347 For this version of the specification, the result is:
348
349 .. code-block::
350
351 Package {
352 "CHSW",
353 "FWID",
354 "HWID",
355 "FRID",
356 "BINF",
357 "GPIO",
358 "VBNV",
359 "FMAP",
360 "VDTA",
361 "MECK"
362 }
363

3. 한국어 전문 번역

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

Chrome OS ACPI 장치와 지원 객체

1-47

Chrome OS에 특화된 하드웨어 기능은 하나의 Chrome OS ACPI 장치를 통해 노출된다. 이 장치의 플러그 앤 플레이 ID는 `GGL0001`이고 하드웨어 ID는 `GOOG0016`이다. 운영체제는 이 식별자를 사용해 장치를 찾은 뒤, 아래의 ACPI 제어 메서드를 개별 기능 인터페이스로 호출한다.

지원 객체 표는 스위치 상태, 기기·펌웨어 식별 정보, 현재 부팅 정보, GPIO 배선, 검증 부팅용 NVRAM과 데이터, 플래시맵 주소, 지원 메서드 목록을 구분한다. 표에는 `MECK`가 없지만 문서 후반에는 Management Engine 해시를 반환하는 별도 메서드로 정의되어 있으므로 구현은 `MLST` 결과까지 확인해야 한다.

지원되는 Chrome OS ACPI 객체
객체설명
CHSWChrome OS 스위치 위치
HWIDChrome OS 하드웨어 ID
FWIDChrome OS 재기록 가능 펌웨어 버전
FRIDChrome OS 읽기 전용 펌웨어 버전
BINFChrome OS 부팅 정보
GPIOChrome OS GPIO 할당
VBNVChrome OS NVRAM 위치
VDTAChrome OS 검증 부팅 데이터
FMAPChrome OS 플래시맵 기준 주소
MLSTChrome OS 메서드 목록

원문의 Supported ACPI Objects 표를 객체 이름과 반환 정보 기준으로 옮겼다.

Chrome OS ACPI 인터페이스 탐색
ACPI 장치에서 GGL0001 또는 GOOG0016 식별MLST를 호출해 실제 지원 메서드 목록 확인CHSW·BINF로 부팅 당시 상태 확인HWID·FWID·FRID로 장치와 펌웨어 식별GPIO·VBNV·FMAP으로 하드웨어 위치 정보 획득VDTA·MECK로 검증 부팅 관련 데이터 획득

운영체제가 장치를 식별하고 지원 메서드를 사용하는 순서다.

.. SPDX-License-Identifier: GPL-2.0

=====================
Chrome OS ACPI Device
=====================

Hardware functionality specific to Chrome OS is exposed through a Chrome OS ACPI device.
The plug and play ID of a Chrome OS ACPI device is GGL0001 and the hardware ID is
GOOG0016.  The following ACPI objects are supported:

.. flat-table:: Supported ACPI Objects
   :widths: 1 2
   :header-rows: 1

   * - Object
     - Description

   * - CHSW
     - Chrome OS switch positions

   * - HWID
     - Chrome OS hardware ID

   * - FWID
     - Chrome OS firmware version

   * - FRID
     - Chrome OS read-only firmware version

   * - BINF
     - Chrome OS boot information

   * - GPIO
     - Chrome OS GPIO assignments

   * - VBNV
     - Chrome OS NVRAM locations

   * - VDTA
     - Chrome OS verified boot data

   * - FMAP
     - Chrome OS flashmap base address

   * - MLST
     - Chrome OS method list

CHSW 스위치 상태와 HWID

48-93

`CHSW` 제어 메서드는 Chrome OS 전용 하드웨어 스위치가 부팅 시점에 어떤 위치였는지를 반환한다. 인수는 없으며, 결과는 각 상태를 비트로 표현한 정수다. 이 값은 현재의 물리 상태가 아니라 x86 펌웨어 또는 EC 펌웨어가 부팅될 때 관찰한 상태라는 점이 중요하다.

비트 `0x00000002`는 x86 펌웨어 부팅 때 복구 버튼이 눌렸음을 뜻한다. `0x00000004`는 EC 펌웨어 부팅 때 복구 버튼이 눌렸음을 뜻하며, EC EEPROM을 다시 쓸 수 있는 시스템에서는 필수이고 그렇지 않으면 선택 사항이다.

비트 `0x00000020`은 x86 펌웨어 부팅 때 개발자 스위치가 활성화되었음을 뜻한다. `0x00000200`은 같은 시점에 펌웨어 쓰기 보호가 비활성화되었음을 뜻하며, x86 BIOS가 쓰기 보호를 제어하는 경우 필수이고 그 밖에는 선택 사항이다. 정의되지 않은 모든 비트는 예약되어 있으므로 0이어야 한다.

CHSW 비트 필드
마스크부팅 시 의미조건
0x00000002x86 펌웨어 부팅 때 복구 버튼 눌림항상 정의
0x00000004EC 펌웨어 부팅 때 복구 버튼 눌림EC EEPROM 재기록 가능 시 필수
0x00000020x86 펌웨어 부팅 때 개발자 스위치 활성항상 정의
0x00000200x86 펌웨어 부팅 때 펌웨어 쓰기 보호 해제x86 BIOS 제어 시 필수

정수 결과에서 정의된 비트만 해석하고 나머지 비트는 0인지 확인한다.

`HWID` 제어 메서드도 인수를 받지 않는다. 이 메서드는 EEPROM의 Model-Specific Data 영역에 저장된 Chromebook 하드웨어 ID를 널 종료 ASCII 문자열로 반환한다. 종료 널 문자를 포함한 최대 길이는 256자이므로, 호출자는 최대 길이와 종료 문자를 함께 검증해야 한다.

HWID 반환 계약
항목
인수없음
결과 형식널 종료 ASCII 문자열
데이터 출처EEPROM Model-Specific Data 영역
최대 길이종료 널을 포함해 256자

하드웨어 ID 문자열의 출처와 형식 제약이다.

CHSW (Chrome OS switch positions)
=================================
This control method returns the switch positions for Chrome OS specific hardware switches.

Arguments:
----------
None

Result code:
------------
An integer containing the switch positions as bitfields:

.. flat-table::
   :widths: 1 2

   * - 0x00000002
     - Recovery button was pressed when x86 firmware booted.

   * - 0x00000004
     - Recovery button was pressed when EC firmware booted. (required if EC EEPROM is
       rewritable; otherwise optional)

   * - 0x00000020
     - Developer switch was enabled when x86 firmware booted.

   * - 0x00000200
     - Firmware write protection was disabled when x86 firmware booted. (required if
       firmware write protection is controlled through x86 BIOS; otherwise optional)

All other bits are reserved and should be set to 0.

HWID (Chrome OS hardware ID)
============================
This control method returns the hardware ID for the Chromebook.

Arguments:
----------
None

Result code:
------------
A null-terminated ASCII string containing the hardware ID from the Model-Specific Data area of
EEPROM.

Note that the hardware ID can be up to 256 characters long, including the terminating null.

FWID와 FRID 펌웨어 버전

94-121

`FWID` 제어 메서드는 메인 프로세서 펌웨어의 재기록 가능한 부분에 대한 완전한 펌웨어 버전을 반환한다. 인수는 없고 결과는 널 종료 ASCII 문자열이다. 업데이트 가능한 주 펌웨어 버전을 식별할 때 이 값을 사용한다.

`FRID` 제어 메서드는 메인 프로세서 펌웨어의 읽기 전용 부분에 대한 완전한 버전을 반환한다. 이 읽기 전용 부분은 부트스트랩과 복구 펌웨어를 포함한다. `FRID` 역시 인수가 없고 널 종료 ASCII 문자열을 반환한다.

두 값은 모두 메인 프로세서 펌웨어를 설명하지만 대상 영역이 다르다. 펌웨어 상태를 보고할 때 `FWID`와 `FRID`를 서로 대체해서는 안 되며, 재기록 가능 영역과 복구 가능한 신뢰 기반을 각각 별도 필드로 유지해야 한다.

FWID와 FRID 비교
메서드대상 영역인수결과
FWID메인 프로세서 펌웨어의 재기록 가능 부분없음완전한 버전의 널 종료 ASCII 문자열
FRID메인 프로세서 펌웨어의 읽기 전용 부트스트랩·복구 부분없음완전한 버전의 널 종료 ASCII 문자열

두 버전 메서드의 대상 펌웨어 영역과 반환 형식을 비교한다.

FWID (Chrome OS firmware version)
=================================
This control method returns the firmware version for the rewritable portion of the main
processor firmware.

Arguments:
----------
None

Result code:
------------
A null-terminated ASCII string containing the complete firmware version for the rewritable
portion of the main processor firmware.

FRID (Chrome OS read-only firmware version)
===========================================
This control method returns the firmware version for the read-only portion of the main
processor firmware.

Arguments:
----------
None

Result code:
------------
A null-terminated ASCII string containing the complete firmware version for the read-only
(bootstrap + recovery ) portion of the main processor firmware.

BINF 현재 부팅 정보

122-182

`BINF` 제어 메서드는 현재 부팅에 관한 정보를 반환하며 인수는 없다. 결과 패키지는 `Reserved1`, `Reserved2`, `Active EC Firmware`, `Active Main Firmware Type`, `Reserved5`의 다섯 필드로 구성되고, 각 필드의 형식은 `DWORD`다.

`Reserved1`, `Reserved2`, `Reserved5`는 더 이상 사용되지 않는 필드임을 나타내기 위해 모두 256(`0x100`)으로 설정한다. 이름이 예약 필드라고 해서 0으로 채우는 것이 아니라 명시된 호환성 값 `0x100`을 써야 한다.

`Active EC Firmware`는 부팅에 사용된 EC 펌웨어를 나타낸다. 값 0은 읽기 전용 복구 펌웨어, 값 1은 재기록 가능 펌웨어다. EC 펌웨어가 항상 읽기 전용인 시스템에서는 0으로 설정한다.

`Active Main Firmware Type`은 부팅에 사용된 메인 펌웨어 유형이다. 값 0은 Recovery, 1은 Normal, 2는 Developer, 3은 공장 설치 전용 netboot를 뜻하며, 다른 값은 예약되어 있다.

BINF 패키지 구조
Package 시작Reserved1: DWORD = 0x100Reserved2: DWORD = 0x100Active EC Firmware: DWORDActive Main Firmware Type: DWORDReserved5: DWORD = 0x100Package 종료

원문의 Package 코드 블록을 순서가 보이는 구조로 다시 그렸다.

BINF 필드
필드형식값과 의미
Reserved1DWORD256(0x100), 더 이상 사용하지 않음
Reserved2DWORD256(0x100), 더 이상 사용하지 않음
Active EC FirmwareDWORD0=읽기 전용 복구 펌웨어, 1=재기록 가능 펌웨어
Active Main Firmware TypeDWORD0=Recovery, 1=Normal, 2=Developer, 3=netboot
Reserved5DWORD256(0x100), 더 이상 사용하지 않음

패키지의 필드 순서, 형식, 허용 값을 보존한 표다.

BINF 펌웨어 유형 열거값
필드의미
Active EC Firmware0Read-only (recovery) firmware
Active EC Firmware1Rewritable firmware
Active Main Firmware Type0Recovery
Active Main Firmware Type1Normal
Active Main Firmware Type2Developer
Active Main Firmware Type3netboot (factory installation only)

EC와 메인 펌웨어 필드의 숫자 값을 서로 다른 열거형으로 해석한다.

BINF (Chrome OS boot information)
=================================
This control method returns information about the current boot.

Arguments:
----------
None

Result code:
------------

.. code-block::

   Package {
           Reserved1
           Reserved2
           Active EC Firmware
           Active Main Firmware Type
           Reserved5
   }

.. flat-table::
   :widths: 1 1 2
   :header-rows: 1

   * - Field
     - Format
     - Description

   * - Reserved1
     - DWORD
     - Set to 256 (0x100). This indicates this field is no longer used.

   * - Reserved2
     - DWORD
     - Set to 256 (0x100). This indicates this field is no longer used.

   * - Active EC firmware
     - DWORD
     - The EC firmware which was used during boot.

       - 0 - Read-only (recovery) firmware
       - 1 - Rewritable firmware.

       Set to 0 if EC firmware is always read-only.

   * - Active Main Firmware Type
     - DWORD
     - The main firmware type which was used during boot.

       - 0 - Recovery
       - 1 - Normal
       - 2 - Developer
       - 3 - netboot (factory installation only)

       Other values are reserved.

   * - Reserved5
     - DWORD
     - Set to 256 (0x100). This indicates this field is no longer used.

GPIO 할당 패키지

183-255

`GPIO` 제어 메서드는 Chrome OS 하드웨어에 특화된 GPIO 할당 정보를 반환한다. 이 정보를 통해 커널이 해당 하드웨어를 직접 제어할 수 있다. 인수는 없고, 결과는 GPIO 할당마다 하나의 내부 `Package`를 갖는 외부 `Package`다.

각 내부 패키지는 순서대로 `Signal Type`, `Attributes`, `Controller Offset`, `Controller Name`을 담는다. 앞의 세 값은 `DWORD`이고 컨트롤러 이름은 `ASCIIZ`, 즉 널 종료 ASCII 문자열이다. 반복되는 내부 패키지의 순서와 각 필드의 순서를 모두 보존해야 한다.

GPIO 중첩 패키지 구조
외부 Package 시작첫 번째 GPIO PackageSignal Type: DWORDAttributes: DWORDController Offset: DWORDController Name: ASCIIZ동일 구조의 GPIO Package 반복마지막 GPIO Package외부 Package 종료

원문의 반복 Package 코드 블록을 계층과 필드 순서가 드러나도록 다시 그렸다.

`Signal Type` 값 `0x00000001`은 복구 버튼, `0x00000002`는 개발자 모드 스위치, `0x00000003`은 펌웨어 쓰기 보호 스위치다. `0x00000100`부터 `0x000001FF`까지는 디버그 헤더 GPIO 0부터 255까지에 대응한다. 그 밖의 값은 예약되어 있다.

GPIO Signal Type
값 또는 범위신호
0x00000001Recovery button
0x00000002Developer mode switch
0x00000003Firmware write protection switch
0x00000100Debug header GPIO 0
0x00000101 ... 0x000001FEDebug header GPIO 1 ... 254
0x000001FFDebug header GPIO 255

신호 종류 숫자와 Chrome OS 하드웨어 기능의 대응이다.

`Attributes`는 비트 필드다. 비트 `0x00000001`이 1이면 신호는 active-high이며, 버튼에서는 GPIO 값 1이 눌림을, 스위치에서는 값 1이 활성화를 뜻한다. 이 비트가 0이면 신호는 active-low다. 디버그 헤더 GPIO에서는 `Attributes`를 0으로 설정한다.

GPIO Attributes 비트
비트 상태일반 신호 의미디버그 헤더
0x00000001 설정active-high, 값 1이 눌림 또는 활성사용하지 않음
0x00000001 해제active-low, 값 0이 눌림 또는 활성Attributes 전체를 0으로 설정

동일한 물리 값이라도 극성에 따라 버튼과 스위치의 논리 상태가 달라진다.

`Controller Offset`은 지정된 컨트롤러 안에서의 GPIO 번호다. `Controller Name`은 그 GPIO를 제공하는 컨트롤러의 이름이며, 현재 지원되는 이름은 Intel NM10 칩을 나타내는 문자열 `"NM10"`이다.

GPIO 컨트롤러 위치
필드형식의미
Controller OffsetDWORD지정된 컨트롤러의 GPIO 번호
Controller NameASCIIZGPIO 컨트롤러 이름
현재 지원 이름"NM10"Intel NM10 chip

GPIO의 물리 위치는 컨트롤러 이름과 그 안의 오프셋을 한 쌍으로 해석한다.

GPIO (Chrome OS GPIO assignments)
=================================
This control method returns information about Chrome OS specific GPIO assignments for
Chrome OS hardware, so the kernel can directly control that hardware.

Arguments:
----------
None

Result code:
------------
.. code-block::

        Package {
                Package {
                        // First GPIO assignment
                        Signal Type        //DWORD
                        Attributes         //DWORD
                        Controller Offset  //DWORD
                        Controller Name    //ASCIIZ
                },
                ...
                Package {
                        // Last GPIO assignment
                        Signal Type        //DWORD
                        Attributes         //DWORD
                        Controller Offset  //DWORD
                        Controller Name    //ASCIIZ
                }
        }

Where ASCIIZ means a null-terminated ASCII string.

.. flat-table::
   :widths: 1 1 2
   :header-rows: 1

   * - Field
     - Format
     - Description

   * - Signal Type
     - DWORD
     - Type of GPIO signal

       - 0x00000001 - Recovery button
       - 0x00000002 - Developer mode switch
       - 0x00000003 - Firmware write protection switch
       - 0x00000100 - Debug header GPIO 0
       - ...
       - 0x000001FF - Debug header GPIO 255

       Other values are reserved.

   * - Attributes
     - DWORD
     - Signal attributes as bitfields:

       - 0x00000001 - Signal is active-high (for button, a GPIO value
         of 1 means the button is pressed; for switches, a GPIO value
         of 1 means the switch is enabled). If this bit is 0, the signal
         is active low. Set to 0 for debug header GPIOs.

   * - Controller Offset
     - DWORD
     - GPIO number on the specified controller.

   * - Controller Name
     - ASCIIZ
     - Name of the controller for the GPIO.
       Currently supported names:
       "NM10" - Intel NM10 chip

VBNV NVRAM 위치와 FMAP 주소

256-305

`VBNV` 제어 메서드는 BIOS와 통신하는 데 쓰이는 NVRAM(CMOS) 위치 정보를 반환한다. 인수는 없으며 결과 패키지는 `NV Storage Block Offset`과 `NV Storage Block Size`라는 두 `DWORD` 필드를 순서대로 담는다.

VBNV 패키지 구조
Package 시작NV Storage Block Offset: DWORDNV Storage Block Size: DWORDPackage 종료

두 필드로 이루어진 원문의 Package 코드 블록을 순서대로 나타냈다.

`NV Storage Block Offset`은 검증 부팅 비휘발성 저장 블록이 CMOS bank 0의 어디에서 시작하는지를 나타낸다. 기준점은 CMOS의 첫 번째 쓰기 가능 바이트이므로, offset 0은 14바이트짜리 시계 데이터 바로 다음 바이트를 뜻한다. CMOS bank 0의 절대 시작점과 혼동해서는 안 된다.

`NV Storage Block Size`는 검증 부팅 비휘발성 저장 블록의 크기를 바이트 단위로 나타낸다. 오프셋과 크기를 함께 사용해야 블록의 정확한 범위를 계산할 수 있다.

VBNV 필드
필드형식의미
NV Storage Block OffsetDWORD첫 쓰기 가능 CMOS 바이트부터 센 블록 시작 오프셋
NV Storage Block SizeDWORD검증 부팅 비휘발성 저장 블록의 바이트 크기

CMOS 안의 검증 부팅 저장 블록을 기준점과 바이트 크기로 정의한다.

`FMAP` 제어 메서드는 메인 프로세서 펌웨어 플래시맵이 시작되는 물리 메모리 주소를 반환한다. 인수는 없고 결과는 그 시작 주소를 담은 `DWORD`다. 원문에는 제목이 `NoneResult code:`로 붙어 있지만 의미상 인수 없음 다음의 결과 코드 절이며, 원문 자체는 아래 접이식 영역에 그대로 보존한다.

FMAP 반환 계약
항목
인수없음
결과 형식DWORD
결과 의미메인 프로세서 펌웨어 flashmap 시작 물리 메모리 주소

플래시맵의 내용이 아니라 시작 물리 주소 하나를 반환한다.

VBNV (Chrome OS NVRAM locations)
================================
This control method returns information about the NVRAM (CMOS) locations used to
communicate with the BIOS.

Arguments:
----------
None

Result code:
------------
.. code-block::

        Package {
                NV Storage Block Offset  //DWORD
                NV Storage Block Size    //DWORD
        }

.. flat-table::
   :widths: 1 1 2
   :header-rows: 1

   * - Field
     - Format
     - Description

   * - NV Storage Block Offset
     - DWORD
     - Offset in CMOS bank 0 of the verified boot non-volatile storage block, counting from
       the first writable CMOS byte (that is, offset=0 is the byte following the 14 bytes of
       clock data).

   * - NV Storage Block Size
     - DWORD
     - Size in bytes of the verified boot non-volatile storage block.

FMAP (Chrome OS flashmap address)
=================================
This control method returns the physical memory address of the start of the main processor
firmware flashmap.

Arguments:
----------
None

NoneResult code:
----------------
A DWORD containing the physical memory address of the start of the main processor firmware
flashmap.

VDTA 검증 부팅 데이터와 MECK

306-333

`VDTA` 제어 메서드는 펌웨어 검증 단계와 커널 검증 단계가 공유하는 검증 부팅 데이터 블록을 반환한다. 인수는 없고 결과는 해당 블록을 담은 버퍼다. 이 인터페이스는 주소이나 크기 필드가 아니라 데이터 자체를 버퍼로 전달한다.

`MECK` 제어 메서드는 부팅 중 Management Engine 확장 레지스터에서 읽은 SHA-1 또는 SHA-256 해시를 반환한다. ACPI를 통해 이 해시를 운영체제에 제공하면 운영체제가 ME 펌웨어가 변경되지 않았는지 검증할 수 있다.

Management Engine이 없거나 펌웨어가 확장 레지스터를 읽지 못했다면 `MECK` 버퍼는 0일 수 있다. 따라서 0 버퍼를 유효한 ME 펌웨어 해시로 간주해서는 안 되며, 부재 또는 읽기 실패 가능성을 별도 상태로 처리해야 한다.

VDTA와 MECK 비교
메서드인수결과용도
VDTA없음검증 부팅 데이터 블록 버퍼펌웨어 검증 단계와 커널 검증 단계 사이의 데이터 공유
MECK없음SHA-1 또는 SHA-256 ME 해시 버퍼운영체제가 ME 펌웨어 변경 여부 검증

두 메서드는 모두 버퍼를 반환하지만 데이터의 생산 단계와 검증 목적이 다르다.

MECK 해시 처리
부팅 중 ME 확장 레지스터 읽기 시도성공하면 SHA-1 또는 SHA-256 해시 생성ACPI MECK 버퍼로 운영체제에 전달운영체제가 기대값과 비교해 변경 여부 검증ME 부재 또는 읽기 실패 시 버퍼가 0일 수 있음

버퍼 값의 의미를 ME 존재 여부와 레지스터 읽기 성공 여부까지 포함해 판정한다.

VDTA (Chrome OS verified boot data)
===================================
This control method returns the verified boot data block shared between the firmware
verification step and the kernel verification step.

Arguments:
----------
None

Result code:
------------
A buffer containing the verified boot data block.

MECK (Management Engine Checksum)
=================================
This control method returns the SHA-1 or SHA-256 hash that is read out of the Management
Engine extended registers during boot. The hash is exported via ACPI so the OS can verify that
the ME firmware has not changed. If Management Engine is not present, or if the firmware was
unable to read the extended registers, this buffer can be zero.

Arguments:
----------
None

Result code:
------------
A buffer containing the ME hash.

MLST 지원 메서드 목록

334-362

`MLST` 제어 메서드는 Chrome OS 하드웨어 장치가 지원하는 다른 제어 메서드의 목록을 반환한다. 인수는 없으며, 결과는 지원되는 메서드마다 하나씩 들어 있는 널 종료 ASCII 문자열의 패키지다.

목록에는 `MLST` 메서드 자체를 포함하지 않는다. 이 규격 버전에서 결과는 `CHSW`, `FWID`, `HWID`, `FRID`, `BINF`, `GPIO`, `VBNV`, `FMAP`, `VDTA`, `MECK`의 열 개 문자열이다. 호출자는 고정 개수만 가정하기보다 실제 패키지 항목을 순회하는 편이 이후 규격 확장에 안전하다.

MLST 패키지 구조
Package 시작"CHSW" → "FWID" → "HWID" → "FRID""BINF" → "GPIO" → "VBNV" → "FMAP""VDTA" → "MECK"Package 종료

원문의 문자열 Package를 반환 순서 그대로 구조화했다.

MLST 규격 목록
순서문자열기능
1CHSW부팅 시 스위치 상태
2FWID재기록 가능 펌웨어 버전
3HWID하드웨어 ID
4FRID읽기 전용 펌웨어 버전
5BINF현재 부팅 정보
6GPIOChrome OS GPIO 할당
7VBNV검증 부팅 NVRAM 위치
8FMAP펌웨어 플래시맵 주소
9VDTA검증 부팅 데이터
10MECKManagement Engine 해시

이 규격 버전에서 MLST가 반환하는 메서드 이름과 기능이다.

MLST (Chrome OS method list)
============================
This control method returns a list of the other control methods supported by the Chrome OS
hardware device.

Arguments:
----------
None

Result code:
------------
A package containing a list of null-terminated ASCII strings, one for each control method
supported by the Chrome OS hardware device, not including the MLST method itself.
For this version of the specification, the result is:

.. code-block::

        Package {
                "CHSW",
                "FWID",
                "HWID",
                "FRID",
                "BINF",
                "GPIO",
                "VBNV",
                "FMAP",
                "VDTA",
                "MECK"
        }