Этот полный технический материал следует документу Rockchip V1.0.0. Область исходника: RK3588, Linux 5.10, Android12/Android13. Это справочник по платформе для ArmSoM; проверьте конкретную плату, SoC, ветку SDK/BSP, ядро и периферию. Аппаратная проверка платы не проводилась; поддержка всеми платами ArmSoM не подразумевается.
Китайская статья следует китайскому PDF из 19 страниц, английская — английскому PDF из 21 страниц; русская полностью переводит его технический текст. Для китайского использованы китайские рисунки, для английского и русского — рисунки английского PDF, включая китайские подписи интерфейса, присутствующие в оригинале. Противоречия и исправления извлечения отмечены в редакционных записях. Комментарии к коду и вывод сохраняют язык источника.
Риск операций: запись ключей и прошивок изменяет хранилище и состояние аутентификации. Шестнадцатеричные ключи — примеры исходника, а не производственные ключи; легитимные ключи HDCP следует получать по соответствующей лицензии. Запись, операции OTP, аутентификация и воспроизведение не проверялись; частные ключи не включены. Описание шифрования не заменяет требования конкретного SDK и лицензирования.
Официальные ресурсы: ArmSoM、Rockchip Linux。
| SoC | Kernel | Android |
|---|---|---|
| RK3588 | Linux 5.10 | Android12 / Android13 |
1. Обзор HDCP
Платформа RK3588 поддерживает HDCP1.4 и HDCP2.3 на интерфейсах HDMITX, HDMIRX и DPTX.
В RK3588 имеются два независимых контроллера HDCP2.3 (hdcp0 и hdcp1); исходник указывает по 3 порта у каждого:
hdcp0: DPTX0 и DPTX1
hdcp1: HDMIRX, HDMITX0 и HDMITX1

