Проблемы с Hrtimers и clockid_t - PullRequest
       0

Проблемы с Hrtimers и clockid_t

3 голосов
/ 15 декабря 2011

Я работаю над новым планировщиком Linux, и мне нужны hrtimers. Я прочитал, как их реализовать, в: http://lwn.net/Articles/167897/

Я сделал небольшую программу для проверки этих таймеров перед их использованием, и у меня возникли некоторые проблемы.

Эта маленькая программа выглядит примерно так:

#include "linux/ktime.h"
#include "linux/hrtimer.h"
#include "linux/timer.h"
#include "linux/tick.h"

static void funcion_timers(unsigned long data) {

    printk(" HOLA HA SALTADO EL TIMER y el dato es %lu \n", data);

}

int main () {

    ktime_t kt;
    int i;
    struct hrtimer my_timer;
    clockid_t reloj;
    enum hrtimer_mode mode;
    kt = ktime_set(0, 5000000);
    reloj=CLOCK_MONOTONIC;
    mode=HRTIMER_REL;

    printk("EMPIEZA EL PROGRAMA");

    hrtimer_init(&my_timer, reloj);

    my_timer.function=&funcion_timers;
    my_timer.data=3;

    hrtimer_start(&my_timer, kt, mode);

    for (i=0; i<10000; i++) { } //A kind of waste of time cause I had problem with sleep into the kernel
}

И когда я компилирую, мне говорят (я не копирую из оболочки, потому что это на испанском xD):

  • HRTIMER_REL не был объявлен
  • hrtimer_init нужно больше аргументов
  • В my_timer.function=&funcion_timers; У меня несовместимый тип указателя: S
  • struct hrtimer не имеет члена с именем data

Зачем hrtimer_init нужны аргументы? Я думал, что это было определено как:

*void hrtimer_init(struct hrtimer *timer, clockid_t which_clock);*

В заключение, я думаю, что, возможно, я не понял, как работает clockid_t; как это работает? Я не могу найти слишком много информации об этом в Интернете.

Большое спасибо,: D Alberto

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

int main()?Вы пытаетесь вызвать функции ядра из пространства пользователя?

1 голос
/ 21 марта 2012

Как отметил Бантар, API для hrtimers изменился и, таким образом, сделал немало примеров, существующих в интернете, устаревшими.Вы можете взглянуть на текущие функции на https://github.com/torvalds/linux/blob/master/include/linux/hrtimer.h,, а сообщения о коммитах обычно (хотя сначала скрестите пальцы) дают представление о том, что изменилось, почему и что вы должны сделать, чтобы ваш код работал.

По приведенной выше ссылке:

HRTIMER_REL был переименован в HRTIMER_MODE_REL

hrtimer_init() требуется параметр режима (в вашем случае, вероятно, HRTIMER_MODE_REL)

Функция обратного вызова должна иметь тип: enum hrtimer_restart (*function)(struct hrtimer *)

Элемент data удален из struct hrtimer, поскольку сам таймер теперь передается функции обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...