首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

调用rmmod无法进入函数解决办法

2013-01-27 
调用rmmod无法进入函数附代码:#include linux/init.h#include linux/module.h#include linux/types.h

调用rmmod无法进入函数
附代码:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/cdev.h>
#include <linux/io.h>
#include <asm/io.h>
#include <linux/device.h>

#define TEST_MAJOR 250
#define TEST_NAME  "test"

/*可以根据物理地址,可通过ioremap()获得虚拟地址*/
#define GPMCON0xF4500820//这里是虚拟地址,物理地址是0x7F008820
#define GPMDAT0xF4500824//物理地址0x7F008824


struct cdev test_dev;
static dev_t ndev=MKDEV(TEST_MAJOR, 0);

static struct class *autodev;
static struct class_device * autodev_class;

static ssize_t test_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
{
  return 0;
}


static ssize_t test_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos)
{
  return 0;
}


static long test_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
  unsigned char tmp=0;

  tmp = cmd;
  outl(tmp, GPMDAT);//与writel(0x00, GPMDAT);  相同
  return 0;
}

struct file_operations test_fops=
{
  .owner = THIS_MODULE,
  .read = test_read,
  .write = test_write,
  .unlocked_ioctl = test_ioctl,
};


static int test_init(void)
{
  int ret;
  cdev_init(&test_dev, &test_fops);
  //alloc_chrdev_region(&ndev, 0, 1, TEST_NAME);
  register_chrdev_region(ndev, 1, TEST_NAME);
  ret = cdev_add(&test_dev, ndev, 1);
  autodev = class_create(THIS_MODULE,TEST_NAME);
  autodev_class = device_create(autodev,NULL,ndev,NULL,TEST_NAME);
  printk(KERN_INFO"hello word enter is OK\n");
  return 0;
}


static void test_exit(void) 
{
  printk(KERN_INFO"hello word exit\n");
  device_destroy(autodev,ndev);  //必须先删除设备
  class_destroy(autodev);     //后删除class类
  unregister_chrdev_region(ndev, 1);
  cdev_del(&test_dev);
}

module_init(test_init);
module_exit(test_exit);

MODULE_LICENSE("GPL");

执行insmod没问题的,可以加载并且自动在dev下创建设备节点文件,可是rmmod,连第一句打印信息都没有,dmesg看了也没有打印信息,确定是没进入到函数test_exit()
求解决办法
[解决办法]
测试:
写个简单的helloworld驱动,ismod后rmmod试试。
如果rmmod 没反应,则该命令的问题。

或者直接测试:
rmmod aaa (aaa不存在,如果rmmod命令是好的,应该报错的)
如果不报错,则说明rmmod命令根本就是空链接。

热点排行