Beaglebone Black LED驱动

本文介绍了如何在Beaglebone Black上编写和测试LED驱动。在Linux内核3.14.26环境下,LED被归类为字符设备。文章详细讲解了驱动的init、exit和open函数,并提供了应用测试代码。遇到的问题是首次加载驱动后应用无法打开设备,需要卸载后再加载才能正常工作。同时,使用fwrite对驱动写入时,驱动端的write函数未被调用,尝试使用fwrite+sync也未能解决。文章最后给出了完整的LED驱动代码,期待解答相关疑问。
摘要由CSDN通过智能技术生成

首先声明一下工作环境,Beaglebone Black(以下简称BBB)运行:ti-sdk-
am335x-evm-08的linux-3.14.26。虚拟机是ubuntu12.04 假定工作环
境都已经搭建完成。我们需要做的是编写一个LED驱动。并写一个简单的
APP去测试驱动工作状况。
Linux设备分为三类:
1 字符设备
2 块设备
3 网络设备
LED明显归属于第一类,字符设备。接下来先从加载驱动的首先执行的init函数讲解,讲解将主要解释重要函数。完整代码在最后面给出。

/*************************************************
*MAJOR提取主设备号,如果不为零,即手动定义了,那么使用*register_chrdev_region进行注册,第一参数是设备号,在这里只需要注
*册一个设备号,因此第二个参数为1,第三个参数就是起一个名字。如果没有手动
*定义。那么使用alloc_chrdev_region分配。一般推荐使用手动分配,这样
*代码可移植性高。
************************************************/
if(MAJOR(dev->devt))
    ok = register_chrdev_region(dev->devt, 1, dev->name);
} else {
    ok = alloc_chrdev_region(&dev->devt, MINOR(dev->devt), 1, dev->name);
}

/********************************************************
*创建设备类,创建成功后可以在sysfs/class/见到dev->name名字的文件夹
*设备类创建成功后,使用device_create创建设备节点。创建成功后我们就能
*在/dev下找到我们的dev->name名称的LED设备。这样就不需要再使用mknod
*手动创建了。
********************************************************/
dev->dev_class = class_create(THIS_MODULE, dev->name);

dev->device = device_create(dev->dev_class, NULL, dev->devt, dev, dev->name);

/******************************************************
*dev->dev是struct cdev类型,它代表了一个字符设备。首先我们使用
*cdev_init进行初始化,并把dev->fop我们提供的调用函数与字符设备
*关联起来。接下来利用cdev_add加入系统中。在cdev_add中将会将设备加入
*kobject结构里进行管理,并调用kobject_get()增加引用计数。想了解这
*部分内容的可看设备模型。这样系统调用就可以找到我们提供的dev->fop操作
*函数了。
******************************************************/
cdev_init(&dev->dev, &dev->fop);
ok = cdev_add(&dev->dev, dev->devt, 1);

exit()函数则执行与init相反的的工作,注意销毁顺序最好与init的相反。
接下来的要探讨open函数。在open函数里我们进行对LED的GPIO管脚注册初始化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值