嵌入式学习记录2

1、注册去注册一个设备驱动

    devno = MKDEV(major, minor);
    result = register_chrdev_region(devno, 1, "zlytest");

     unregister_chrdev_region(devno, 1);

2、编译运行在用户空间的应用程序

arm-linux-gcc moduleProgtest.c -o zlytest2

3、创建设备节点

mknod /dev/zlytest c 250 0

查看节点ls /dev -al

insmod 之后,可在/proc/devices查看设备编号

在应用程序中打开节点:

fd = open("/dev/zlytest", O_RDWR);//man 2 open查询帮助

执行open后,内核找到对应file_operations中的open过程:

4、写字符设备驱动流程

static unsigned int major = 250;
static unsigned int minor = 0;
static dev_t devno = 0;
static struct cdev t_cdev;
static int hello_open(struct inode *inode, struct file *filep)
{
	printk("hello open/n");
	return 0;
}

static struct file_operations hello_ops= 
{
	.open = hello_open,
};

static int hello_init(void)
{
	printk(KERN_EMERG"hello int \n");
	int result;
	int error;
	devno = MKDEV(major, minor);
    result = register_chrdev_region(devno, 1, "zlytest");
	if(result < 0)
    {
		printk("register fail\n");
		return result;
	}
	cdev_init(&t_cdev, &hello_ops);
	error = cdev_add(&t_cdev, devno, 1);
	if(error < 0)
	{
		printk("cdev_add fail\n");
		unregister_chrdev_region(devno, 1);
		return error;
	}
	return 0;
}
static int hello_exit(void)
{
	printk(KERN_ERR"hello exit \n");
	cdev_del(&t_cdev);
	unregister_chrdev_region(devno, 1);
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值