Driver Moschip MCS9865 – Serial Flexport FX2S PCI LP/2 para Linux CentOS

Nestas aventuras no mundo da automação comercial de varejo, novos hardwares para pdv são frequentes, em cada loja nova inaugurada algum novo dispositivo surge e uma nova batalha é traçada para fazer os sistemas legados manterem compatibilidade com estes hardwares.

Usamos o sistema da Zanthus, o Zeus Frente de Loja, nos pdvs da rede de supermercados do qual trabalho, este sistema possui um instalador baseado no CentOS e nele não há módulo adequado para a placa multiserial FlexPort FX2S PCI LP/2 Serial, sendo necessário compilar e instalar como módulo do kernel para viabilizar os uso das seriais no sistema.

Para instalar este módulo, pode-se seguir os passos abaixo:

1- Tenha certeza que a placa serial é mesmo uma Moschip MCS9865, com o comando:

lspci -v

A saída deste comando deve listar informações de todas as placas PCI, procure pela 9865. As informações que você precisa, deverá ser semelhante ao exemplo abaixo:

03:01.0 Serial controller: NetMos Technology Unknown device 9865 (prog-if 02 [16550])
	Subsystem: Unknown device a000:1000
	Flags: bus master, medium devsel, latency 32, IRQ 209
	I/O ports at df00 [size=8]
	Memory at fdeff000 (32-bit, non-prefetchable) [size=4K]
	Memory at fdefe000 (32-bit, non-prefetchable) [size=4K]
	Capabilities: [48] Power Management version 2
 
03:01.1 Serial controller: NetMos Technology Unknown device 9865 (prog-if 02 [16550])
	Subsystem: Unknown device a000:1000
	Flags: bus master, medium devsel, latency 32, IRQ 217
	I/O ports at de00 [size=8]
	Memory at fdefd000 (32-bit, non-prefetchable) [size=4K]
	Memory at fdefc000 (32-bit, non-prefetchable) [size=4K]
	Capabilities: [48] Power Management version 2

2- Para compilar o módulo é necessário ter o pacote de desenvolvimento do Kernel, para garantir que o seu ambiente atenda estes requisitos, use o comando que segue:

yum install kernel-devel kernel-headers

3- Baixe o pacote tarball com os fontes do driver, siga o link a seguir e faça o download:

msc9865_linux.tar.gz

4- Agora já poderemos compilar e instalar o módulo MSC9865 para o Kernel, use a sequência de comandos abaixo para descompactar, compilar e instalar:

tar zxvf MCS9865_Linux.tar.gz
cd MCS9865_Linux
make
make install

5- Após reiniciar a placa multiserial deverá funcionar normalmente, entretanto serão criados dispositivos de caractere no sistema de arquivos fora do padrão comum, como /dev/ttyS0 para porta COM1, então se o seu sistema espera por estes endereços para encontrar as portas seriais será necessário criar links simbólicos que apontem para este sistema de arquivo. Supondo que desejamos liberar as portas seriais da placa MCS9865 como portas COM3 e COM4, devemos criar os links como nos exemplos abaixo:

ln -sf /dev/ttyD0 /dev/ttyS2
ln -sf /dev/ttyD1 /dev/ttyS3

6- Após o comando acima, as portas estarão disponíveis como portas 3 e 4 no sistema, entretanto há casos onde o módulo não é iniciado automaticamente, para evitar este problema, podemos configurar para carregar automaticamente o módulo ao iniciar o computador nos níveis inicialização mais usados, o nível 3 (shell com multiusuário) e o nível 5 (X com multiusuário). Para configurar desta forma podemos usar os comandos que seguem:

echo "modprobe mcs9865" >> /etc/init.d/mcs9865
echo "modprobe mcs9865-isa" >> /etc/init.d/mcs9865

7- Acerte a permissão do arquivo criado para permitir a execução dele:

chmod +x /etc/init.d/mcs9865

8- Crie os links simbólicos para iniciar no nível 3 e 5:

ln -s /etc/init.d/mcs9865 /etc/rc.d/rc3.d/Smcs9865 || true
ln -s /etc/init.d/mcs9865 /etc/rc.d/rc5.d/Smcs9865 || true

9- Por fim devemos incluir no rc.local, com os comandos abaixo, as linhas que fazem os links simbólicos para os novos dispositivos criados (no exemplo abaixo as portas serão disponibilizadas no sistema como portas COM3 e COM4):

echo "/bin/ln -sf /dev/ttyD0 /dev/ttyS2" >> /etc/rc.local
echo "/bin/ln -sf /dev/ttyD1 /dev/ttyS3" >> /etc/rc.local