没有出错信息 ,可测试就是没结果
#include <linux/slab.h>#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#define LED_MAJOR111
#define LED_SIZE0x1000
int led_major=LED_MAJOR;
struct led_dev{
struct cdev cdev;
unsigned char mem;
};
struct led_dev *led_devp;
int led_open(struct inode *inode,struct file *file)
{
printk("this is my first device driver program");
return 0;
}
int led_write(struct file *file,char __user *buf,size_t size ,loff_t *ppos)
{
printk("write something here");
return 0;
}
struct file_operations led_fops={
.owner=THIS_MODULE,
.open=led_open,
.write=led_write,
};
int led_setup_dev(struct led_dev *dev,int index)
{
dev_t devno=MKDEV(led_major,0);
cdev_init(&dev->cdev,&led_fops);
dev->cdev.owner=THIS_MODULE;
cdev_add(&dev->cdev,devno,1);
}
int led_init(void)
{
dev_t devno=MKDEV(led_major,0);
register_chrdev_region(devno,1,"led");
led_devp=kmalloc(sizeof(struct led_dev),GFP_KERNEL);
memset(led_devp,0,sizeof(struct led_dev));
led_setup_dev(led_devp,0);
}
int led_exit(void)
{
dev_t devno=MKDEV(led_major,0);
cdev_del(&led_devp->cdev);
kfree(led_devp);
unregister_chrdev_region(devno,1);
}
MODULE_LICENSE("Dual BSD/GPL");
module_init(led_init);
module_exit(led_exit);
为何不打印出 printk 的内容,也没有出错信息 #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc,char **argv)
{
int fd;
int val =1;
fd=open("/dev/led",O_RDWR);
if(fd<0)
printf("cant open!\n");
write(fd,&val,4);
return 0;
}
这个是测试程序,希望高手copy运行一下,给小弟找个原因 dmesg看看有没有你想要的输出。
cat /proc/sys/kernel/printk 看看是不是输出级别不够。
本帖最后由 冬天的落阳 于 2012-05-18 15:17 编辑
3楼说的没错。
我觉得你很可能用的是图形界面中的terminal,所以才看不到的。你先按照3楼的方法试试。
不行的话,我再补充一点:
注意到你的printk没有申明优先级。如果是自己编译的内核,你看一下Default message log level 被你设置成什么值了。
位置:
Kernel hacking---> Default message log level (1-7)
谢谢,问题解决了,还是高手一指示管用阿,学习到了
页:
[1]