martes, 22 de octubre de 2019

Compilar el plugin de mysql para Qt 5.12.0 en Ubuntu 18.04

Requisitos:

  • Tener instalado Qt 5.12.0 con el código fuente.
  • Tener instalado libmysqlclient20 y libmysqlclient-dev 


Debes ingresar a la carpeta

RUTA_QT/Qt/5.12.0/Src/qtbase/src/plugins/sqldrivers$

y ejecutar RUTA_QT/Qt/5.12.0/gcc_64/bin/qmake dentro de ésta. Luego mostrará un resumen con todos los drivers disponibles, entre los cuales estará el de MySQL, deberá decir ....... yes

Configure summary:

Qt Sql Drivers:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. yes
  OCI (Oracle) ........................... no
  ODBC ................................... no
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'make'.
Once everything is built, Qt is installed.
You should NOT run 'make install'.
Note that this build cannot be deployed to other machines or devices.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.


Luego ejecutamos make

NO EJECUTAR make install, en su lugar es mejor copiar la librería compilada libqmysql.so la cual deberá estar en la ubicación RUTA_QT/Qt/5.12.0/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ en la siguiente ubicación RUTA_QT/Qt/5.12.0/gcc_64/plugins/sqldrivers/$ reemplazando la antigua.

Con esto tendremos listo el plugin.

Compilar el plugin QMYSQL para Qt 5.13.x en Windows 10

Para realizar la compilación del plugin QMYSQL, es necesario descargar el código fuente de Qt, en éste caso la versión 5.13 desde el Qt Maintenance Tool.

Luego es necesario descargar la librería de MySQL desde su sitio web. Para Qt 5.13 será necesario descargar mysql-5.7.25, como se indica aquí.

La arquitectura (32 ó 64) dependerá de que versión de Qt 5.13 se haya instalado, si de 32 ó 64 bits.

Descomprimimos la libreria en cualquier ubicación, de preferencia en C:/mysql/mysql-5.7.25-winXX.

Para compilar, ejecutamos la consola de Qt que normalmente viene con la instalación. En el menú Inicio buscamos "Qt 5.13.1 (MinGW 7.3.0 64-bit)"



Luego nos dirigimos al directorio donde se encuentra el código fuente, en mi caso:
  • C:\Qt\5.13.1\Src\qtbase\src\plugins\sqldrivers>
Y ejecutamos el siguiente comando:
  • qmake -- MYSQL_INCDIR=C:/mysql/mysql-5.7.25-winx64/include MYSQL_LIBDIR=C:/mysql/mysql-5.7.25-winx64/lib



Deberá dar el resultado mostrado en la imagen anterior. Donde indica que MySQL está disponible para ser compilado.

Entonces ejecutamos:
  • mingw32-make
  • mingw32-make install
Quedando así instalado el plugin y listo para usar.

martes, 16 de agosto de 2016

Instalar MySQL server en un servidor linux y configurarlo

Esta guía indica como instalar MySQL server en cualquier servidor basado en la distribución Debian (Ubuntu, Raspi OS, etc)

Primer paso: instalar MySQL server, para esto ejecutamos:

$ sudo apt-get install mysql-server


Posteriormente, para realizar la configuración de MySQL se puede ejecutar el comando:

$ mysql_secure_installation

Seguir los pasos que solicita el script para la configuración de MySQL Server

Segundo paso: necesitamos configurar las opciones para poder conectarnos de forma remota a la base de datos, para esto editamos el archivo mysqld.cnf en las versiones más nuevas:

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 

comentamos las siguiente línea:

# bind-address 127.0.0.1

y reiniciamos:

$ sudo systemctl restart mysql.service

En las versiones más antiguas de Ubuntu Server, el archivo a editar es:

$ sudo nano /etc/mysql/my.cnf

y comentamos la siguiente línea, de esta forma:

# bind-address 127.0.0.1

reiniciamos el servicio mysql ejecutando:

$ sudo /etc/init.d/mysql restart

Sí no realizamos estos pasos, al querer ingresar a la base de datos de forma remota, aparecerá un mensaje como el siguiente:

Failed to Connect to MySQL at 192.168.0.xxx:3306 with user TU_USUARIO

Can't connect to MySQL server on '192.168.0.xxx' (111)

Tercer paso: ahora configuramos los usuarios permitidos para hacer gestión remota de la base de datos.

Lo mas probable es que ahora al intentar ingresar te aparezca un error como este:

Failed to Connect to MySQL at 192.168.0.xxx:3306 with user TU_USUARIO

Host 'miDispositivo' is not allowed to connect to this MySQL server

Entonces, en la terminal del servidor ejecutamos:

$ mysql -u root -p


