Archivo por años: 2013

Wifi, sonido y mas

Actualizado. Después de mucho pelearme con mi tablet, finalmente he conseguido que funcionen casi todos los dispositivos. También he pulido el proceso de instalación de Linux; de hecho hay bastantes cosas que cambiar del artículo anterior, así que vamos allá.

El fichero SCRIPT.BIN

En primer lugar quería disponer del fichero script.bin original de mi tablet, y no de uno creado para otro dispositivo, porque obviamente podía haber algún parámetro (velocidad de memoria, puertos de dispositivos, etc) que tuviese un valor diferente, evitando que funcionase algún dispositivo. De hecho, una vez que conseguí utilizarlo, el sonido funcionó automáticamente (antes no detectaba ninguna tarjeta de sonido).

El proceso para obtener dicho fichero bin no fue sencillo: dicho fichero está en la flash interna de la tablet, pero por desgracia no tenía acceso a ella desde Linux (no detecta dicho dispositivo) ni desde Android (lo detecta, obviamente, pero no tengo permisos de acceso por no tener la tablet rooteada. Además, al ser la partición de arranque, no se monta una vez lanzado Android, por lo que tampoco está disponible desde éste). Tras muchos intentos encontré la solución: utilizar el ADB (Android Debug Bridge). Esto permite acceder a un dispositivo Android desde un PC. Para ello, una vez instalado el kit de desarrollo de Android, basta conectar la tablet al PC a través de un puerto USB, ir al directorio sdk/platform-tools y ejecutar:

    sudo ./adb start-server
    ./adb shell
    cat /dev/block/mmcblk0p1 > punto_de_montaje_de_tarjeta_SD/particion1.img
    exit
    sudo ./adb kill-server

El primer comando lanzará como root el servidor ADB, que se conectará a nuestro dispositivo, y el segundo lanzará una shell como root en él. El tercero, ejecutado ya desde la shell del dispositivo, volcará la primera partición de la flash en el fichero particion1.img de la tarjeta SD. Por último, salimos de la shell y desactivamos el servidor ADB.

En ocasiones adb no encuentra nuestro dispositivo. Si tecleando ./adb devices no aparece ningún dispositivo detectado, es posible que adb no tenga a nuestro fabricante en su lista. Para añadirlo manualmente hacemos un lsusb, y vemos el identificador de nuestra tablet. Digamos que es AAAA:BBBB (dos números en hexadecimal de cuatro cifras cada uno). Sólo tenemos que editar ~/.android/adb_usb.ini y añadir en él 0xAAAA, reiniciar el servidor adb, y listo.

Ahora sólo tenemos que llevar el fichero particion1.img a un PC con linux y montar dicha partición, por ejemplo en /mnt:

    sudo mount -o loop particion1.img /mnt

Ahí encontraremos el fichero script.bin, que podremos convertir en un fichero .fex mediante la utilidad bin2fex, que encontraremos en el repositorio sunxi-tools. De hecho es necesario hacerlo para poder hacer un par de modificaciones, sin las que nuestro Linux no arrancaría desde la tarjeta SD. En concreto éstos son los cambios:

@@ -12,7 +12,7 @@
 pll4_freq = 960
 pll6_freq = 720
 power_start = 0
-storage_type = 2
+storage_type = 1

 [pm_para]
 standby_mode = 0
@@ -445,7 +445,7 @@
 sdc_wp =

 [mmc2_para]
-sdc_used = 1
+sdc_used = 0
 sdc_detmode = 3
 bus_width = 8
 sdc_cmd = port:PC06<3><1><3><default>
@@ -510,7 +510,7 @@
 usb_id_gpio =
 usb_det_vbus_gpio =
 usb_drv_vbus_gpio = port:power203<1><0><default><0>
-usb_host_init_state = 0
+usb_host_init_state = 1

 [port_pm]
 restrict_1a = 0

El primero cambia el tipo de almacenamiento de Flash a SD. El segundo especifica que no se active la memoria Flash interna (si se activa, no arranca el sistema). Por último, el tercero activa desde el principio el segundo USB, necesario para que funcione la red WiFi.

Existe una lista con todas las opciones de un fichero FEX, útil si se quieren hacer más cambios manuales.

Una vez hechos estos cambios ya podemos generar el fichero script.bin final, siguiendo el método indicado en el artículo anterior.

El kernel

