Данный пакет производит установку драйвера.
В практическом примере применяются следующие методы:
Установка и загрузка драйвера с помощью сценария postinstall
Выгрузка драйвера с помощью сценария preremove
Для получения дополнительной информации об этих сценариях см. раздел Создание процедурных сценариев .
Создайте сценарий request.
Сценарий request определяет место, куда администратор хочет установить объекты драйвера, задавая администратору вопросы и назначая ответы параметру $KERNDIR.
Сценарий заканчивается подпрограммой, делающей два параметра - CLASSES и KERNDIR - доступными для среды установки и для сценарияpostinstall.
Создайте сценарий postinstall.
Сценарий postinstall производит непосредственную установку драйвера. Сценарий выполняется после того, как будут установлены два файла: buffer и buffer.conf. Файл postinstall, представленный в данном примере, выполняет следующие действия:
Использует команду add_drv для загрузки драйвера в систему.
Создает ссылку для устройства с помощью команды installf.
Завершает установку с помощью команды installf -f.
Создает сценарий preremove.
Сценарий preremove использует команду rem_drv для выгрузки драйвера из системы, а затем удаляет ссылку /dev/buffer0.
PKG=bufdev NAME=Buffer Device CATEGORY=system BASEDIR=/ ARCH=INTEL VERSION=Software Issue #19 CLASSES=none |
Для установки драйвера в ходе установки пакета необходимо включить объект и файлы настройки драйвера в файл prototype.
В данном примере исполняемый модуль драйвера называется buffer. Команда add_drv работает с этим файлом. Ядро системы использует файл настройки buffer.conf для помощи в настройке драйвера.
i pkginfo i request i postinstall i preremove f none $KERNDIR/buffer 444 root root f none $KERNDIR/buffer.conf 444 root root |
При рассмотрении файла prototype в этом примере обратите внимание на следующее:
Поскольку особой обработки объектов пакета не требуется, их можно поместить в стандартный класс none. Параметру CLASSES присваивается значение none в файле pkginfo.
Имена пути файлов buffer и buffer.conf начинаются с переменной $KERNDIR. Эта переменная устанавливается в сценарии request и позволяет администратору решить, куда устанавливать файлы драйвера. Каталог по умолчанию - /kernel/drv.
Существует запись для сценария postinstall (сценария, который будет производить установку драйвера).
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 |