O erro não vem do compilador, ele vem do vinculador. Os arquivos de cabeçalho contêm apenas a declaração de funções, eles não contêm o código da função, portanto, ter a função declarada em um cabeçalho não é suficiente para executá-lo. O linker do tempo de criação avisa que não encontrou um local onde a função esteja definida. Quando você tenta carregar o módulo, o kernel executa as últimas etapas de vinculação. Nesse estágio, todas as funções usadas pelo módulo carregado devem ser definidas pelo kernel em execução. No seu caso, crc8
é requerido pelo módulo, mas não definido pelo kernel, então o módulo não pode ser carregado.
A função crc8
é um recurso opcional que deve ser ativado com CONFIG_CRC8
(“ Função CRC8 ”em“ Rotinas da Biblioteca ”) no momento da criação. Pode ser carregado como um módulo também chamado crc8
. Experimente
modprobe crc8
Se isso funcionar, sua instalação terá o módulo crc8
. Depois de compilar o bq76pl536
e instalá-lo em /lib/modules
, execute depmod -a
; isso gera um arquivo de dependência e, após esse carregamento, o bq76pl536
normalmente (ou seja, com modprobe bq76pl536
, não diretamente com insmod
) também carregará o módulo crc8
.
Se isso não funcionar, sua instalação não terá o módulo crc8
e você precisará recompilar um kernel com ele. Use o pacote e a configuração do Ubuntu (exceto para alterar esse item de configuração). Veja o wiki do Ubuntu para um passo a passo. Como você modificou a configuração, adicione um modificador de versão em debian.master/changelog
conforme explicado no wiki. Em seguida, reinicialize sob o novo kernel e recompile o módulo bq76pl536
contra o novo kernel.