En el núcleo también hay que hacer algunos cambios. Para empezar, hay que utilizar la versión 3.4, en lugar de la 3.0, porque es la que tiene soporte para la tarjeta de red:

    git clone -b sunxi-3.4 https://github.com/linux-sunxi/linux-sunxi linux-3.4-sunxi
    cd linux-3.4-sunxi

De todas formas, el chip que lleva esta tablet es el Realtek RTL8188etv. Aunque en teoría es compatible con el driver para la familia RTL8188, en la práctica hay que añadir una línea para que reconozca el identificador USB de este chip concreto. Aunque ya envié el parche a la lista de correo, lo añado aquí porque no se cuanto tardarán en añadirlo:

diff --git a/drivers/net/wireless/rtl8188eu/os_dep/linux/usb_intf.c b/drivers/net/wireless/rtl8188eu/os_dep/linux/usb_intf.c
index 5f4390a..df9d488 100644
--- a/drivers/net/wireless/rtl8188eu/os_dep/linux/usb_intf.c
+++ b/drivers/net/wireless/rtl8188eu/os_dep/linux/usb_intf.c
@@ -185,7 +185,8 @@ static struct usb_device_id rtw_usb_id_tbl[] ={
 #endif
 #ifdef CONFIG_RTL8188E
        /*=== Realtek demoboard ===*/           
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)},//Default ID        
+       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)},//rtl8188etv ID (szenio 1207 tablet)
 #endif
        {}      /* Terminating entry */
 };

Una vez aplicado este cambio de una única línea, podemos ya proceder a configurar el núcleo. Para ello partimos de la configuración genérica para el A13:

    make ARCH=arm a13_defconfig
    make ARCH=arm menuconfig

Estas son las opciones que he modificado:

    General Setup
        POSIX message queues=Y
    Device Drivers
        Network Device Support
            Ethernet (10 or 100Mbit)=N
            Wireless LAN
                Realtek 8188E USB WiFi=M
        Character Devices
            Non-standard serial port support=N
            Serial drivers
                8250/16550 and compatible serial support=N
        Graphics support
            Console Display driver support
                Map the console to the primary display device=Y
            Bootup logo=Y
    Security Options
        Enable the securityfs filesystem=N

Una vez hecho, podemos ya proceder a compilarlo, pero con el compilador que utilice la gnueabihf (que utiliza coma flotante por hardware, en lugar de la gnueabi, como hacía en el artículo anterior). Para ello primero necesitamos instalar esta versión del compilador:

    sudo apt-get install gcc-4.7-arm-linux-gnueabihf gcc-arm-linux-gnueabihf

y ya podemos compilar el núcleo en sí:

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=out modules
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=out modules_install

Los ficheros boot.cmd y boot.scr

El último cambio respecto al artículo anterior está en el fichero boot.cmd (y su fichero hijo boot.scr). Este fichero contiene los parámetros de arranque del núcleo, y es básicamente un script para U-Boot. En nuestro caso, crearemos el fichero boot.cmd en la partición VFAT de nuestra tarjeta SD con este contenido:

    setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 ${extra}
    fatload mmc 0 0x43000000 script.bin
    fatload mmc 0 0x48000000 uImage
    bootm 0x48000000

y lo compilaremos con:

    mkimage -C none -A arm -T script -d boot.cmd boot.scr

Y listo. Si en algún momento queremos cambiar las opciones de arranque de nuestro núcleo, sólo tendremos que editar el fichero boot.cmd, añadirlas en la primera línea y recompilarlo. Existe una página con todas las opciones del núcleo específicas de sunXi.

Encender y apagar el sistema

De momento no está activa la gestión de energía, por lo que si se hace un halt o un shutdown -h now, el sistema parecerá apagarse, pero en realidad seguirá encendido. En estos casos, para apagarlo «de verdad» es necesario mantener pulsado el botón de encendido durante seis o más segundos.

Arrancando Linux en la tablet

Actualizado: Hoy me puse a intentar meter Linux en la tablet de la que hablé en la anterior entrada. Y lo he conseguido, he aquí la prueba:

tablet_linux

Dado que esta tablet está equipada con un Allwinner A13, necesitamos un kernel y un cargador adecuados. Lo interesante de este chip es que no hace falta tocar la flash interna, sino que basta con ponerlos en una tarjeta SD, y arrancará desde ésta directamente. Y si luego queremos volver al sistema original, basta con retirar la tarjeta y reiniciar.