Necesitamos ingresar el password del usuario root para realizar esto. Ya una vez adentro de la consola de mysql, creamos un usuario para gestión y le damos permisos de la siguiente forma:

mysql> CREATE USER 'tuUsuario'@'localhost' IDENTIFIED BY 'tuPassword';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tuUsuario'@'localhost' WITH GRANT OPTION;
mysql> CREATE USER 'tuUsuario'@'%' IDENTIFIED BY 'tuPassword';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tuUsuario'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Es muy recomendable crear un usuario diferente de root para la administración de la base de datos, este usuario va a tener todos los permisos de un administrador.

De todas formas, si es necesario dar acceso a root desde cualquier IP, se debe ejecutar los siguientes comando:

mysql> CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'tuPassword';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Listo, con esto el servidor está listo para ser usado.

martes, 17 de mayo de 2016

Habilitar el bus SPI en Olimex Olinuxino A20 y similares

Saludos

En esta ocasión indicaré los pasos que seguí para habilitar el módulo SPI en el espacio de usuario, en Olinuxino A20 Micro, con un kernel mainline compilado por mi (los detalles para compilar tu propio kernel los daré posteriormente).

IMPORTANTE antes de continuar:
Esta guía requiere que tengas nociones de programación, y experiencia compilando el kernel Linux.

Es necesario que dispongas del código fuente de Linux, descarga el código desde el repositorio de  tu preferencia, recomiendo la última versión estable (a la fecha la 4.9.30, ya que las versiones anteriores tienen problemas con el controlador Ethernet).

Primer paso (Reconocer el hardware): Lo más probable es que hayas comprobado que tu módulo SPI no está disponible en el espacio de usuario, es decir, si ejecutas

ls /dev/spi*

el comando no encontrará ningún dispositivo SPI, caso contrario aparecerá algo similar a esto:

/dev/spidev1.0
/dev/spidev1.1

El driver del kernel asigna los nombres spidevX.Y a los buses SPI que se encuentren configurados, siendo X el numero de puerto (del alias, no del puerto físico, esto será aclarado posteriormente), es decir:
SPI1 = spidev0.Y
SPI2 = spidev1.Y

el valor Y viene a ser el índice del dispositivo colgado al bus, por ejemplo, tenemos dos dispositivos conectados al puerto SPI2, cada uno de ellos con su propia línea de chip select csY, entonces:

dispositivo 1: (cs0) = spidev1.0
dispositivo 2: (cs1) = spidev1.1


La siguiente imagen muestra los puertos disponibles en el Olinuxino A20



Entonces, por ejemplo, mi aplicación utiliza dos dispositivos SPI, los cuales he conectado en el GPIO-3, en los pines

  • SPI2-CS1 -> 24      -  PB13
  • SPI2-CS0 -> 26      -  PB14
  • SPI2-CLK -> 28      -  PB15
  • SPI2-MOSI -> 30    -  PB16
  • SPI2-MISO -> 32    -  PB17
Aprovechando que estos pines CS0 y CS1 son propios del módulo SPI2.

Segundo paso (Definir el hardware):
Ahora vamos a habilitar el módulo dentro del árbol de dispositivos, el cual es un archivo que define la estructura de hardware del dispositivo, el driver usa ésta información para permitir el acceso a los buses tal y como indiqué anteriormente; para esto vamos a sacar una copia de respaldo y a editar el siguiente archivo:

cp RUTA_DEL_CODIGO/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts RUTA_DEL_CODIGO/arch/arm/boot/dts/sun7i-a20-olinuxino-micro-original.dts


Abrimos el archivo sun7i-a20-olinuxino-micro.dts, el cual viene por defecto con la siguiente configuración del SPI:


&spi2 {
    pinctrl-names = "default";
    pinctrl-0 = <&spi2_pins_a>,
         <&spi2_cs0_pins_a>;
    status = "okay";
};

Y hacemos el cambio para configurar nuestros dispositivos:


&spi2 {
    pinctrl-names = "default";
    pinctrl-0 = <&spi2_pins_b>,
         <&spi2_cs0_pins_b>,          <&spi2_cs1_pins_a>;     status = "okay";          spi2_0 {         #address-cells = <1>;         #size-cells = <0>;         compatible = "spidev";
        reg = <0>;         spi-max-frequency = <50000000>;     };
    spi2_1 {         #address-cells = <1>;         #size-cells = <0>;
        compatible = "spidev";
        reg = <1>;         spi-max-frequency = <50000000>;     };
};


El índice del dispositivo será reg = <Y>;

En estas líneas estamos activando los dispositivos para el espacio de usuarios, es decir, ahora podemos abrir el SPI accediendo a su respectivo /dev/spidevX.Y, aquí se crean los alias.

