6.5.1 Написание функций-заглушек пользовательского пространства

Предыдущая  Содержание  Следующая V*D*V

Распечатка 6.1 показывает структуры данных, участвующие в написании функции-заглушки, они находятся в файле kapi.h.

Заглушка должна заполнить соответствующие структуры данных перед вызовом соответствующего ioctl драйвера kapi.Структурами данных являются:

 

dir_t: каждый аргумент, передаваемый в функцию, имеет направление, связанное с ним. Аргумент с направлением DIR_IN является для функции входным. Аргумент с направлением DIR_OUT является для функции выходным.

arg_t: это объект для хранения одного аргумента в функции. Настоящий аргумента приводится к типу указателя void *, а его размер и направление копирования хранятся в полях size и dir, соответственно.

kfunc_t: это основная структура данных. Указатель на объект типа kfunc_t передаётся в качестве аргумента для ioctl. Драйвер kapi также использует эту структуру, чтобы отправить обратно в функцию-заглушку возвращаемое значение функции ядра.
num: количество аргументов
args: объекты типа arg_t, заполненные на каждого аргумента
ret: возвращаемое значение функции

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);

 

Предыдущая  Содержание  Следующая