簡體   English   中英

使用c語言將字符串轉換為linux可加載內核模塊中的float

[英]convert string to float in linux loadable kernel module using c-language

我正在使用eclipse cdt為Linux內核版本2.6.38(ubuntu)在C中開發一個LKM

我的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 ,然后將其轉換為帶符號的short並將結果乘以負號,並將其分配給mem1

現在,我的問題是浮動成員。 由於內核不允許浮點運算,我堅持使用這個。 我無法使用整數進行計算。 當我嘗試編譯時我無法插入模塊。 我知道FP在內核中是不可能的。

還有其他的出路嗎? 非常緊急..請有人幫助我......

有人建議我在proc文件緩沖區中使用浮點數的二進制表示,而不是表示為字符緩沖區。 但是,我的proc文件是一個char緩沖區,而且,我如何從string轉換為float,我將再次面臨同樣的問題。

我需要一個字符串到浮點數轉換算法,不使用標准C庫,所以我寫了一個。 它也不使用浮點數學。 我已經描述了算法並在我的文章中發布了代碼。 代碼有一個很好的解析器處理科學記數法的所有慣例。 根據IEEE754,它還支持正確生成+/-無窮大和+/-零。

內核不允許FPU操作的主要原因之一是它會增加上下文切換的額外開銷。 每當處理器從用戶< - >內核空間切換時,需要交換一組寄存器。 添加FPU上下文將非常低效。

但是內核確實實現了一些浮點代碼本身。 它為FPU仿真(為用戶空間提供仿真FPU)執行此操作。 我懷疑有可能修補一些東西以使用仿真例程來獲得不影響用戶空間的FPU原語。

但是我認為你真的需要考慮你的內核模塊中是否需要浮點運算? 某種定點解決方案無法解決您的問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM