Version 6, last updated by MaDMaN at Jan 02 13:16 UTC

Para facilitar la colaboración de quienes menos saben (entre quienes se cuenta el que esto escribe) se incluyen estas notas que pretenden explicar cómo modificar los distintos componentes del firmware de nuestro equipo y subir dichos cambios al SVN.

Distingamos cuatro tipos de operaciones a realizar:

Compilación de un nuevo plugin para uso propio.

Modificación de un plugin propio de la Edición Mejorada.

Modificación de un plugin de open7x.org.

Modificación de VDR en sí.

Antes de llevar a cabo las modificaciones, en conveniente asegurarse de que puedes compilar tanto el firmware como los plugins y el vdr. De esta forma, nos aseguramos de que los problemas los pondremos nosotros. ;-)

 

Compilación de un nuevo plugin para uso propio.

Caso típico, uno que publiquen los alemanes en su foro (como el weatherng en su momento) y que te de por probar.

Se borra el directorio

VDR-NG-EM/VDR-NG

y desde

VDR-NG-EM/

se ejecuta

$ ./make-plugins

Se sitúa el directorio que contiene los ficheros fuente del plugin en

VDR-NG-EM/VDR-NG/PLUGINS/src/nombredelplugin/

resta sólo ejecutar de nuevo

$ ./make-plugins

y el plugin estará compilado en

VDR-NG-EM/VDR-NG/PLUGINS/lib/


Modificación de un plugin propio de la Edición Mejorada.

Son aquellos que se añaden en nuestra versión o que se modifican respecto a la versión que emplean los alemanes. Se distinguen fácilmente porque sus ficheros fuente se encuentran en

VDR-NG-EM/VDR-Plugins/Source+patch/

Si se elige un plugin cualquiera (por ejemplo el de ayuda) y se entra en su directorio

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/

se verá que aparecen:

Un directorio de igual nombre al que se le ha añadido la terminación -orig

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/aide-0.0.3-orig/

son los ficheros fuente originales del plugin, en la versión indicada.

Un fichero

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/vdr-m7x0.patch

que contiene los cambios que se han hecho en los ficheros contenidos en el directorio -orig para generar los ficheros fuente que realmente se compilan.

Durante el proceso de compilación de los plugins se crean diversos directorios entre los que está el que contiene los ficheros fuente de todos los plugins ya parcheados. Se encuentran en la ruta

VDR-NG-EM/VDR-NG/PLUGINS/src/

Sobre el directorio del plugin elegido haremos nuestras modificaciones, en nuestro caso en

VDR-NG-EM/VDR-NG/PLUGINS/src/aide/

Sin embargo, para que al ejecutar make-plugins no se sobrescriban los cambios, así como para trabajar con el código parcheado de forma que el plugin funcione, debemos hacer:

Opción 1:


$ PATH=/donde/lo/tengais/VDR-NG-EM/VDR-NG-FW/m7x0_xtc_uclibc_Linux-i686/bin:$PATH

$ export PATH

y desde

VDR-NG-EM/VDR-NG/

se ejecuta

$ make plugins

(sin "-", con un espacio).

De esta forma se compilan los plugins.

Opción 2:

Consiste en esencia en partir el script make-plugins en dos: uno que actualiza y parchea los plugins:

#!/bin/bash

vdr=VDR-NG
plugins=VDR-Plugins/Source+patch
vdr_plugins=$vdr/PLUGINS/src
vdr_plugins_lib=$vdr/PLUGINS/lib
TC_bin=`pwd`/VDR-NG-FW/m7x0_xtc_uclibc_`uname`-`uname -m`/bin

if ! -d "$TC_bin"
then
   echo "ToolChain-bin dir not found: $TC_bin" 1>&2
   exit 1
else
   export PATH="$TC_bin:$PATH"
fi

# Patching plugins
for dp in `ls $plugins `; do
  if [ -d $plugins/$dp ] ; then
    for dps in `ls $plugins/$dp/`; do
      if [ -d $plugins/$dp/$dps ] ; then
        dptarget=`echo $dps | cut -d'-' -f1`

        # Clean patch
        rm -rf $vdr_plugins/$dptarget/
        mkdir $vdr_plugins/$dptarget/

        # Copy plugin
        cp -Trf $plugins/$dp/$dps $vdr_plugins/$dptarget
        find $vdr_plugins/$dptarget/ '(' -name '.svn' ')' -exec rm -rf {} \; 2> /dev/null

        # Patching plugins
        ./VDR-NG-FW/patches/patch-kernel.sh $vdr_plugins/$dptarget/ $plugins/$dp
      fi
    done
  fi
done;


que usaríamos para preparar los plugins antes de hacer nuestras modificaciones.

Y un segundo que lanza la compilación en sí:

#!/bin/bash

vdr=VDR-NG
plugins=VDR-Plugins/Source+patch
vdr_plugins=$vdr/PLUGINS/src
vdr_plugins_lib=$vdr/PLUGINS/lib
TC_bin=`pwd`/VDR-NG-FW/m7x0_xtc_uclibc_`uname`-`uname -m`/bin

if ! -d "$TC_bin"
then
   echo "ToolChain-bin dir not found: $TC_bin" 1>&2
   exit 1