El núcleo y el cargador los podemos obtener del repositorio GIT linux-sunxi, orientado precisamente hacia este tipo de SoCs. Las instrucciones básicas para compilar y generar todo las saqué de la página de Olimex, y las he adaptado a este modelo.

Supondré que tienes una distribución basada en Debian. Lo primero que hay que hacer es instalar los paquetes de compilación cruzada y otras bibliotecas necesarias:

    sudo apt-get install gcc-4.7-arm-linux-gnueabi gcc-4.7-arm-linux-gnueabi-base gcc-arm-linux-gnueabi libncurses5-dev uboot-mkimage build-essential git libusb-dev libusb-1.0-0-dev

Ahora bajamos el u-boot modificado con:

    git clone -b sunxi https://github.com/linux-sunxi/u-boot-sunxi

Entramos en el directorio u-boot-sunxi y compilamos el código:

    cd u-boot-sunxi
    make CROSS_COMPILE=arm-linux-gnueabi- a13-olinuxino
    ls -l u-boot.bin spl/sunxi-spl.bin
    cd ..

Ahora que tenemos compilado el cargador, vamos con el núcleo. Nos lo bajamos desde el repositorio, preparamos una configuración base y entramos en modo configuración:

    git clone -b sunxi-3.0 https://github.com/linux-sunxi/linux-sunxi
    cd linux-sunxi
    make ARCH=arm a13_defconfig
    make ARCH=arm menuconfig

tablet_config

Entre las opciones que he tocado están las siguientes:

  • General Setup
    • POSIX message queues -> Y
  • System Type
    • Emulate SWP/SWPB instructions -> N
  • Device Drivers
    • Network Device Support
      • Ethernet (10 or 100Mbit) -> N
    • Character Devices
      • Non-standard serial port support -> N
      • Serial drivers
        • 8250/16550 and compatible serial support -> N
    • Console Display driver support
      • Map the console to the primary display device -> Y
    • Bootup logo -> Y
  • Security Options
    • Enable the securityfs filesystem -> N

 

Una vez configurado, procedemos a compilar el núcleo:

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules_install

Ahora llega el momento de generar la tarjeta SD con el sistema básico. Para ello, primero necesitamos dividirla en, al menos, dos particiones, una en formato VFAT (donde irá el núcleo) y otra en formato EXT2/3/4 con el sistema en sí. Así que arrancamos fdisk y empezamos. Es importante que la primera partición empiece, al menos, en el sector 2048, para dejar sitio para el arranque.

Una vez formateadas ambas particiones, descargamos un sistema Debian base, lo descomprimimos en la partición EXT2/3/4 (que supondremos que está montada en /media/particion2) y copiamos los módulos (asumiendo, también, que la versión de núcleo que tenemos es la 3.0.76):

    wget http://rcn-ee.net/deb/rootfs/wheezy/debian-7.1-console-armhf-2013-07-22.tar.xz
    tar xvf debian-7.1-console-armhf-2013-07-22.tar.xz
    sudo tar -C /media/particion2 -xvf debian-7.1-console-armhf-2013-07-22/armhf-rootfs-debian-wheezy.tar
    cd ../linux-sunxi
    sudo cp -a linux-allwinner/out/lib/modules/3.0.76/ /media/particion2/lib/modules/

Es importante descomprimirlo como root para que conserve los nombres de usuario correctos.

Ahora bajamos los ficheros de definición de placas y las utilidades, y las compilamos:

    git clone https://github.com/linux-sunxi/sunxi-boards
    git clone https://github.com/linux-sunxi/sunxi-tools
    cd sunxi-tools
    make

Ahora vamos a generar el fichero script.bin, necesario para configurar el núcleo durante el arranque. Para ello utilizaremos las utilidades que acabamos de compilar y el fichero de configuración a13_mid.fex, situado en el repo sunxi-boards, por ser el más parecido a nuestra tablet:

    ./fex2bin ../sunxi-boards/sys_config/a13/a13_mid.fex script.bin

El siguiente paso consiste en copiar el fichero uImage y script.bin en la partición VFAT de nuestra tarjeta SD:

    cp script.bin /media/particion1
    cd ../linux-sunxi
    cp arch/arm/boot/uImage /media/particion1

