Multilaser M11W (e outros modelos) com touch no Linux

INTRO

Os M11W vêm com touch screen da Silead. Portanto, é necessário baixar o respectivo firmware.

O Linux possui suporte para esse hardware, mas não de todos os equipamentos. Existe um projeto que tenta organizar todos os firmwares em um só lugar. O link é

Infelizmente, o M11W não está lá.

Outro problema é que o suporte padrão das distribuições Linux para estes drivers possui codificação no próprio kernel. Mesmo que tivéssemos o firmware da Silead para o M11W, precisaríamos inserir algumas informações diretamente no kernel e recompilá-lo.

Para contornar esse problema, existe um outro driver para este hardware. Este driver alternativo espera que algumas informações (tais como, as dimensões da tela do touch, a orientação dos eixos x e y, entre outras) estejam inseridas dentro do próprio firmware (e não no kernel). O driver pode ser baixado em

Em suma, existem dois drivers open-source para o Silead. A figura a seguir ilustra algumas diferenças entre eles.

O driver que queremos utilizar está no segundo git e precisa ser compilado. Basta um comando make (assumindo que as dependências estão instaladas, tais como ‘make’ e ‘gcc’).

HACKEANDO O FIRMWARE

Agora só precisamos do firmware no formato exigido para o 'gslx680_ts_acpi.ko’. Assim, não precisaremos nos preocupar em alterar e compilar o kernel. Quando tivermos esse firmware em mãos, só precisaremos renomeá-lo para ‘silead_ts.fw’ e copiá-lo para o folder ‘/lib/firmware’ tal como ilustrado na figura.

O problema é que esses firmwares não estão “por aí”. Só encontraremos com facilidade o driver pro Windows.
Se tivéssemos ferramentas para converter o firmware fornecido no Windows para o formato que desejamos, seria uma mão na roda.

A boa notícia é que o git que forneci no primeiro link contém um folder chamado “tools” que possui todas as ferramentas necessárias para a conversão.

De posse do driver para o Windows do modelo M11W (precisa ser do mesmo modelo. Se você tiver um M8W, procure o driver do Windows para M8W. Se tiver um modelo XXXQQC, procure o driver para esse modelo) localize o arquivo do firmware. Ele se chama ‘SileadTouch.fw’.

As ferramentas que utilizaremos são o ‘unscramble’ e o ‘fwtool’. A primeira
converte o firmware do Windows para um formato reconhecido pelo Linux, sem agregar algumas informações importantes.

Já o ‘fwtool’ converte o firmware gerado para o formato que queremos. A figura a seguir ilustra o papel de cada ‘tool’, assumindo que você se localiza na pasta raiz do primeiro git.

Para facilitar, os comandos estão aqui para o copy/paste

./tools/unscramble SileadTouch.fw silead.fw

./tools/fwtool -c silead.fw -m 1680 -w 1920 -h 1270 silead_ts.fw

O X

Um passo adicional é instalar o ‘evdev’. Você pode se inteirar melhor pesquisando sobre esse produto na net. Instruiremos o X para que use o ‘evdev’ como ‘driver’. A instalação do ‘evdev’ é muito simples. basta o comando

# apt install xserver-xorg-input-evdev

Para informar o X sobre o novo dispositivo crie o arquivo ‘/usr/share/X11/xorg.conf.d/99-calibration.conf’ com o seguinte conteúdo.

Section "InputClass"
Identifier "calibration"
MathProduct "Silead GSLx680 Touchscreen"
Option "Calibration" "5 1916 6 1269"
Option "SwapAxes" "0"
Driver "evdev"
EndSection

Se você ainda não copiou o firmware convertido para o lugar certo, está na hora de fazê-lo. O driver que utilizaremos procura especificamente pelo arquivo ‘/lib/firmware/silead_ts.fw’, conforme vimos na primeira figura.

TOUCHEANDO

Está tudo pronto. Podemos carregar o driver. Se você está na pasta raiz do segundo git, basta o comando.

# insmod ./gslx360_ts_acpi.ko

O driver vai carregar e o touch estará funcionando.

Caso deseje contribuir, você pode fazer um 'fine-tuning’ nos parâmetros que utilizamos. Falando por mim, estou satisfeito com esse resultado.

Se quiser contribuir ainda mais e possuir o 'skill’ necessário, você pode fazer as alterações no kernel e sugerir um path.

6 curtidas

