Este pacote instala um driver.
Este estudo de caso demonstra as seguintes técnicas:
Instalação e carregamento de um driver com um script postinstall
Carregamento de um driver com um script preremove
Para obter mais informações sobre estes scripts, consulte Escrevendo scripts de procedimento.
Criar um script request.
O script request determina onde o administrador quer que os objetos de driver sejam instalados, perguntando ao administrador e atribuindo as respostas ao parâmetro $KERNDIR.
O script termina com uma rotina para tornar os dois parâmetros CLASSES e KERNDIR disponíveis para o ambiente de instalação e o script postinstall.
Criar um script postinstall.
O script postinstall realiza, na verdade, a instalação do driver. Ele é executado depois que os arquivos buffer e buffer.conf tiverem sido instalados. O arquivo postinstall mostrado neste exemplo realiza as seguintes ações:
Usa o comando add_drv para carregar o driver no sistema.
Cria um link para o dispositivo usando o comando installf.
Finaliza a instalação usando o comando installf -f.
Cria um script preremove.
O script preremove usa o comando rem_drv para descarregar o driver do sistema e, em seguida, remove o link /dev/buffer0 .
PKG=bufdev NAME=Buffer Device CATEGORY=system BASEDIR=/ ARCH=INTEL VERSION=Software Issue #19 CLASSES=none |
Para instalar um driver no momento da instalação, você deve incluir os arquivos de objeto e de configuração do driver no arquivo prototype.
Neste exemplo, o módulo executável do driver é nomeado buffer. O comando add_drv opera neste arquivo. O kernel usa o arquivo de configuração, buffer.conf, para ajudar a configurar o driver.
i pkginfo i request i postinstall i preremove f none $KERNDIR/buffer 444 root root f none $KERNDIR/buffer.conf 444 root root |
Ao observar o arquivo prototype deste exemplo, note o seguinte:
Visto que os objetos de pacote não precisam de nenhum tratamento especial, você pode colocá-los na classe none padrão. O parâmetro CLASSES está definido como none no arquivo pkginfo.
Os nomes de caminho de buffer e buffer.conf começam com a variável $KERNDIR. Esta variável está definida no script request e permite que o administrador decida onde os arquivos de driver devem ser instalados. O diretório padrão é /kernel/drv.
Há uma entrada para o script postinstall (o script que realizará a instalação do driver).
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 |