Por último sólo queda instalar u-Boot en la tarjeta, para lo cual hacemos (asumiendo que la tarjeta está en /dev/sdX):

    cd ../u-boot-sunxi
    sudo dd if=spl/sunxi-spl.bin of=/dev/sdX bs=1024 seek=8
    sudo dd if=u-boot.bin of=/dev/sdX bs=1024 seek=32

Y con esto ya está. Sólo queda meter la tarjeta SD en la tablet, encenderla, y conectar un teclado USB.

El próximo paso será intentar activar la WiFi, algo que me está dando bastantes quebraderos de cabeza.

Amplificando mi tablet

Recientemente me compré una pequeña tablet Szenio 1207 que estaba de oferta en unos grandes almacenes. Se trata de un cacharro bastante limitado y que no recomiendo para uso habitual: su procesador no tiene suficiente potencia para mover de manera fluida Android 4.0, por lo que la interfaz se atasca constantemente al intentar utilizarla para navegar o leer el correo (una de las cosas que quiero hacer más adelante es intentar meterle un linux con Debian o Gentoo a ver si mejora).

Sin embargo, para mí es perfecta porque sólo la quiero para ver algún que otro capítulo de series mientras pedaleo en la bicicleta estática del gimnasio (aunque éstas tienen una televisión, estoy harto de ver una y otra vez los mismos capítulos de Rex, el perro policía, y me niego a tragarme a Ana Rosa y similares). En este caso funciona bien porque no hay interacción con el usuario.

Por desgracia el gimnasio es un entorno bastante ruidoso: entre las máquinas y el hilo musical, el volumen que da la tablet a través de los cascos es insuficiente. Por este motivo decidí añadirle un pequeño amplificador de sonido. Casualmente, rebuscando entre la cacharrada que tengo en el taller encontré el viejo amplificador de sonido que construí para mi viejo Spectrum (y que, posteriormente, había reutilizado en un DAC de sonido para mi primer PC), así que decidí aprovecharlo en lugar de ensamblar uno nuevo.

El diseño está basado en el chip LM386, un amplificador de sonido que permite construir equipos con muy pocos componentes y especialmente orientado para su uso con baterías. Este es el esquema (sí, aunque no lo parezca es correcto: no necesita realimentación porque su ganancia interna, por defecto, es de 20. En el datasheet aparece exactamente igual, y garantizo que funciona con la ganancia indicada):

amplificador_tablet2

Como se ve, el amplificador no es estéreo, por lo que tuve que cortocircuitar los canales derecho e izquierdo. Una vez conectado el circuito, lo monté en una pequeña caja con una pila de 9 voltios y demás:

amp1amp2

amp3

Una vez montado quedaba la cuestión de cómo fijarlo a la tablet para no andar con él colgando por ahí. La solución que se me ocurrió fue utilizar velcro para sujetarlo por detrás. De esa manera hace también la función de atril, inclinando el tablet hasta una posición más cómoda, y permite montarlo y desmontarlo las veces que se desee. Además, como mejor se ve la pantalla en el gimnasio es con la tablet «boca abajo», así que decidí poner velcro en todas las esquinas para así poder orientarla en cualquiera de las cuatro posiciones posibles. Para pegar el velcro a la tablet y a la caja del amplificador utilicé cinta adhesiva de doble cara:

amp4amp5

amp6

¡Y ya está!

amp7

Un detalle importante es que ahora es necesario ajustar el volumen de la tablet casi al mínimo. Cuando hice la primera prueba casi me quedo sordo por culpa de la potencia que saca.

Transmission para WebTV y Submarine

Acabo de subir dos actualizaciones.

Por una parte he actualizado TransmissionBT para WebTV a la versión 5.4. Los cambios son dos: actualizado bFTPd a la versión 4.0, y una nueva versión de Submarine, el buscador de subtítulos.

Y precisamente Submarine es la otra actualización que hice: básicamente añadí una comprobación extra al bajar subtítulos, de manera que si la extensión no es .sub o .srt, no se baje ese fichero. Esto lo hice porque en una ocasión, por alguna extraña razón, encontraba un fichero de subtítulos, pero al bajarlo el servidor daba un error y bajaba un fichero HTML, pero el programa en sí lo daba por válido. Debido a eso, no probaba con otros servidores. Ahora, si al bajar un fichero el servidor hace algo raro y envía algo que no sean subtítulos, Submarine lo descartará y probará con otra fuente.

