6.5.1 Написание функций-заглушек пользовательского пространства |
Предыдущая Содержание Следующая |
Распечатка 6.1 показывает структуры данных, участвующие в написании функции-заглушки, они находятся в файле kapi.h. Заглушка должна заполнить соответствующие структуры данных перед вызовом соответствующего ioctl драйвера kapi.Структурами данных являются:
▪dir_t: каждый аргумент, передаваемый в функцию, имеет направление, связанное с ним. Аргумент с направлением DIR_IN является для функции входным. Аргумент с направлением DIR_OUT является для функции выходным. ▪arg_t: это объект для хранения одного аргумента в функции. Настоящий аргумента приводится к типу указателя void *, а его размер и направление копирования хранятся в полях size и dir, соответственно. ▪kfunc_t: это основная структура данных. Указатель на объект типа kfunc_t передаётся в качестве аргумента для ioctl. Драйвер kapi также использует эту структуру, чтобы отправить обратно в функцию-заглушку возвращаемое значение функции ядра. ▪function_id: перечисление, содержащее команды ioctl для каждой функции, которая должна быть экспортирована в пространство пользователя.
Итак, функция-заглушка my_kernel_func, представляющая настоящую my_kernel_func в ядре, находится в файле kapi-user.c, текст её можно увидеть в Распечатке 6.2. Перед вызовом функций-заглушек следует убедиться, что драйвер kapi открыт успешно, как это делается в функции main в kapi-user.c.
char out[MAX_SIZE]; int ret;
dev_fd = open("/dev/kapi", O_RDONLY, 0666);
if (dev_fd < 0){ perror("open failed"); return 0; }
/* вызов заглушки */ ret = my_kernel_func(10, "Hello Kernel World", out);
printf("result = %d, out_str = %s\n", ret, out);
|
Предыдущая Содержание Следующая |