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.conf
oficial; 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-essential
elinux-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.ko
deve suprir. Se ainda assim não carregar, revise mensagens dodmesg
e confirme a versão do kernel/headers.
- Verifique a config do kernel:
- Permissões/Regra udev
- Adicione seu usuário ao grupo
dialout
e 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