Viajando al espacio

Me he enganchado al juego Kerbal Space Program. Para los que no lo conozcan, es un simulador espacial de corte humorístico, aunque muy realista. El objetivo es construir un cohete para llevar a los Kerbals, (los habitantes del planeta Kerbal) hasta su luna Mun. Se pueden poner en órbita satélites, y muchas cosas más.

Lo más interesante es que hay versión para Linux, y además, comprado en la propia página cuesta sólo 23 dolares (unos 16 euros, al cambio). Aún está en desarrollo, pero se puede comprar la versión actual, que es muy completa, y con ese pago ya se tiene acceso a las distintas actualizaciones, hasta que el juego esté completo.

Solo tiene un defectillo: la falta de un instalador que permita disponer de un icono en los menús. Por eso he escrito yo uno, que se puede bajar aquí: instalador de Kerbal Space Program para Linux. Basta con descomprimirlo en la misma carpeta que el juego y ejecutar el fichero ksp_installer.

Un par de detalles, por si acaso:

  • No utilizar el ejecutable de 64 bits, porque falla más que una escopeta de feria (es un problema conocido). El ejecutable de 32 bits funciona perfectamente en Linux de 64 bits.
  • Si se quiere lanzar desde una línea de comandos, debe utilizarse el comando LC_ALL=C ./KSP.x86 para que el juego funcione bien (mi instalador ya lo tiene en cuenta)
  • La última versión de pago, la 0.20.2, no funciona con el driver libre para tarjetas AMD/ATI; es necesario utilizar el privativo, o bajarse la versión 0.19, que también está disponible (espero que lo corrijan pronto)

 

Hackeando cuelgatazas

Mi cocina es algo pequeña, así que cualquier cosa que ayude a tener más espacio siempre es bienvenida. Una idea que tuve hace tiempo fue aprovechar que los muebles tienen una moldura por debajo, que deja un hueco de unos tres centímetros, para añadir unos cuelgatazas disimulados en la base, y así tenerlas más a mano y aprovechar el hueco liberado para otras cosas.

Por desgracia, no encontré en ninguna parte un modelo que me convenciese. El más parecido fue éste de CASA, diseñado para enganchar en la balda de un estante. Pese a todo, es más un cuelgapocillos, porque el metal de la zona curva, que es la que sostiene el peso, se dobla demasiado si pongo una taza de desayuno (pulsar en las imágenes para verlas a tamaño completo):

IMG_20130616_192040

Sin embargo, si sujetaba el colgador de manera adecuada todavía podría utilizarlo, así que me puse manos a la obra. Lo primero fue buscar un trozo de tablero (en mi caso, de 15×75 cm) donde fijar los colgadores, y marcar en él los puntos en donde se cruzan las barras que lo forman:

IMG_20130616_164828 IMG_20130616_164847 IMG_20130616_165024

El siguiente paso fue fijar cada uno de los tres cuelgatazas al tablero mediante unas alcayatas, montadas de tal manera que impidan que se mueva en cualquier sentido:

IMG_20130616_165846 IMG_20130616_165904

A continuación había que fijarlo al mueble, debajo de la rejilla de los platos. Para ello puse dos pequeñas escuadras en uno de los laterales; en el otro, como hay un mueble «normal», decidí atornillarlo directamente a su base:

IMG_20130616_170102

Una vez colocado el tablero sobre las escuadras y atornillado a éstas, hay que recortar lo que sobresalga de los tornillos, obviamente:

IMG_20130616_171132

¡Y listo! Ya puedo colgar hasta 18 tazas cómodamente.

IMG_20130616_192103

Nueva version de cronopete

Acabo de subir la versión 3.14 de cronopete, y la semana pasada subí la 3.13. Los cambios son pequeños, aunque importantes:

  • corregido un bug en el refresco de la pantalla al restaurar archivos: por alguna razón, con GTK 3.8, la interfaz no refrescaba la imagen correctamente al cambiar de carpeta, quedando parte de la pantalla en blanco hasta que el cursor pasaba por encima. Ahora debería funcionar correctamente.
  • corregido bug cuando el disco duro está lleno. Se trata de un bug curioso y sutil: si el disco se llenaba mientras se hacía un backup, se borraban backups antiguos para hacer sitio, tal y como cabe esperar. Pero si el disco se queda lleno al 100% justo al acabar un backup, cronopete era incapaz de comenzar un nuevo backup la siguiente vez, porque fallaba la creación de la carpeta en donde se almacenaría el backup. Ahora intenta liberar espacio en ese caso también.
  • corregido bug cuando el disco no tiene tabla de particiones: algunos discos externos vienen formateados sin una tabla de particiones (el sistema de ficheros ocupa todo el disco directamente, en lugar de haber una única partición con el sistema de ficheros dentro). Al pedir a cronopete que formatee esos discos, fallaba. Ahora debería funcionar ya.

