編譯內核模塊出現error: negative width in bit-field 錯誤


今天在寫一個簡單的內核測試模塊的時候出現了一個挺奇怪的問題,網上查了一下也沒人解決,自己試了好久終於解決了,所以分享出來供大家參考,先貼出源碼:

/**********************************************
 *文 件 名:hello.c
 *文件描述:給模塊傳參
 *創 建 人:Wang.J,2013.10.26
 *版 本 號:0.1
 *修改記錄:
**********************************************/
 #include <linux/kernel.h>
 #include <linux/module.h>

 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);

就可以了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM