我正在学习编写我的第一个 Linux 字符驱动程序,但似乎无法使其按预期工作。
驱动模块的初始化和退出函数代码如下:
static int __init one_init(void)
{
int result;
printk(KERN_DEBUG "In ones init call");
result = alloc_chrdev_region(&onedev, 0, 4, "one");
printk("Allocated device major: %d, first minor: %d",MAJOR(onedev),MINOR(onedev));
return 0;
}
static void __exit one_exit(void)
{
unregister_chrdev_region(onedev,4);
printk(KERN_DEBUG "In ones exit call");
}
在我卸载我的驱动程序后,我的设备仍然显示在/proc/devices
中,其退出函数调用unregister_chrdev_region
。
dmesg
命令打印显示我的驱动程序的 init 和 exit 调用已经完成。
我看到了几个相关的问题,但是答案并没有解决我看似简单的问题。
我做错了什么或期望错了什么?
最佳答案
在终端中使用“rmmod 模块名称”。这应该卸载模块并删除关联。
关于linux -/proc/devices 仍然显示未注册的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13566504/