Я разрабатываю LKM на C, используя eclipse cdt для ядра Linux, версия 2.6.38 (ubuntu)
В моем LKM есть следующий тип данных структуры со следующими членами
struct example {
signed short mem1;
float mem2;
float mem3;
};
У меня есть файл / proc, через который я хочу передать данные в этот LKM и инициализировать элементы данных этой структуры.
Мой буфер файлов / proc выглядит так:
static char procfs_buffer[1024];
и будет иметь строковое значение, подобное этому
"-123,-77.123456,-66.123456,"
Я хочу инициализировать элементы структуры, например,
mem1 with -123;
mem2 with -77.123456;
mem3 with -66.123456;
Я могу отделить вышеуказанную строку как:
string str1[5] with value 123 ;
string str2[5] with value 77 ;
string str3[8] with value 123456 ;
string str4[5] with value 66 ;
string str5[8] with value 123456
и используя simple_strtol()
я преобразовал эти строки в длинные числа.
Мне удалось преобразовать str1
в long
, затем привести его к короткому знаку и умножить результат на отрицательный знак и присвоить mem1
Теперь моя проблема - члены поплавка. Поскольку ядро не разрешает операции с плавающей запятой, я застрял с этим. Я не могу сделать расчет с использованием целых чисел. Когда я попробовал, я не смог вставить модуль после компиляции. Я знаю, что FP не возможно в ядре.
Есть ли другой выход? это очень срочно ... пожалуйста, кто-нибудь, помогите мне ...
Кто-то предложил мне использовать двоичное представление чисел с плавающей точкой в буфере файла proc вместо представления в качестве символьного буфера. Но мой proc-файл представляет собой буфер символов, и, более того, опять же, как мне преобразовать строку в число с плавающей точкой, я снова столкнусь с той же проблемой.