- 论坛徽章:
- 0
|
小弟想写个并口输出试试,设置vmware把并口输出到文件,但是怎么试,输出文件也没内容,但往/dev/lp中写数据可以看到。
下面是我的代码,初始化都没有返回任何错误,请高手帮忙!
#include <linux/init.h>
#include <linux/types.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/module.h>
#include <asm/io.h>
#include <linux/ioport.h>
#include <asm/system.h>
#define DEV_NUM 3
#define DEV_NAME "pio"
#define PORT 0x378
#define PORT_NUM 1
dev_t dev_num;
struct resource *p_res;
struct pio_data {
struct cdev mdev;
};
struct file_operations pio_ops = {
.owner = THIS_MODULE,
};
struct pio_data pio_devs[DEV_NUM];
int __init pio_init() {
int ret = 0;
int i = 0;
dev_t dnum;
printk(KERN_ALERT"pio init\n");
ret = alloc_chrdev_region(&dev_num, 0, DEV_NUM, DEV_NAME);
if (ret < 0) {
printk(KERN_ALERT"pio: can not alloc major number\n");
return ret;
}
for (i = 0; i < DEV_NUM; i++) {
dnum = MKDEV(MAJOR(dev_num), i);
cdev_init(&(pio_devs.mdev), &pio_ops);
pio_devs.mdev.owner = THIS_MODULE;
ret = cdev_add(&(pio_devs.mdev), dnum, 1);
if (ret < 0) {
printk(KERN_ALERT"pio: can not create device: %d:%d\n", MAJOR(dev_num), i);
return ret;
}
}
p_res = request_region(PORT, PORT_NUM, DEV_NAME);
if (p_res == NULL) {
printk(KERN_ALERT"pio: request i/o ports error.\n");
return ret;
}
for (i = 0; i < 10; i++) {
outb('a' + i, PORT);
wmb();
}
return 0;
}
void __exit pio_exit() {
int i = 0;
printk("pio exit\n");
release_region(PORT, PORT_NUM);
for (i = 0; i < DEV_NUM; i++) {
cdev_del(&(pio_devs.mdev));
}
unregister_chrdev_region(dev_num, DEV_NUM);
}
module_init(pio_init);
module_exit(pio_exit); |
|