DRM function "drm_do_get_edid" is removed.
首先,github 上有民间驱动,及 ms912x repo。 其维护者在收到该消息后更改了相关调用使得我可以正常编译。 但,该仓库作为官方驱动,丝毫不顾及 linux 内核的任何改动。 请看第一个错误:
../usb_hal/usb_hal_thread.c:244:57: 错误:invalid use of undefined type ‘struct sg_table’ 244 | data_urb->num_sgs = usb_dev->usb_buf.sgt->orig_nents; | ^~ ../usb_hal/usb_hal_thread.c:245:52: 错误:invalid use of undefined type ‘struct sg_table’ 245 | data_urb->sg = usb_dev->usb_buf.sgt->sgl; | ^~ 再看第二个错误(该错误我改了 drm_do_get_edid 为 drm_edid_read_custom)
msdisp_drm_connector.c: 在函数‘msdisp_drm_detect’中: msdisp_drm_connector.c:189:32: 错误:assignment to ‘const struct edid *’ from incompatible pointer type ‘const struct drm_edid *’ [-Wincompatible-pointer-types] 189 | msdisp_connector->edid = drm_edid_read_custom(connector, msdisp_drm_get_edid_block, pipeline); | ^
第一个错误我没有深究。 第二个错误很明显了,既然 drm_do_get_edid 已经被废弃在新内核中,那么正常来说应切换为目前并没有被删除的 drm_edid_read_custom 函数,且该函数调用与 drm_do_get_edid 完全相同。 但返回值为 drm_edid,与其他函数的 edid 参数完全不兼容,我一个人无法撬动这整个代码并把所有 edid 写的全部更改为 drm_edid。