Редактируемая расшифровка рисунка:
| Controller | Port | Interface |
|---|---|---|
| HDCP0 | Port0 | DPTX0 |
| HDCP0 | Port1 | DPTX1 |
| HDCP1 | Port0 | HDMIRX |
| HDCP1 | Port1 | HDMITX0 |
| HDCP1 | Port2 | HDMITX1 |
Ключи HDCP1.4 и HDCP2.3 заказчик должен самостоятельно приобрести через официальный ресурс HDCP. В RK3588 встроенных ключей HDCP нет.
2. Инструменты HDCP
2.1 Поддерживаемые способы записи
1. RK предоставляет инструменты преобразования и записи ключей, которые можно получить из SDK:
Инструмент разделения и преобразования ключей:
Архив RKTools/windows/Rockchip_HdcpKey_Writer_V1.0.1.7z содержит KeyConvertor для разделения и преобразования ключей. Обновление до KeyConvertor-V2.0.5 позволяет разделить исходный набор на bin-файлы с одним ключом в каждом.
Инструмент записи ключей:
RKTools/windows/Rockchip_HdcpKey_Writer_V1.0.1.7z
2. RK предоставляет библиотеку шифрованной записи libhdcp.so. Заказчик может разработать собственный инструмент записи с учётом своих требований. Библиотеку libhdcp.so необходимо запросить через Redmine.
2.2 Различия между двумя способами записи HDCP
1. Инструмент RK дополнительно шифрует ключ алгоритмом AES поверх шифрования SEED, после чего записывает его в Vendor Storage.
2. Библиотека шифрованной записи libhdcp.so поддерживает только шифрование SEED.
2.3 Интерфейсы библиотеки шифрованной записи libhdcp.so
enum HDCP_KEY_ID {
HDCP1X_KEY_HDMITX_RK33 = 0,
HDCP1X_KEY_HDMITX_RK3588,
HDCP1X_KEY_HDMIRX_RK3588,
HDCP1X_KEY_HDMIRX_RK628,
HDCP1X_KEY_DP_RK3588,
HDCP2X_KEY_HDMIRX_RK3588,
HDCP2X_KEY_RKIV_RK3588,
};
/*
* Encrypt the key, but is not written to vendor
*
* id: HDCP KEY type
* keyin: HDCP1.x 308 Byte raw Key, HDCP2.x 1000 Byte Key
* keyin_size: HDCP1.x 308, HDCP2.x 1000
* keyout: The encrypted key
* keyout_size: HDCP1.x 314, HDCP2.x 1000
*/
int hdcp_key_process(enum HDCP_KEY_ID id, uint8_t *keyin, int keyin_size, uint8_t *keyout,
int keyout_size);
/*
* Encrypt key and write it to vendor
*
* id: HDCP KEY type
* keyin: HDCP1.x 308 Byte raw Key, HDCP2.x 1000 Byte Key
* keyin_size: HDCP1.x 308, HDCP2.x 1000
*/
int hdcp_key_process_and_write(enum HDCP_KEY_ID id, uint8_t *keyin, int keyin_size);
/*
* Write key to vendor
*
* id: HDCP KEY type
* key: HDCP1.x 308 Byte raw Key, HDCP2.x 1000 Byte Key
* size: key size
*/
int hdcp_key_write(enum HDCP_KEY_ID id, uint8_t *key, int size);
/*
* Read key from vendor
*
* id: HDCP KEY type
* key: HDCP1.x 314 Byte Key, HDCP2.x 1000 Byte Key
* len: key length
*/
int hdcp_key_read(enum HDCP_KEY_ID id, uint8_t *key, int *len);
/*
* Write rkiv to vendor
*
* rkiv: rkiv
* len: must be 16
*/
int hdcp_rkiv_write(uint8_t *rkiv, int len);
2.4 Шифрование ключа HDCP 1.4
Ключ HDCP 1.4 состоит из 308 байт: 8 байт KSV (5 байт KSV + 3 байта 0x0), 280 байт DPK и 20 байт SHA.
SEED шифрует только 280 байт DPK.
2.5 Упаковка прошивки HDCP 2.3
Инструмент упаковки DWC_HDCP2_BASE_ESM_Firmware не входит в SDK; его необходимо запросить у RK через Redmine или по электронной почте.
1. Отдельная прошивка и ключ HDMIRX
Поместите RX KEY в корневой каталог инструмента упаковки и каталог tools:
DWC_HDCP2_BASE_ESM_Firmware$
cp ../hdcp_receivers.bin .
cp ../hdcp_receivers.bin tools/
Выполните build_rockchip_fw.sh и выберите вариант 1 — build firmware for both HDMIRX and HDMITX. Будет создана прошивка ./firmware/hdpc2_hdmi.fw:
1 -build firmware for both HDMIRX and HDMITX
2 -build firmware for HDMITX only
3 -build firmware for DP
Choose the fw type: 1
2. Прошивка и ключ HDMIRX + HDMITX
Поместите RX KEY и TX KEY в корневой каталог инструмента и каталог tools:
DWC_HDCP2_BASE_ESM_Firmware$
cp ../hdcp_receivers.bin .
cp ../hdcp_receivers.bin tools/
cp ../hdcp_transmitter.bin .
cp ../hdcp_transmitter.bin tools/
Выполните build_rockchip_fw.sh и выберите 1 — build firmware for both HDMIRX and HDMITX. Исходник указывает выходной файл ./firmware/hdpc2_dp.fw:
1 -build firmware for both HDMIRX and HDMITX
2 -build firmware for HDMITX only
3 -build firmware for DP
Choose the fw type: 1
3. Прошивка HDMITX
Поместите TX KEY в корневой каталог инструмента и каталог tools:
DWC_HDCP2_BASE_ESM_Firmware$
cp ../hdcp_transmitter.bin .
cp ../hdcp_transmitter.bin tools/
Выполните build_rockchip_fw.sh и выберите 2 — build firmware for HDMITX only. Будет создана прошивка ./firmware/hdpc2_hdmi.fw:
1 -build firmware for both HDMIRX and HDMITX
2 -build firmware for HDMITX only
3 -build firmware for DP
Choose the fw type: 2
4. Прошивка DPTX
Поместите TX KEY в корневой каталог инструмента и каталог tools:
DWC_HDCP2_BASE_ESM_Firmware$
cp ../hdcp_transmitter.bin .
cp ../hdcp_transmitter.bin tools/
Выполните build_rockchip_fw.sh и выберите 3 — build firmware for DP. Исходник указывает выходной файл ./firmware/hdpc2_hdmi.fw:
1 -build firmware for both HDMIRX and HDMITX
2 -build firmware for HDMITX only
3 -build firmware for DP
Choose the fw type: 3
2.6 Шифрование прошивки и RX KEY (необязательное)
По умолчанию прошивка и RX KEY шифруются с помощью PKf/DUK. После загрузки контроллер HDCP расшифровывает их с помощью PKf/DUK. PKf/DUK записываются в OTP при производстве SoC.
Чтобы сделать прошивку и RX KEY уникальными для каждого заказчика, при упаковке можно добавить шифрование AES ключом RKIV. Сервис HDCP2 после загрузки сначала выполняет расшифрование AES, затем передаёт данные контроллеру HDCP для расшифрования Kf/DUK. Конфигурация следующая:
1. В firmware.aic.nouart задайте 16-байтовый RKIV. Заказчик может определить его значение, но длина ключа должна составлять ровно 16 байт:
--- a/DWC_HDCP2_BASE_ESM_Firmware/firmware/firmware.aic.nouart
+++ b/DWC_HDCP2_BASE_ESM_Firmware/firmware/firmware.aic.nouart
@@ -2,6 +2,7 @@ PKf = 0x00112233445566778899aabbccddeeff
DUK = 0xffeeddccbbaa99887766554433221100
IK = 0xffeeddccbbaa99887766554433221100
IVc = 0xdeadbeeffedcba9876543210
+RKIV = 0x00112233445566778899aabbccddeeff
BBRcode = 6144
BBRdwb = 3072
CLL = 64
2. Вызовите интерфейс libhdcp.so, чтобы записать RKIV в Vendor Storage:
int main(void)
{
uint8_t rkiv[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
hdcp_rkiv_write(rkiv, 16);
return 0;
}
3. После записи HDCP2x RX KEY необходимо повторно записать RKIV.
4. hdcp2_tx_rx необходимо обновить до версии 3.4 или новее.
rk3588_t:/ # logcat | grep HDCP2
03-16 07:36:03.988 347 347 D HDCP2 : hdcp2 version v3.4
03-16 07:36:03.988 347 347 D HDCP2 : HDCP Port: 1
03-16 07:36:03.991 347 347 D HDCP2 : Firmware: [1]
3. Настройка HDCP1.4
3.1 HDMIRX
3.1.1 Настройка DTS
Поддержка только HDCP 1.4:
&hdmirx_ctrler {
status = "okay";
hdcp1x-enable;
};
При включении HDCP2.3 по умолчанию также включается HDCP1.4:
&hdmirx_ctrler {
status = "okay";
hdcp2x-enable;
};
3.1.2 Запись ключа
3.1.2.1 Запись инструментом RK
Инструмент разделения и преобразования ключей из SDK:
Архив RKTools/windows/Rockchip_HdcpKey_Writer_V1.0.1.7z содержит KeyConvertor для разделения и преобразования ключей. Обновление до KeyConvertor-V2.0.5 позволяет разделить набор на bin-файлы с одним ключом в каждом.
Инструмент записи ключей из SDK:
RKTools/windows/Rockchip_HdcpKey_Writer_V1.0.1.7z
Сначала извлеките отдельные ключи из исходного файла инструментом разделения и преобразования, затем преобразуйте ключи в формат .skf для записи.
Если запись выполняется не инструментом RK, ключи необходимо разделить на файлы по одному ключу. Для этого в поле «Number of Keys per file» укажите 1 и нажмите Extract. Преобразование в .skf в этом случае не требуется.

Переведите устройство в режим Loader и выберите в инструменте записи «hdcp1.4Hdmirx» и «RK3588». Для ключа HDCP1.4 RK3588 предусмотрено дополнительное AES-шифрование, поэтому флажок «Do AES» необязателен. Без него используется только SEED; с ним поверх SEED добавляется AES. Импортируйте указанный .skf и нажмите Write для записи ключа.
Примечание: после записи одного ключа инструмент автоматически переходит к следующему.

3.1.2.2 Запись собственным инструментом заказчика
Можно разработать приложение, вызывающее интерфейсы libhdcp.so для шифрования ключа и записи в Vendor Storage.
3.2 HDMITX
Для HDMI TX HDCP 1.4 специальная настройка DTS не требуется: драйвер зарегистрирован по умолчанию.
Для работы сначала разделите и преобразуйте ключи. Инструменты и порядок те же, что у HDMIRX; см. §3.1.2.1.

Для записи используется тот же инструмент, что и для RX. Переведите устройство в режим Loader, нажмите Settings и отметьте «hdcp1.4 Hdmitx», «RK3588», «Force Write», «Single Write». Импортируйте преобразованный .skf и нажмите Write.
Примечание: после записи одного ключа инструмент автоматически переходит к следующему.
3.3 DPTX
3.3.1 Настройка DTS
Драйвер DPTX изначально поддерживает HDCP1.4; дополнительная настройка DTS не нужна.
3.3.2 Запись ключа
Инструмент разделения и преобразования тот же, что для HDMI RX; см. §3.1.2.1.
Для записи используется тот же инструмент, что для HDMI RX. В режиме Loader нажмите Settings и выберите «hdcp1.4 dp», «RK3588», «Force Write», «Single Write». Импортируйте преобразованный .skf и нажмите Write. Для ключа HDCP1.4 RK3588 доступен необязательный флажок «Do AES»: без него выполняется только SEED-шифрование, с ним — AES поверх SEED.

4. Настройка HDCP2.3
4.1 HDMIRX
4.1.1 Настройка DTS
При включении HDCP2.3 по умолчанию также включается HDCP1.4:
&hdcp1 {
status = "okay";
};
&hdmirx_ctrler {
status = "okay";
hdcp2x-enable;
};
4.1.2 Упаковка прошивки и запуск сервисов
Распакуйте DWC_HDCP2_BASE_ESM_Firmware в Linux и скопируйте hdcp_receivers.bin в корневой каталог и tools/. Если требуется также HDMI TX, скопируйте hdcp_transmitter.bin в те же каталоги.
DWC_HDCP2_BASE_ESM_Firmware$
cp ../hdcp_receivers.bin .
cp ../hdcp_receivers.bin tools/
Для упаковки прошивки и RX KEY выполните build_rockchip_fw.sh:
DWC_HDCP2_BASE_ESM_Firmware$ ./build_rockchip_fw.sh
Во время упаковки необходимо ответить на несколько запросов:
1. Выберите тип прошивки 1 — build firmware for both HDMIRX and HDMITX. Будет создан файл ./firmware/hdpc2_hdmi.fw.
1 -build firmware for both HDMIRX and HDMITX
2 -build firmware for HDMITX only
3 -build firmware for DP
Choose the fw type: 1
2. Задайте необходимое число RX KEY, например 10 или 100. Отдельные ключи сохраняются в файлах fw_hdcp_receivers_*.bin каталога ./rxkeys/hdcpkeys?-?/. Если заказчик использует собственный инструмент, эти bin-файлы можно записывать напрямую.
Create Rx Key Number:
10
......
Create 10 keys to tools/rxkeys/hdcpkeys1-10/
3. Для инструмента RK необходимо упаковать файлы в формат .skf; результат сохраняется в ./rxkeys/hdcpkeys?-?/. Если инструмент RK не используется, выберите n.
Do want to pack these keys to .skf file? [y/n]:
y
10 file packed to ./rxkeys/hdcpkeys1-10/hdcprxkeys1-10.skf
Запись ключа приёмника HDCP2.3
1. Поместите hdcp2_hdmi.fw в каталог проекта device/rockchip/rk3588/; при сборке файл будет скопирован в vendor/firmware/hdcp2_hdmi.fw.
2. В RKDevInfoTool.exe выберите HDCP2X_HDMIRX, импортируйте созданный hdcprxkeys1-10.skf и выполните запись в режиме Loader. После записи одного ключа инструмент автоматически переходит к следующему ожидающему записи ключу.
3. Для ключа HDCP2.3 AES-шифрование не требуется; достаточно выбрать «RK3588» и «hdcp2x hdmirx».

Сервис hdcp2_rx_tx
Сервис загружается автоматически при запуске. При ошибках аутентификации просмотрите журнал командой logcat | grep HDCP2.
4.2 HDMITX
4.2.1 Настройка DTS
HDMITX и HDMIRX используют общий модуль HDCP. При включении HDCP2.3 по умолчанию также включается HDCP1.4:
&hdcp1 {
status = "okay";
};
Включение HDMI описано в Rockchip_Developer_Guide_HDMI_CN.
4.2.2 Упаковка прошивки и запуск сервисов
Распакуйте DWC_HDCP2_BASE_ESM_Firmware в Linux, затем скопируйте hdcp_transmitter.bin в корневой каталог и tools/. Если нужен HDMI RX, также скопируйте hdcp_receivers.bin в эти каталоги.
DWC_HDCP2_BASE_ESM_Firmware$
cp ../hdcp_receivers.bin .
cp ../hdcp_receivers.bin tools/
Для упаковки прошивки и TX KEY выполните build_rockchip_fw.sh:
DWC_HDCP2_BASE_ESM_Firmware$ ./build_rockchip_fw.sh
Во время упаковки необходимо ответить на несколько запросов:
Выберите тип прошивки. Для совместной поддержки HDMI TX/RX выберите 1 — build firmware for both HDMIRX and HDMITX; только для HDMITX — 2 — build firmware for HDMITX only. Итоговый файл: ./firmware/hdpc2_hdmi.fw.
1 -build firmware for both HDMIRX and HDMITX
2 -build firmware for HDMITX only
3 -build firmware for DP
Choose the fw type: 2
Сервис hdcp2_rx_tx
Сервис загружается автоматически при запуске. При ошибках аутентификации просмотрите журнал командой logcat | grep HDCP2.
4.3 DPTX
4.3.1 Настройка DTS
DPTX использует модуль HDCP0. Для включения HDCP2.3:
&hdcp0 {
status = "okay";
};
При включении HDCP2.3 по умолчанию включается и HDCP1.4.
4.3.2 Упаковка прошивки и запуск сервисов
Распакуйте DWC_HDCP2_BASE_ESM_Firmware в Linux и скопируйте hdcp_transmitter.bin в корневой каталог и tools/.
DWC_HDCP2_BASE_ESM_Firmware$
cp ../hdcp_receivers.bin .
cp ../hdcp_receivers.bin tools/
Для упаковки прошивки и TX KEY выполните build_rockchip_fw.sh:
DWC_HDCP2_BASE_ESM_Firmware$ ./build_rockchip_fw.sh
Процесс упаковки запрашивает ввод:
Выберите 3 — build firmware for DP; будет создан файл ./firmware/hdpc2_dp.fw.
1 -build firmware for both HDMIRX and HDMITX
2 -build firmware for HDMITX only
3 -build firmware for DP
Choose the fw type: 3
В Android для копирования hdcp2_dp.fw в /vendor/firmware/hdcp2_dp.fw можно добавить следующий патч в hardware/rockchip/hdcp2:
diff --git a/device.mk b/device.mk
index 6d6c328..d7ba0a2 100644
--- a/device.mk
+++ b/device.mk
@@ -82,6 +82,12 @@ ifeq ($(strip $(USE_PRODUCT_HDCP2_HDMI_FW)), true)
$(LOCAL_PATH)/hdcp2_hdmi.fw:vendor/firmware/hdcp2_hdmi.fw
endif
+USE_PRODUCT_HDCP2_DP_FW := $(shell test -f $(LOCAL_PATH)/hdcp2_dp.fw && echo true)
+ifeq ($(strip $(USE_PRODUCT_HDCP2_DP_FW)), true)
+ PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/hdcp2_dp.fw:vendor/firmware/hdcp2_dp.fw
+endif
+
#
# add Rockchip properties here
#
Поместите hdcp2_dp.fw в каталог проекта device/rockchip/rk3588/. При сборке файл будет скопирован в /vendor/firmware/hdcp2_dp.fw.
В Linux скопируйте hdcp2_dp.fw в /system/etc/firmware/hdcp2_dp.fw.
Сервис hdcp2_rx_tx
В Android добавьте следующий патч в hardware/rockchip/hdcp2:
diff --git a/init.hdcp2-host.rc b/init.hdcp2-host.rc
index 5a9bee8..57eef7e 100644
--- a/init.hdcp2-host.rc
+++ b/init.hdcp2-host.rc
@@ -1,7 +1,14 @@
#on early-boot
on post-fs
+ start hdcp2_dp
start hdcp2_hdmi
+service hdcp2_dp /vendor/bin/hdcp2_tx_rx 0
+ class core
+ oneshot
+ disabled
+ group root system net_admin net_bt
+ capabilities DAC_OVERRIDE
service hdcp2_hdmi /vendor/bin/hdcp2_tx_rx 1
class core
Сервис может автоматически запускаться при загрузке системы. При ошибках аутентификации просмотрите журнал командой logcat | grep HDCP2.
5. Проверка состояния HDCP
5.1 HDMIRX
cat /sys/class/misc/hdmirx_hdcp/status
HDCP Disable: HDCP is not enabled
HDCP1.4: Authenticated start: during authentication process
HDCP1.4: Authentication success: Authentication successful
HDCP1.4: Authentication failed: Authentication failed
HDCP1.4: Unknown status: Unknown status
Значения вывода: HDCP Disable — HDCP выключен; Authenticated start — идёт аутентификация; Authentication success — успешно; Authentication failed — ошибка; Unknown status — неизвестное состояние. Строки вывода сохранены как в английском исходнике.
HDCP Disable: HDCP is not enabled
HDCP2.3: Authentication success: Authentication successful
HDCP2.3: Authenticated failed: Authentication failed
HDCP2.3: No dectypted: Source end did not enable HDCP2.x
Значения вывода: HDCP Disable — HDCP выключен; Authentication success — успешная аутентификация; Authenticated failed — ошибка; No dectypted — источник не включил HDCP2.x. Написание dectypted сохранено из исходника.
Если источник не включил HDCP-шифрование или источник сигнала не подключён:
HDCP2.3: No dectypted
HDCP1.4: Unknown status
5.2 HDMITX
Состояние HDMITX проверяется через DRM PROPERTY. Пример просмотра свойств командой
modetest -c:
---------------------------------------------------------------------
Content Protection:
flags: enum
enums: Undesired=0 Desired=1 Enabled=2
value: 2
Undesired: Disable HDCP.
Desired: Enable HDCP.
Enabled: HDCP has been enabled and authenticated successfully.
---------------------------------------------------------------------
HDCP Content Type:
flags: enum
enums: HDCP Type0=0 HDCP Type1=1
value: 0
HDCP Type0: If either HDCP 1.4 or HDCP 2.3 authentication succeeds at any level, normal
video output is permitted.
HDCP Type1: Must be successfully authenticated with HDCP2.3 to output a normal display.
Note: The current version of the driver does not actually support this feature. By default,
any level of successful authentication can output normally, so no configuration is required.
---------------------------------------------------------------------
hdcp_encrypted:
flags: range
values: 0 2
value: 2
HDCP Authentication Level:
0: HDCP unauthorized.
1: hdcp1.4.
2: hdcp2.3.
---------------------------------------------------------------------
Описание свойств: Content Protection: Undesired отключает HDCP, Desired запрашивает включение, Enabled означает включение и успешную аутентификацию. HDCP Content Type: Type0 допускает изображение при успешной аутентификации любого уровня HDCP1.4 или HDCP2.3; Type1 требует HDCP2.3. Примечание исходника: текущая версия драйвера фактически не поддерживает этот выбор; по умолчанию достаточно любого успешного уровня, поэтому настройка не требуется. hdcp_encrypted: 0 — аутентификации нет, 1 — HDCP1.4, 2 — HDCP2.3.
5.3 DPTX
Метод просмотра тот же, что для HDMITX.
6. Разбор распространённых проблем
6.1 Ошибка запуска hdcp2_tx_rx
Просмотр журнала:
logcat | grep HDCP
Failed to open firmware file [vendor/firmware/hdcp2_hdmi.fw] // indicating the firmware was
not imported
Пояснение: прошивка не была импортирована.
Failed to open firmware driver /dev/hl_dev1 // indicating the hdcp driver is not loaded. The
DTS needs to enable the corresponding hdcp1 node.
Пояснение: драйвер HDCP не загружен; в DTS следует включить соответствующий узел hdcp1.
07-14 10:53:17.033 2042 2042 D HDCP2 : hdcp2 version v3.0
07-14 10:53:17.033 2042 2042 D HDCP2 : HDCP Port: 1
07-14 10:53:17.034 2042 2042 D HDCP2 : Firmware: [1]
07-14 10:53:17.034 2042 2042 D HDCP2 : 223664 bytes
07-14 10:53:17.034 2042 2042 D HDCP2 : check rx key ok
07-14 10:53:17.034 2042 2042 D HDCP2 : rxkey read from vendor success, rxkey_len = 1000
07-14 10:53:17.034 2042 2042 D HDCP2 : Host Library version V0201
07-14 10:53:17.035 2042 2042 D HDCP2 : Exiting with err=1
Если программа сразу завершается без сообщения об ошибке, её можно запустить вручную для получения подробностей:
console:/ # ./vendor/bin/hdcp2_tx_rx 1 &
[1] 2799
console:/ # device name = /dev/hl_dev1
<INFO> [external/hdcp/host_library/core_lib/host_lib_core.c:1199] [PID:2799] hlInst->driver->instance [0xee2401d0]
<INFO> [external/hdcp/host_library/core_lib/host_lib_core.c:1200] [PID:2799] hlInst->driver
[0xff8088f0:223664]
<WARN> [external/hdcp/host_library/core_lib/host_lib_core.c:1206] [PID:2799] Error in
file:external/hdcp/host_library/core_lib/host_lib_core.c, functio]
<ERROR> [external/hdcp/host_library/core_lib/host_lib_core.c:137] [PID:2799]
hostlib_init_mem failed
Failed HLC_Initialize, error -6
The logs of this type are caused by firmware packaging issues, which may be due to incorrect
KEY, improper DUK/PKf configuration, or incorrect packaging method. Refer to [HDCP 2.3
Firmware Packaging Instruction].
Такие сообщения связаны с упаковкой прошивки: возможны неверный KEY, неправильная настройка DUK/PKf или неверный способ упаковки. См. раздел об упаковке прошивки HDCP 2.3.
HLC_HDCPRX_LoadRxDwb failed // Indicates RX KEY is incorrect
Пояснение: неверный RX KEY.
6.2 Чёрный или зелёный экран HDMIRX, не восстанавливающийся после переподключения
Сначала проверьте наличие hdcp2x-enable в DTS. Командой cat /sys/class/misc/hdmirx_hdcp/enable проверьте, равно ли значение 2.
Если hdcp2x-enable включён, сервис hdcp2_tx_rx должен быть загружен; иначе возможен чёрный или зелёный экран. Проверьте это командой logcat | grep HDCP2.
Если hdcp2_tx_rx уже загружен, убедитесь, что он не завершился аварийно; также используйте logcat | grep HDCP2.
Если после echo 0 > /sys/class/misc/hdmirx_hdcp/enable нормальная работа восстанавливается, это подтверждает описанную проблему.
6.3 Кратковременные артефакты TX при отключении RX, когда HDCP2.3 включён одновременно на HDMITX и HDMIRX
HDMIRX и HDMITX используют общий контроллер HDCP2.3. Отключение RX во время предварительного просмотра сбрасывает контроллер и вызывает его нештатное состояние. Обнаружив это, hdcp2_tx_rx повторно инициализирует контроллер и выполняет аутентификацию, что вызывает кратковременный артефакт изображения. Исходник рекомендует не включать HDCP2.3 одновременно для TX и RX.
