博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译内核模块出现error: negative width in bit-field 错误
阅读量:7222 次
发布时间:2019-06-29

本文共 2681 字,大约阅读时间需要 8 分钟。

hot3.png

今天在写一个简单的内核测试模块的时候出现了一个挺奇怪的问题,网上查了一下也没人解决,自己试了好久终于解决了,所以分享出来供大家参考,先贴出源码:

/********************************************** *文 件 名:hello.c *文件描述:给模块传参 *创 建 人:Wang.J,2013.10.26 *版 本 号:0.1 *修改记录:**********************************************/ #include 
#include
MODULE_LICENSE("Dual BSD/GPL"); //定义参数 int myint = 100; char *mystring = "This is name!"; short myshort = 10; long mylong = 100; int array[2] = {
0}; //模块参数声明 module_param(myshort, short, 0555); module_param(myint, int, 0444); module_param(mylong, long, 0444); module_param(mystring, charp, 0777); module_param_array(array, int, NULL, 0777);/*============================================== *函 数 名:hello_module_init *参 数:void *功能描述:注册模块 *返 回 值:成功,返回0 *异 常: *创 建 人:Wang.J,2013.10.26 *修改记录:==============================================*/ static int hello_module_init(void) { int ret = 0; int i; printk("This shirt is %d\n", myshort); printk("This int is %d\n", myint); printk("This long is %ld\n", mylong); printk("This string is %s\n", mystring); for (i = 0; i < sizeof(array)/sizeof(array[0]); i++) { printk("The %d of number is %d\n", i, array[i]); } return ret; }/*============================================== *函 数 名:hello_module_cleanup *参 数:void *功能描述:卸载函数 *返 回 值:void *异 常: *创 建 人:Wang.J,2013.10.26 *修改记录:==============================================*/ static void hello_module_cleanup(void) { printk("hello_module_cleanup\n"); }module_init(hello_module_init);module_exit(hello_module_cleanup);//模块声明与描述MODULE_AUTHOR("Wang.J");MODULE_DESCRIPTION("hello This");MODULE_ALIAS("别名");MODULE_SUPPORTED_DEVICE("内存模拟");

编译错误提示:

make -C /lib/modules/3.2.0-29-generic-pae/build M=/home/linux/driver/experiment/ex04

make[1]: Entering directory `/usr/src/linux-headers-3.2.0-29-generic-pae'
  LD      /home/linux/driver/experiment/ex04/built-in.o
  CC [M]  /home/linux/driver/experiment/ex04/hello.o
/home/linux/driver/experiment/ex04/hello.c:24:1: error: negative width in bit-field ‘<anonymous>’
/home/linux/driver/experiment/ex04/hello.c:25:2: error: negative width in bit-field ‘<anonymous>’
make[2]: *** [/home/linux/driver/experiment/ex04/hello.o] Error 1
make[1]: *** [_module_/home/linux/driver/experiment/ex04] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-29-generic-pae'
make: *** [modules] Error 2

最后发现是module_param声明中有关权限的问题,这个权限不能是可写的.也就是说这个权限只能是rx的任意组合,5或4或1.因为模块运行在内核空间中,权限要求比较严格.

所以将

module_param(mystring, charp, 0777);

module_param_array(array, int, NULL, 0777);

改成

module_param(mystring, charp, 0555);

module_param_array(array, int, NULL, 0444);

就可以了.

转载于:https://my.oschina.net/u/124452/blog/172248

你可能感兴趣的文章
50个Demo展示HTML5无穷的魅力
查看>>
chapter 4:贪心
查看>>
批处理学习笔记
查看>>
Linux挂载磁盘
查看>>
Cyclone II RAM ROM设置
查看>>
Ubuntu下实现伪静态
查看>>
python 二维数组遍历
查看>>
第8周课下作业1(补)
查看>>
阿萨斯
查看>>
service启动和停止,绑定和解除绑定
查看>>
elasticsearch开机启动脚本
查看>>
window service 恢复选项卡设置
查看>>
车辆管理系统之编码过程总结(十一)
查看>>
基于AOE网的关键路径的求解
查看>>
2017-5-16 python标准库
查看>>
浅谈游戏的声音处理-流播放文件 source
查看>>
旧版本转换成支持ARC版本
查看>>
创建与服务器的输入输出流
查看>>
string.hのmemmove的实现
查看>>
dicom网络通讯入门(1)
查看>>