else
   export PATH="$TC_bin:$PATH"
fi

# Compiling plugins
( cd $vdr; make plugins )

# Stripping plugins
for libvdr in `ls $vdr_plugins_lib ` ; do
   mips-linux-uclibc-strip $vdr_plugins_lib/$libvdr
done;


que emplearemos cada vez que queramos probar un cambio.

De una u otra forma, ya se tienen los plugins compilados, hemos de llevar el nuestro al giga y comprobar u funcionamiento. Los plugins se encuentran compilados en

VDR-NG-EM/VDR-NG/PLUGINS/lib/

Una vez que se han terminado las modificaciones, es necesario crear un parche y subirlo al SVN. Lo que se pretende es sustituir el parche original por este nuevo, que contendrá los dos juegos de cambios: los del parche ya existente y los que hemos creado.

Para ello, lo más cómodo es ir a

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/

y crear otro directorio aide-0.0.3. Es decir

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/aide-0.0.3/

Copiamos los ficheros fuente que hemos modificado, desde

VDR-NG-EM/VDR-NG/PLUGINS/src/aide/

al directorio recién creado

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/aide-0.0.3/

Es conveniente comprobar si hay algún archivo .orig en

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/aide-0.0.3/

y en ese caso borrarlo.

También es recomendable, para eliminar posibles binarios, ejecutar desde

VDR-NG-EM/VDR-NG/

$ make clean-plugins

Una vez hecho esto, se ejecuta desde el directorio

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/

el siguiente comando para generar el parche:

$ diff -Naurx .svn aide-0.0.3-orig aide-0.0.3 > vdr-m7x0.patch

De forma que se genera un nuevo fichero vdr-m7x0.patch con todos los cambios. Este fichero es el que hay que subir al SVN.

Para ello, una posibilidad es usar un cliente SVN como RapidSVN. A través de línea de comandos sería

$ svn commit -m "comentario que se quiera poner" vdr-m7x0.patch

Que desencadena el proceso de subida del fichero.

NOTA: si por lo que fuese en lugar de disponer de los ficheros fuente nuevos, dispusiésemos de un parche (por ejemplo, que alguien publicó en el foro), para aplicar un parche a unos ficheros fuente dados, desde

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/aide-0.0.3/

y con el parche puesto en

VDR-NG-EM/VDR-Plugins/Source+patch/aide-0.0.3/

se haría

$ patch -p1 < ../parche.diff

Para un .diff, se haría lo mismo para un .patch.

 

Modificación de un plugin de open7x.org.

La diferencia con el caso anterior es que el plugin no aparece en

VDR-NG-EM/VDR-Plugins/Source+patch/

ya que se ha obtenido directamente del repositorio alemán. Sin embargo, se compila desde la ruta usual

VDR-NG-EM/VDR-NG/PLUGINS/src/

Es decir, en el caso del plugin filebrowser, por ejemplo, no existe

VDR-NG-EM/VDR-Plugins/Source+patch/filebrowser-0.0.6b/

pero existe

VDR-NG-EM/VDR-NG/PLUGINS/src/filebrowser/

que es donde modificaremos el código.

La compilación se lleva a cabo aplicando cualquiera de los dos métodos explicados en el punto anterior.

Para subir estos cambios al SVN, se crea una estructura de directorios análoga a la que disponemos. Se crean los directorios correspondientes en

VDR-NG-EM/VDR-Plugins/Source+patch/

e incluyendo el README en

VDR-NG-EM/VDR-Plugins/README/

junto con los archivos de configuración que puedan ser necesarios en

VDR-NG-EM/VDR-Plugins/Config-dir/plugins/

NOTA: para trabajar sobre un plugin contenido en el firmware, es interesante llevar a cabo las siguientes tareas en el giga:

Abrir el fichero

/etc/rc.local.conf

y eliminar

/usr/lib/vdr

del parámetro vdr_plugins, quedando este de la forma siguiente:

vdr_plugins="/etc/plugins-lib"

Resta ya sólo copiar los plugins habilitados en

/etc/plugins-lib

Esos plugins son los contenidos en el parámetro vdr_pluginopts del mismo fichero.

 

Modificación de VDR en sí.

El procedimiento es análogo al de los plugins (opción 2, ejecutando make en lugar de make plugins). Se ejecuta el make-vdr y se hacen cambios en el código del directorio VDR-NG hasta que ya tengamos lo que queremos. Se renombra el directorio a VDR-NG-mod y se vuelve a ejecutar el make-vdr para tener el código original del VDR con nuestros parches y se hace un diff entre estos dos directorios.

El parche se coloca en

VDR-NG-EM/Addons/Files/common/patches/vdr-m7x0/

antes de hacer el commit al SVN.

Igualmente es conveniente antes de hacer un parche con el diff, ejecutar desde

VDR-NG-EM/VDR-NG/

$ make clean

Para eliminar binarios.

NOTA: Para probar el VDR es conveniente situar nuestra versión modificada en algún directorio del disco duro y en el fichero /etc/rc.local.conf modificar el parámetro vdr_bin para que apunte a la verisón modificada. Por ejemplo:

vdr_bin="/media/ruta/donde/lo/hemos/puesto/vdr"

de manera que ya se puede comprobar su funcionamiento.

Indice_General