lunes, 25 de octubre de 2010

MySQL on Slackware

Para tener un servidor MySQL corriendo en Slackware es necesario hacer un par de cosas adicionales a lo que dice los archivos de configuracion de MySQL, aqui lo necesario para levantar MySQL:

# chown mysql /var/lib/mysql/mysql/*
# chown mysql /var/lib/mysql/*

# mysql_install_db
# chown -R mysql:mysql /var/lib/mysql

# /etc/rc.d/rc.mysqld start

con eso queda listo, solo hay que cambiar el password del root de esta manera:

jueves, 5 de agosto de 2010

Estandar de jerarquia de archivos

El link muestra el estandard de jerarquia de archivos, un documento escencial para entender la estructura de del sistema de archivos de cualquier distribucion linux.
Filesystem Hierarchy Standard

miércoles, 4 de agosto de 2010

Broadcom BCM57780 Slackware 13.1

La tarjeta de red Ethernet Broadcom BCM67780 que viene en la Lenovo Y560 por un error de modulos no inicia la interfaz eth0. Para esto se puede hacer lo siguiente:
# modprobe -r broadcom
# modprobe -r tg3
# modprobe broadcom
# modprobe tg3
# /etc/rc.d/rc.inet1 restart
# dhcpcd eth0

Esto es un poco raro ya que cuando se hace:
# lcpci -vvv
09:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57780 Gigabit Ethernet PCIe (rev 01)
Subsystem: Lenovo Device 38cf
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR-
Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0f00c Data: 41d1
Capabilities: [cc] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us,>

domingo, 1 de agosto de 2010

Frame buffer de inicio

Slackware 13.1 instalado en una Lenovo Y560 demora en cargar el kernel, y al iniciar sale este mensaje antes de entrar al modo de video normal:

Console: switching to colour frame buffer device 128x48
fb0: VESA VGA frame buffer device
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled

Compilacion de kernel x86_64

Compilando el kernel para 64 bits (se supone correctamente configurado con #make menuconfig)
Al compilar sale este error:
arch/i386/boot/boot.h: Assembler messages:
arch/i386/boot/boot.h:112: Error: bad register name `%dil'
make[1]: *** [arch/x86_64/boot/video.o] Error 1
make: *** [bzImage] Error 2

Lo que puedo entender es que quiere compilar archivos de i386 porque debe haber algun driver o modulo que no tiene version para 64 e intenta compilarlo para 32. Lo que se debe hacer es cambiar la linea 112 que dice ahi: de la siguiente manera:
asm volatile("movb %%fs:%1,%0" : "=r" (v) : "m" (*(u8 *)addr));
por:
asm volatile("movb %%fs:%1,%0" : "=q" (v) : "m" (*(u8 *)addr));

El tag r se refiere a un registro de proposito general, y como se ha configurado para 64, el %dil cumple con esto; sin embargo, en x86 este registro no existe. Solo se necesita un registro que pueda accesar al byte mas bajo, y esto se consigue colocando el tag q.
Una mejor explicacion se puede conseguir aqui.
Hay que recalcar que en esa pagina usa como ejemplo un int y un char, y para nuestro es equivalente ya que se esta usando un u8. (Para los que no saben que es un u8 busquen en google: "kernel data types").

Disculpen la redaccion mediocre, pero esto solo es con fines de archivo.

domingo, 25 de julio de 2010

Compilacion de kernel

Para compilar el kernel se deben seguir los siguientes pasos:
# make menuconfig (para linea de comandos)
# make xconfig (para kde)
# make gconfig (para gnome)
Cualquiera de los tres para configurar que paquetes son agregados al kernel o son compilados como modulos

# make
Para compilar
# make modules
# make modules_install
# make install

En caso de necesitar initrd, se crea asi:
# mkinitrd -o initrd.img-$version $version

El instalador cambia el archivo de boot y guarda una copia del antiguo. El kernel anterior tambien queda guardado.

Es recomendable, adicionalmente, configurar el grub/lilo para que haga un link al kernel anterior en caso no funcione el kernel recientemente compilado.

lunes, 12 de julio de 2010

Reglas udev

Articulo sobre como escribir reglas udev

http://www.reactivated.net/writing_udev_rules.html

viernes, 9 de julio de 2010

Ing inversa de un dispositivo USB

La idea es instalar un Windows en una maquina virtual, instalar el driver del dispositivo USB en la maquina virtual y desde Linux (o el OS que haga de host) monitorear el puerto USB para descifrar como que tipo de comunicacion usa el dispositivo, la velocidad, etc.
Para monitorear un puerto USB se puede usar el modulo de kernel usbmon, que, de manera resumida, se puede iniciar asi:
#mount -t debugfs none_debugs /sys/kernel/debug
#modprobe usbmon

#ls -l /sys/kernel/debug/usb/usbmon/
0s 0u 1s 1t 1u 2s 2t 2u

Estos archivos tienen el formato: (numero_de_bus)(s|u|t). Se debe saber el numero de bus al que el dispositivo esta conectado. Esto se puede lograr con un
#dmesg
, o con un
#cat /proc/bus/usb/devices

Para monitorear el trafico hacemos:
#cat /sys/kernel/debug/usb/usbmon/2u

Luego de monitear todo el trafico necesario, usamos la libreria libusb para hacer la comunicacion con el puerto USB y hacer el driver. Libusb tiene implementaciones para Linux y Windows.

//FIXME