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.
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. ;-)
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/
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`/binif ! -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`/binif ! -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.
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.
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.