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

/**********************************************
*文 件 名: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);

就可以了.

最新文章

  1. XML Schema choice 元素
  2. ueditor .net版本上传图片功能配置
  3. bootstrap框架 导航条组件使用
  4. 孙鑫MFC学习笔记17:进程间通信
  5. Oracle 中循环遍历某张表,并对符合条件的进行Update操作
  6. vs代码段快捷键设置
  7. HDU 5093
  8. 【Largest Rectangle in Histogram】cpp
  9. RIA技术
  10. Spring概述--1
  11. 犯这个错误的肯定不止我一个 关于File
  12. openCV python 安装
  13. 利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析
  14. awstats 日志分析
  15. Django源码解析
  16. C++ struct 初始化的问题
  17. python基础===八大排序算法的 Python 实现
  18. servlet生成验证码
  19. Java A+B(个人模版)
  20. 使用Flink的SavePoint功能

热门文章

  1. excel,access常用公式函数VBA代码汇总文章
  2. SQL SERVER – Count Duplicate Records – Rows
  3. VA中修改函数注释
  4. leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)
  5. java 生成UUID
  6. Amazon全场满$35减$5 (需Facebook)
  7. JavaScript 编写线程代码引用Concurrent.Thread.js
  8. python 基础——装饰器
  9. vc如何编译链接opengl库
  10. Pascal 语言中约瑟夫问题:幸运观众