我是内核模块开发的新手,并陷入了某种困境。 我有一个设备节点设置,并希望通过以下方式将一个整数写入文件:
echo 20000> / dev / chardev0
我在device_write(... const char * buff)中收到了预期的20000,并希望将其转换为long。我已经找到strict_strtol或kstrtol,但是我得到的奇怪行为是相同的。
问题: 当我发送20000时,转换进行顺利。 当我发送200时,转换失败,错误-22。为什么?
我使用:
long li;
int result = 0;
result = strict_strtol(msgBuffer, 10, &li);
请参阅:(通过printk我已经打印了一些数据)
Sep 19 14:30:52 student-fontys kernel: [ 5336.805308] Data 200
Sep 19 14:30:52 student-fontys kernel: [ 5336.805308] 0
Sep 19 14:30:52 student-fontys kernel: [ 5336.805311] Buffer lengte2: 4
Sep 19 14:30:52 student-fontys kernel: [ 5336.805312] 2
Sep 19 14:30:52 student-fontys kernel: [ 5336.805313] 0
Sep 19 14:30:52 student-fontys kernel: [ 5336.805314] 0
Sep 19 14:30:52 student-fontys kernel: [ 5336.805315]
Sep 19 14:30:52 student-fontys kernel: [ 5336.805315]
Sep 19 14:30:52 student-fontys kernel: [ 5336.805317] Conversion from buffer failed. Error -22
Sep 19 14:31:12 student-fontys kernel: [ 5357.282007] Device-write start
Sep 19 14:31:12 student-fontys kernel: [ 5357.282013] Data 20000
Sep 19 14:31:12 student-fontys kernel: [ 5357.282015] Buffer lengte2: 6
Sep 19 14:31:12 student-fontys kernel: [ 5357.282016] 2
Sep 19 14:31:12 student-fontys kernel: [ 5357.282017] 0
Sep 19 14:31:12 student-fontys kernel: [ 5357.282018] 0
Sep 19 14:31:12 student-fontys kernel: [ 5357.282019] 0
Sep 19 14:31:12 student-fontys kernel: [ 5357.282020] 0
Sep 19 14:31:12 student-fontys kernel: [ 5357.282021]
Sep 19 14:31:12 student-fontys kernel: [ 5357.282021]
Sep 19 14:31:12 student-fontys kernel: [ 5357.282023] Data: 20000
Sep 19 14:31:12 student-fontys kernel: [ 5357.282023] Device-write end
那么,解决这个问题的最佳方法是什么?