← Documents Documentation/firmware_class/hotplug-script GitHub 원문 ↗

Linux 6.18.37 · Firmware

Firmware class hotplug script

Firmware hotplug의 sysfs loading protocol을 설명한 script 전문 번역입니다.

Source pathDocumentation/firmware_class/hotplug-script
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약·해설

hotplug-script:1-17

Firmware hotplug script는 `DEVPATH`와 `FIRMWARE`를 받아 sysfs의 `loading`·`data` file로 image를 전달한다. Loading에 1을 쓴 뒤 data를 전송하고 0으로 성공을 끝내며, image가 없으면 -1을 기록한다.

원문은 최소 동작 예제이므로 실제 배포에서는 shell 호환성, 변수 quoting, path와 write 실패를 별도로 방어해야 한다.

Firmware 전달 요약
Hotplug event 수신Firmware file 탐색Loading 시작Image data write성공 또는 실패 통지

요청부터 성공·실패 통지까지의 최소 순서다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 #!/bin/sh
2
3 # Simple hotplug script sample:
4 #
5 # Both $DEVPATH and $FIRMWARE are already provided in the environment.
6
7 HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/
8
9 if [ "$SUBSYSTEM" == "firmware" -a "$ACTION" == "add" ]; then
10 if [ -f $HOTPLUG_FW_DIR/$FIRMWARE ]; then
11 echo 1 > /sys/$DEVPATH/loading
12 cat $HOTPLUG_FW_DIR/$FIRMWARE > /sys/$DEVPATH/data
13 echo 0 > /sys/$DEVPATH/loading
14 else
15 echo -1 > /sys/$DEVPATH/loading
16 fi
17 fi
18

3. 한국어 전문 번역

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

Firmware hotplug 요청 처리 script

1-17

이 파일은 firmware class hotplug 요청을 처리하는 단순한 `/bin/sh` 예제다. Kernel 또는 hotplug manager가 환경 변수 `DEVPATH`와 `FIRMWARE`를 이미 제공한다는 전제에서 `/usr/lib/hotplug/firmware/` 아래의 firmware image를 sysfs loading interface로 전달한다.

Script는 `SUBSYSTEM`이 `firmware`이고 `ACTION`이 `add`일 때만 동작한다. 요청한 `$HOTPLUG_FW_DIR/$FIRMWARE` file이 존재하면 `/sys/$DEVPATH/loading`에 `1`을 써 loading 시작을 알리고, image bytes를 `/sys/$DEVPATH/data`에 기록한 뒤 loading에 `0`을 써 성공 완료를 알린다.

Firmware file이 없으면 loading에 `-1`을 써 실패를 통지한다. `1`, data 전송, `0`의 순서는 protocol이므로 중간 단계가 누락되면 driver가 정상 firmware를 받지 못할 수 있다. 이 예제는 원문 그대로 보존하지만 production script에서는 변수 quoting, POSIX test operator, path 검증과 write error 처리도 고려해야 한다.

Firmware hotplug protocol
`SUBSYSTEM=firmware`, `ACTION=add` 확인`/usr/lib/hotplug/firmware/$FIRMWARE` 존재 검사존재하면 `/sys/$DEVPATH/loading`에 1 기록Firmware bytes를 `/sys/$DEVPATH/data`로 전송성공이면 loading에 0, 누락이면 -1 기록

add event가 firmware bytes 또는 실패 상태로 끝나는 분기다.

loading 상태값
시점의미
1Data 전송 전Firmware loading 시작
0Data 전송 완료 후성공적으로 loading 종료
-1Firmware file을 찾지 못함요청 실패

sysfs firmware loading protocol에서 각 write가 나타내는 상태다.

Hotplug 환경 변수
변수예제에서의 용도
DEVPATH`/sys/$DEVPATH/loading`과 `data` 위치
FIRMWARE요청한 firmware file 이름
SUBSYSTEMfirmware request인지 확인
ACTIONadd event인지 확인
HOTPLUG_FW_DIRFirmware image base directory

Script가 event와 sysfs path를 구성할 때 사용하는 입력이다.

#!/bin/sh

# Simple hotplug script sample:
# 
# Both $DEVPATH and $FIRMWARE are already provided in the environment.

HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/

if [ "$SUBSYSTEM" == "firmware" -a "$ACTION" == "add" ]; then
  if [ -f $HOTPLUG_FW_DIR/$FIRMWARE ]; then
    echo 1 > /sys/$DEVPATH/loading
    cat $HOTPLUG_FW_DIR/$FIRMWARE > /sys/$DEVPATH/data
    echo 0 > /sys/$DEVPATH/loading
  else
    echo -1 > /sys/$DEVPATH/loading
  fi
fi