Instalar o CH340 no UBUNTU

1) Pré-requisitos
Instale ferramentas de compilação e cabeçalhos do kernel:
sudo apt update
sudo apt install -y git build-essential dkms \
linux-headers-$(uname -r) kmod mokutil
O
dkmsé opcional, mas útil para recompilar o módulo após atualização de kernel.
2) Baixar o código-fonte
git clone -b ubuntu https://github.com/juliagoda/CH341SER.git
cd CH341SER
3) Compilar
make
Se tudo der certo, será gerado ./ch34x.ko.
4) (Opcional) Assinar o módulo para Secure Boot
Se o Secure Boot estiver ativado, o kernel só carrega módulos assinados.
4.1) Tentar assinar com MOK existente
Se seu sistema já possui uma chave MOK instalada (caminho padrão do Ubuntu):
sudo kmodsign sha512 \
/var/lib/shim-signed/mok/MOK.priv \
/var/lib/shim-signed/mok/MOK.der \
./ch34x.ko
4.2) Se não existir MOK (arquivos ausentes)
Crie e insira uma MOK (vai pedir senha e requer reboot para concluir o enrolment):
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der
# ou gere uma nova chave:
# sudo update-secureboot-policy --new-key
sudo reboot
Depois do reboot (MOK enrolada), volte à pasta do projeto e rode a assinatura (4.1).
5) Carregar o módulo
sudo make load
Isso deve carregar ch34x (e usbserial como dependência).
Para descarregar depois: sudo make unload ou sudo rmmod ch34x usbserial.
6) Verificar se o dispositivo apareceu
- Conecte seu Arduino/dispositivo CH341 na USB.
- Verifique logs e dispositivos:
dmesg | tail -n 50
lsmod | grep ch34
ls -l /dev/ttyUSB*
Você espera ver algo como ttyUSB0 sendo criado.
7) Tornar persistente (opcional)
Alguns Makefiles têm alvo install. Se existir:
sudo make install
sudo depmod -a
Sem install, você pode copiar manualmente e carregar no boot:
sudo mkdir -p /lib/modules/$(uname -r)/extra
sudo cp ./ch34x.ko /lib/modules/$(uname -r)/extra/
sudo depmod -a
echo ch34x | sudo tee /etc/modules-load.d/ch34x.conf
Com DKMS (se suportado pelo repo), o módulo recompila após updates de kernel. Este projeto não traz
dkms.confoficial; dá para criar um, mas mantendo simples, o passo acima resolve.
Compatibilidade
- Não é compatível com a placa Olimex ESP32-POE rev C.
Solução de Problemas
A) dmesg não mostra ttyUSB*, apenas:
usbserial: USB Serial support registered for ch34x
ch34x 3-2:1.0: ch34x converter detected
Possíveis causas e correções:
- Dependências ausentes (compilação incompleta)
- Refaça os passos 1 e 3, garantindo
build-essentialelinux-headers-$(uname -r)instalados.
- Refaça os passos 1 e 3, garantindo
- Conflito de hardware (protoboard)
- Se o Arduino está ligado a uma protoboard com jumpers, desconecte os fios (curto/conexão indevida pode impedir a enumeração correta). Conecte apenas via USB, teste novamente.
- Cabeçalhos do kernel faltando
- Instale
linux-headers-$(uname -r)e recompile:sudo apt install -y linux-headers-$(uname -r) make clean && make
- Instale
- Secure Boot bloqueando o módulo
- Assine o módulo (Seção 4) e recarregue:
sudo make unload sudo kmodsign sha512 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der ./ch34x.ko sudo make load
- Assine o módulo (Seção 4) e recarregue:
- Kernel sem
CONFIG_USB_SERIAL_CH341(desativado/ausente)- Verifique a config do kernel:
zcat /proc/config.gz | grep CH341 # ou grep CH341 /boot/config-$(uname -r) - Se estiver desabilitado, o módulo externo
ch34x.kodeve suprir. Se ainda assim não carregar, revise mensagens dodmesge confirme a versão do kernel/headers.
- Verifique a config do kernel:
- Permissões/Regra udev
- Adicione seu usuário ao grupo
dialoute reconecte:sudo usermod -aG dialout $USER sudo reboot - Depois do reboot, teste novamente
ls -l /dev/ttyUSB*.
- Adicione seu usuário ao grupo
B) Comando úteis de diagnóstico
modinfo ./ch34x.ko
sudo modprobe ch34x
dmesg | tail -n 100
journalctl -k -b | grep -i ch34
Dicas finais
- Sempre teste com outro cabo USB e outra porta.
- Evite hubs USB sem alimentação ao usar placas que consomem mais corrente.
- Para Arduino: desconecte tudo da protoboard, conecte apenas USB, identifique
ttyUSB*, e só então reconecte os periféricos.
Este tutorial foi baseado na seguinte referencia.
https://github.com/juliagoda/CH341SER?tab=readme-ov-file#tutorial-on-ubuntu































