GNU/Linux Programación.
Uno de mis hobbies y en realidad mi trabajo diario consite en la
programación en entornos Unix, especialmente GNU/Linux.
Tengo una serie de programas sencillos que he ido desarrollando para
resolver problemas propios y algunos otros desarrollos que han sido
creados dentro de proyectos de la empresa pero que en todos los caso
están bajo licencia GPL.
En la mayoría de los casos no son programas muy útiles, pero pueden
servir como ejemplos de desarollos en linux.
La página se compone de una seríe de secciones:
Drivers linux
Estos drivers pueden servir como ejemplo de desarrollo de drivers para
kernels 2.2.x. Seguramente un dia de estos tendré que dedicarme a
cambiarlos para que compilen tanto en estas versiones como en las de
la serie 2.4.x.
En todo caso aunque cumplen con la funcionalidad para la que fueron
desarrollados (más o menos), no son ni con mucho unos buenos drivers,
pero puede que sirvan a alguien como material de lectura.
ppdio
Este driver fue uno de los primeros que hice y es simplemente un
modulo que se carga por encima del modulo parport y que permite leer y
escribir a nivel de bit en el puerto paralelo.
Lo cree para hacer la prueba de si podía controlar un motor paso a
paso desde el puerto paralelo, y además y sobretodo para aprender a
realizar un módulo del kernel.
El código fuente te lo puedes descargar desde aquí
acl7130
Este driver permite controlar las funciones básicas de la tarjeta de
entradas y salidas digitales ACL7130.
Básicamente lo único que hace este driver es leer de ciertas
direcciones de memoria y escribir en ciertas direcciones de memoria, y
poner a disposición del usuario estos datos a través de un fichero de
dispositivo de tipo caracter.
Por ahora está implementadas ciertas IOCTLs para hacer uso de un timer
interno que tiene y que puede generar interrupciones, pero la verdad
es que todavía no está completado y dado que esa funcionalidad no la
necesitavamos es posible que no pueda dedicarle tiempo a terminarla.
El código fuente te lo puedes descargar desde aquí
Desarrollos Python
Últimamente estoy intentando aprender a usar este potente lenguaje,
que por la poca experiencia que tengo con el mismo he podido ver que
se trata de un lenguaje orientado a objetos bastante claro y muy
apropiado para el "scripting", los prototipos gráficos, y los "front-ends"
Por ahora he incluido los siguientes programas/scripts:
-
dinmenu Es un programa que se
encarga de generar un menú a partir de un fichero de
configuración de texto. El menú es creado con gtk y nos permite
seleccionar que al seleccionar una opción se ejecute un comando
arbitrario que habremos definido en el fichero de configuración.
El tgz también incluye un ejemplo de el formato básico del
fichero. Yo lo uso como fronted del xmame y sirve como pieza
principal del sistema de
ocio que uso actualmente en mi casa.
ordenador.
-
cgrep.py Script que sacar por la salida
estándar lo que le llegue por la entrada pero resaltando en
distinto color las líneas que contengan la expresión regular que
hemos indicado como parametro.
-
web.py Script que lee un árbol
de directorio y lo reproduce en el directorio destino que le
hemos indicado, copiando tal cual todos los ficheros que no
sean .html. A los ficheros .html se les añade (en caso de
existir) una cabecera y un pie. Este es el script que uso
para generar está página.
Comandos útiles para la programación
En este apartado queria describir una seríe de comandos que como
programadores nos pueden hacer la vida un poco más útil y que muchas
veces (como me pasaba a mi) ni siquiera sabemos que existen y que
suelen estar instalados por defecto.
Por supuesto no voy a hablar de las herramientas "grandes"
tipo gcc o gdb puesto que manejar con soltura estás herramientas es
bastante complicado y además tienen una documentación muy completa.
Estas utilidades, comandos y demás son tan útiles para los
administradores de sistema como para los programadores, e incluso en
algunos casos para los usuarios del sistema.
La informacion más fiable y eficaz de todos estos comandos está en la
página man correspondiente puesto que todos ellos contienen gran
número de parametros.
Herramientas para controlar los recursos IPCs
- ipcs Lista todos los recursos de comunicacion entre
procesos actualmente existentes en el sistema. Por defecto
muestra las colas de mensajes, las memorias compartidas y los
semaforos, pero con parametros podemos hacer que solo liste
alguno de estos tipos de ipcs o los que cumplan alguna condición
concreta
- ipcrm Permite borrar un recurso ipc, siempre y cuando
tengamos permisos para ello. Para borrarlo necesitamos darle el
identificativo del recurso y el tipo de recurso que podremos
haber conseguido previamente ejecutando ipcs
Herramientas control de socket y direcciones de red
- netstat Permite ver los sockets que tenemos abiertos en
el sistema pudiendo ver el tipo, los dos extremos de la conexión
e incluso el estado del socket. Podemos listas los sockets de solo
cierto tipo, por ejemplo los tcp mediante la opción "-t", o los
que están abiertos a la escucha pero sin tener clientes
conectados con "-l", o los que son udp con "-u", o hacer que salgan
las direcciones ip en vez de los nombres correspondientes con
"-n"
- ipcalc Permite realizar calculos y transformaciones
con direcciones ip, lo que nos permite no tener que estar
comiendosnos la cabeza a la hora de calcular mascaras
direcciones y demás
Control de ficheros
- chattr Permite cambiar ciertos atributos de un fichero
que solo sirven para sistemas de ficheros ext2, esto permite
hacer cosas como hacer que un fichero no sea escribible ni por
root a no ser que le quite antes el atributo
correspondiente. Esto es útil una vez que tenemos configuradas
las cosas para que no perdamos la configuración por descuidos
- lsof Permite ver los ficheros que están abiertos en el
sistema en un momento dado. nos indica además el proceso que los
usa, en que modo lo ha abierto y otras informaciones sobre el tipo
de fichero de que se trata (de dispositivo, normal, socket,
pipe, etc). Por supuesto permite pasar parametros para que solo
muestre los ficheros que cumplan las condiciones dadas.
- fuser Indica que proceso está usando cierto fichero, e
incluso nos permite enviar una señal a todos los procesos que
tengan usado ese fichero, que podrá ser tanto normal como un
fichero de dispositivo, un socket, etc.
- strip Quita de un fichero (normalmente ejecutable o una
libreria) los símbolos que le indiquemos, normalmente los de
depuración. Usando esta utilidad los ejecutables ocupan menos pero
perdemos la posible información de depuración que tuviesen.
- file Indica el tipo de fichero de que se trata. En el
caso de usarlo con un ejecutable podremos ver el tipo de
ejecutable (elf, aout), para qué procesador, si tiene depencias
de librerias, y si ha sido "stripeado" o no.
Símbolos y librerias
- ldd Permite listar las dependencias de símbolos de
librerias que tiene un programa o una libreria. Es muy
interesante el parametro "-d" que lista los símbolos no
resueltos
- nm Lista los símbolos de un fichero objeto (tanto .o,
como librerias, como programas). Nos permite listar solo ciertos
símbolos como por ejemplo con el parametro "--debug-syms" que
imprime solo los símbolos de depuración
- objdump Lista símbolos e informaciones de los ficheros
objeto, podemos seleccionar que parte de la cabecera ELF
queremos ver
- modinfo Muestra la información que tiene un módulo de
kernel. Tiene especial útilidad el parametro "-p" para ver los
parametros y el tipo de parametros que admite
- ar Permite juntar varios archivos .o en uno solo que
podemos usar como librería para compilar con nuestros programas
Si quieres ponerte en contacto conmigo:
eferro@inicia.es