Ahora es necesario también editar el archivo sun7i-a20.dtsi el cual originalmente viene con el siguiente fragmento de código:


spi2_pins_a: spi2@0 {
                allwinner,pins = "PC20", "PC21", "PC22";
                allwinner,function = "spi2";
                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
            };

            spi2_pins_b: spi2@1 {
                allwinner,pins = "PB15", "PB16", "PB17";
                allwinner,function = "spi2";
                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
            };

            spi2_cs0_pins_a: spi2_cs0@0 {
                allwinner,pins = "PC19";
                allwinner,function = "spi2";
                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
            };

            spi2_cs0_pins_b: spi2_cs0@1 {
                allwinner,pins = "PB14";
                allwinner,function = "spi2";
                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
            };

Analizando este fragmento de código, nos podemos dar cuenta que nuestro dispositivo puede utilizar la configuración spi2_pins_b con spi2_cs0_pins_b, pero no disponemos del segundo chip select que requerimos, el cual está conectado a PB13, entonces necesitamos agregar ésta opción, mediante el siguiente fragmento de código:

            spi2_cs1_pins_a: spi2_cs1@0 {
                allwinner,pins = "PB13";
                allwinner,function = "spi2";
                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
            };

Con este cambio ahora las opciones de pines son spi2_pins_b, spi2_cs0_pins_b además de spi2_cs1_pins_a (que fue agregado en este último paso), y por ésta razón se seleccionan estos pines en el archivo sun7i-a20-olinuxino-micro.dts.

Ahora, para que todo esto funcione, es necesario que el driver SPI tenga habilitada la opción para uso en el espacio de usuarios, para esto es necesario configurar el código fuente y compilarlo.


Tercer paso (Habilitación del driver en el kernel):

Accedemos al menú de configuración del kernel ejecutando:

make ARCH=arm CROSS_COMPILE=/RUTA/DE/TU/COMPILADOR/arm-linux-gnueabihf- menuconfig


Activar la opción para que sea compilada en el kernel y no como modulo:
  •  Device Drivers --->
  • SPI support --->
  • User mode SPI device driver support

Realizar las configuraciones que se requieran y guardarlas, para luego ejecutar:

make ARCH=arm CROSS_COMPILE=/RUTA/DE/TU/COMPILADOR/arm-linux-gnueabihf- -j4 zImage dtbs


La opción j4 índica el número de núcleos usados para la compilación, depende de tu procesador, donde 4 indica 4 núcleos.


Luego se ejecuta:


make ARCH=arm CROSS_COMPILE=/RUTA/DE/TU/COMPILADOR/arm-linux-gnueabihf- INSTALL_MOD_PATH=output -j4 modules_install


Esto para compilar e instalar los módulos en la ubicación output dentro de la ubicación donde estés compilando el código, y posteriormente copiar los archivos generados en la compilación y sustituirlos por los que tengas en tu dispositivo.



viernes, 30 de octubre de 2015

TIA Portal V11 corriendo en Windows 7 32 bits virtualizado en VMWare 12, host Ubuntu 15.04 64 bits, problemas de red

Saludos

Comparto lo que me animó a bloggear por primera vez en éste medio

Tuve la necesidad de usar y programar un PLC Siemens S7-1200 por medio de ethernet, y ya que tengo instalado Ubuntu como sistema nativo en mi maquina, tuve que virtualizar Windows 7 32 bits para hacer uso de TIA Portal v11 y así poder programar e interfazar el PLC.

Para entender mejor el problema: Mi host es Ubuntu 15.04 de 64 bits. Resulta que al instalar VMWare bajo un sistema nativo de 64 bits, la interfaz de red seleccionada por defecto es Intel e1000.  TIA Portal no soporta ésta interfaz, así que hay que hacer un pequeño cambio en la configuración del archivo SU_MAQUINA_VIRTUAL.vmx

Encontrarán esto

ethernet0.virtualDev = "e1000"

Cambiar por esto

ethernet0.virtualDev = "vmxnet3"

Obviamente en el guest debe estar instalado el VMWare Tools para que esto funcione.

Reinicié el guest, Windows detectó la nueva interfaz, y listo, eso fue todo.

Espero que les sirva, Este es el link en donde encontré la información

Adiós

Mi primera entrada

Saludos

Ésta es mi primera entrada a un blog, aunque ya llevaba registrado hace mucho tiempo no he tenido la necesidad de escribir nada aún por este medio, pero ahora voy a intentar compartir algo de mi experiencia, sobre todo en el ámbito tecnológico, que es mi quehacer diario.

Espero que cualquier cosa que publique por este medio, sirva a alguien más, así como me sirvió a mi en su momento, de hecho eso es todo.

Adiós