A compilação dos meus drivers de vídeo gera o seguinte erro:
xilinx-dma.h:51: retornar container_of(e->pipe, struct xvip_pipeline, pipe);
Descobrimos que a seguinte linha foi removida da estrutura media_entity {} definida em ./media/media-entity.h
int stream_count; struct media_pipeline *pipe; In kernel version 6.1.55 (Build in ARM64 architecture)
O driver de vídeo é compilado corretamente na versão 5.15.0-131 do kernel. (Construído na arquitetura x86_64)
Estou me perguntando o motivo da remoção do *pipe e como resolver isso?
Obrigado, Tigre
Essa é uma política do kernel, documentada aqui .
Resumindo: você deve saber que o kernel é muito, muito cuidadoso para nunca quebrar a API do userspace. Basicamente, no que diz respeito ao kernel, você pode obter um aplicativo construído em algum ano de 1995 e ele ainda rodará bem no kernel de hoje.
Bem, isso é diferente com o interior do kernel. O kernel tem ≈34 anos neste momento, e a razão pela qual ele ainda é desenvolvido muito bem e não se afogou sob faixas de legado é que o interior está sendo constantemente refatorado. Para facilitar essa longevidade, o kernel estabeleceu que quem quiser escrever um driver deve contribuí-lo para o kernel, para que os desenvolvedores do kernel se certifiquem de que ele sempre funcione. É tecnicamente possível escrever um driver e não contribuí-lo, mas aí você está por conta própria.
Dito isto…
…você está claramente compilando um driver de terceiros que não foi contribuído para o kernel. Conforme explicado acima, garantir que ele funcione requer que quem mantém o driver atualize as interfaces para cada versão principal do kernel. Os autores do driver, presumo, foram preguiçosos em enviá-lo para o upstream, e depois pararam de manter o driver completamente (porque o 6.1 para o qual você está compilando tem 3 anos neste momento — quero dizer, não a versão secundária, mas a principal) , então você precisaria atualizar o driver você mesmo se quiser que ele seja compilado para o kernel mais novo.
PS : se você estiver disposto a atualizar o driver, para evitar pesquisar, você pode baixar o driver Linux proprietário da NVidia e olhar o código DKMS deles. Tenho certeza de que todos os
#ifdef
s que você precisaria adicionar para seu driver estarão lá, então você poderia apenas replicar o que eles fizeram.Mas enviar o driver para o upstream seria a melhor opção, é claro 😊