Olá, alguém teria o driver para Windows mesmo e poderia compartilhá-lo comigo? Tive que formatar a partição que tinha Windows para instalar o Ubuntu, depois tentei voltar para o Windows, mas o touch nunca mais voltou a ser como antes. a tela parece estar dividida e o touch se move na direção contrária ao toque. Usei o Multisync para restaurar o Windows inclusive segui alguns tutoriais de como retaurar esse driver usando o Ubuntu para colá-lo na pasta do Windows, porém tudo sem sucesso e contatando o suporte da Multilaser eles só me deram a opção de mandar para o reparo.

Adorei a ideia de touchscreen no Ubuntu, contudo, achei o artigo um pouco confuso. Não ficou claro se precisaria do driver para Windows ou é que é baixado no segundo repositório.
Agora que expandi o armazenamento dele eu só queria os dois sistemas operacionais funcionando nele e o touch pelo menos no Windows, pois foi uma das principais funcionalidades que me levou a comprá-lo, fora os preços exorbitantes e a necessidade que tive de um reserva quando meu principal deu problema.

Qual driver?

https://arquivos.multilaser.com.br/suporte/a234kUlkp1mAtvdVYv4nb6Ydf8QR2AjWIWNXzbS2.zip

https://drive.google.com/file/d/1DF4iXx_dIKXU669zYTTmmP81dOtqsv5o/view
http://dados.mirage.com.br/sac/Infograficos/Tablet/Como%20instalar%20os%20drivers%20M11W.pdf
http://186.215.235.83:8080/drivers/15/multilaser_m11w.zip

Tente esses, imagino que um deles deva dar certo.

Cara, né esse não. Eu consegui restaurar o touch no Windows pela ferramenta que eles disponibilizam mesmo, parece que eles atualizaram. Porém, não tem esse arquivo com a extensão .fw. Eu usei esse do drive na tentativa de fazer o touch funcionar em um pendrive persistente e uma instalação que eu tinha aqui e agora não consigo mais fazer login na tela inicial. Alguma ideia de como reverter isso? E sobre o driver que aparece no Windows há 4 arquivos 3 com extensão .sys e outro .inf, sabe dizer qual deles é o firmware? Vou fazer uma última tentativa, só não quero ferrar meu boot ou login de novo.

O Windows não dá boot? Você pode tentar restaurar o Windows para um estado anterior ou usar um pendrive com iso do Windows para restaurar o boot. Infelizmente, esses foram os únicos arquivos que encontrei. Esse equipamento é um white label, se soubéssemos qual o fabricante original e o respectivo modelo seria fácil encontrar os drivers.

Não não, após reinstalar o Windows pelo Multisync ele tá funcionando like a charm, mas depois de seguir esse tutorial pra instalar o drive de touch no Linux o Ubuntu parou de funcionar, ainda dá boot e tal, mas fica em loop no login. Desativei o quite splash e vejo uma mensagem que diz algo como carregando Silead touch, mas aí na tela de login quando volta pra mesma tela e o mouse volta pra posição inicial. Ainda consigo bootar por uma live não persistente, sabe como desfazer esse processo, desinstalar esse driver ou desativar o carregamento dele no boot?

1 curtida

Tenho um AlldoCube Knote 5 Pro que usa os mesmos drivers Silead, poderia me ajudar? Consegui fazer funcionar mas a calibragem da tela não fica correta, como conseguiu a resolução correta do touchscreen?

2 curtidas

Oi, bom dia!
Então, já tentei usar este firmware, mas dá o seguinte erro:

gslx680_ts_acpi.ko: Invalid module format

Já procurei a respeito disso e não encontrei nada que pudesse ajudar, tentei diversas coisas e nada.

Tente o que foi feito nesse tópico:

Deve dar certo.

1 curtida

Infelizmente não funcionou e pior, com as outras distros deu problema (travamento, tablet esquentando muito), só o Debian está funcionando tranquilamente.
Mas assim, sem touch em todas as distros e, esse drivers não funciona aqui, não sei porquê, mas não haveria outra opção?

1 curtida

Infelizmente, acho que só por esses métodos com firmware.

Pessoal, como vcs conseguiram dar boot com linux neste note? estou tentando e não consigo de forma alguma.

não funcionou de primeira, dei uma olhada em dmesg e vi que houve uma falha ao carregar o firmware por que um dos parametros estava como zero, então eu refiz o silead_ts.fw com o comando
./tools/fwtool -c silead.fw -m 1680 -w 1920 -h 1270 -t 10 silead_ts.fw
agora está funcionando.

1 curtida