今天在寫一個簡單的內核測試模塊的時候出現了一個挺奇怪的問題,網上查了一下也沒人解決,本身試了很久終於解決了,因此分享出來供你們參考,先貼出源碼:linux
/********************************************** *文 件 名: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.由於模塊運行在內核空間中,權限要求比較嚴格.ui
因此將spa
module_param(mystring, charp, 0777);code
module_param_array(array, int, NULL, 0777); blog
改爲內存
module_param(mystring, charp, 0555);源碼
module_param_array(array, int, NULL, 0444);string
就能夠了.