Como de costumbre, se puede acceder en la sección de programas.

Autovala y Gedit (y Gnome 3.8)

Acabo de subir la versión 0.16 de Autovala. La gran novedad es la inclusión de un plugin para Gedit, que permite trabajar fácilmente con proyectos en Autovala.

Esta versión se puede considerar definitiva, así que a partir de ahora, en principio, y salvo que me envíen alguna idea loca y maravillosa que añadir, Autovala pasa a modo «mantenimiento», subiendo sólo parches.

También actualicé mis extensiones de Gnome Shell para que funcionen con la versión 3.8, con lo que me considero libre para nuevos proyectos.

Hito en Autovala

Acabo de subir al repositorio la versión 0.10.0 de Autovala  y creo que supone un hito importante, porque con ella he cubierto todas las ideas iniciales que tenía. La principal, y más difícil, es la de incluir en un mismo proyecto un ejecutable y una biblioteca, y que ese ejecutable se enlace con dicha biblioteca, todo de manera automática y sencilla.

Ahora me queda descubrir como trabaja intltool-extract e intltool-merge con las entradas .desktop, para permitir la traducción sencilla en estos casos, y ver como mezclar ficheros .c con .vala. También la idea de integrarlo en Gedit, pero eso con mucha más calma.

Simplificando Vala y CMake

He estado tres semanas currando sin parar en mi trabajo-que-paga-las-facturas, y aunque no pude disfrutar ni findes ni vacaciones (¡Gracias, gracias, ministros que pusieron la fecha de entrega de los innterconecta para justo después de semana santa! ¡Así os salga un cardo en el sobaco!), sí pude aprovechar algunos ratos muertos en casita para hacer un proyectillo personal: Autovala.

La idea detrás de Autovala surgió de casualidad de una lista de correo: un usuario se quejaba de que trabajar con CMake era muy pesado, y que obligar a usarlo para los proyectos de la lista sólo conseguía reducir la cantidad de desarrolladores que estarían dispuestos a colaborar. Y la verdad es que tiene algo de razón: empezar un proyecto nuevo con CMake es una tarea realmente aburrida, por la sencilla razón de que es muy repetitiva.

Pero cuando una tarea es repetitiva… es ideal para que la haga una máquina. Así que mi idea fue: ¿por qué no dejar que sea el propio ordenador quien genere de manera automática los ficheros CMake?

Y esa es, precisamente, la idea detrás de Autovala: generar de manera automática todos los ficheros para CMake, en base a una serie de heurísticos. Así, por defecto, todos los ficheros .vala que haya en el directorio src (o subdirectorios dentro de él) se compilarán juntos para hacer un único binario. Además, añadirá automáticamente los paquetes necesarios para cada fichero, para lo que echa un vistazo a las directivas using del propio código. Lo mismo para otros elementos: por ejemplo, para los iconos comprobará qué tamaño tienen y, en base a ello, decidirá automáticamente en qué carpeta deben ir. Y más, mucho más.

Por supuesto, es posible añadir excepciones a mano para ajustar aquellas cosas en las que las reglas no funcionen bien; por ejemplo, si lo que queremos es generar una biblioteca, o si nuestro proyecto está compuesto de varios ejecutables. La ventaja en estos casos es que sólo hay que hacer eso: indicarle que queremos que sean dos, tres, o los que sean, ejecutables y donde buscar las fuentes; autovala seguirá haciendo el resto automáticamente (buscar paquetes necesarios, etc). Además, los cambios que haga el usuario se recuerdan, por lo que si se añaden o eliminan ficheros, basta con recrear el fichero de proyecto, y se tendrán en cuenta todas las excepciones hechas antes.

Obviamente Autovala no sirve para todos los proyectos, pero sí para la gran mayoría, que es lo interesante.