Este paquete instala un controlador.
Este caso práctico muestra las técnicas siguientes:
Instalación y carga de un controlador con una secuencia de comandos postinstall
Descarga de un controlador con una secuencia de comandos preremove
Para obtener más información sobre estas secuencias de comandos, consulte Escritura de secuencias de comandos de procedimientos.
Crear una secuencia de comandos request.
La secuencia de comandos request determina dónde el administrador desea que se instalen los objetos del controlador: pregunta al administrador y asigna la respuesta al parámetro $KERNDIR.
La secuencia de comandos termina con una rutina para hacer que los dos parámetros CLASSES y KERNDIR estén disponibles en el entorno de instalación y la secuencia de comandos postinstall.
Crear una secuencia de comandos postinstall.
La secuencia de comandos postinstall lleva a cabo, de hecho, la instalación del controlador. Se ejecuta después de que los dos archivos buffer y buffer.conf se hayan instalado. El archivo postinstall mostrado en este ejemplo lleva a cabo las acciones siguientes:
Usa el comando add_drv para cargar el controlador en el sistema.
Crea un vínculo para el dispositivo mediante el comando installf.
Termina la instalación mediante el comando installf -f.
Crea una secuencia de comandos preremove.
La secuencia de comandos preremove usa el comando rem_drv para descargar el controlador del sistema y después suprime el vínculo /dev/buffer0 .
PKG=bufdev NAME=Buffer Device CATEGORY=system BASEDIR=/ ARCH=INTEL VERSION=Software Issue #19 CLASSES=none |
Para instalar un controlador en el tiempo de la instalación, debe incluir los archivos de configuración y objetos para el controlador en el archivo prototype.
En este ejemplo, el módulo ejecutable del controlador recibe el nombre de buffer; el comando add_drv funciona en este archivo. El núcleo usa el archivo de configuración, buffer.conf, para ayudar a configurar el controlador.
i pkginfo i request i postinstall i preremove f none $KERNDIR/buffer 444 root root f none $KERNDIR/buffer.conf 444 root root |
Si mira al archivo prototype de este ejemplo, puede observar lo siguiente:
Puesto que no se necesita un tratamiento especial para los objetos de paquete, puede colocarlos en la clase none estándar. El parámetro CLASSES se configura con el valor none en el archivo pkginfo.
Los nombres de ruta de buffer y buffer.conf comienzan por la variable $KERNDIR. Esta variable se configura en la secuencia de comandos request y permite al administrador decidir dónde se deben instalar los archivos del controlador. El directorio predeterminado es /kernel/drv.
Hay una entrada para la secuencia de comandos postinstall (la secuencia de comandos que ejecutará la instalación del controlador).
trap 'exit 3' 15 # determine where driver object should be placed; location # must be an absolute path name that is an existing directory KERNDIR=`ckpath -aoy -d /kernel/drv -p \ “Where do you want the driver object installed”` || exit $? # make parameters available to installation service, and # so to any other packaging scripts cat >$1 <<! CLASSES='$CLASSES' KERNDIR='$KERNDIR' ! exit 0 |
# KERNDIR parameter provided by `request' script err_code=1 # an error is considered fatal # Load the module into the system cd $KERNDIR add_drv -m '* 0666 root sys' buffer || exit $err_code # Create a /dev entry for the character node installf $PKGINST /dev/buffer0=/devices/eisa/buffer*:0 s installf -f $PKGINST |
err_code=1 # an error is considered fatal # Unload the driver rem_drv buffer || exit $err_code # remove /dev file removef $PKGINST /dev/buffer0 ; rm /dev/buffer0 removef -f $PKGINST |