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.