1. 1、本文档共40页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
08_LED驱动

第8讲 LED驱动讲师:李宁主要内容 LED驱动的实现原理 编写LED驱动 测试LED驱动 LED驱动的移植讲师 李宁LED驱动的实现原理 地址映射讲师 李宁体验一下LED驱动sh /root/drivers/s3c6410_leds/build_s3c6410.sh LED驱动会建立一个/dev/s3c6410_leds设备文件。LED驱动可以控制4个LED(在开发板的锂电池旁边,靠近电池的LED编号为1,离电池最远的LED编号为4)。通过向/dev/s3c6410_leds发送长度为1到4的字符串可以控制这4个LED的开关。1表示开、0表示关。如果字符串长度不足4个,相当于后面补0。例如“11”相当与“1100”。adb shell “echo ‘1’ /dev/s3c6410_leds”# 打开第1个LED,其他的LED都关闭adb shell “echo ‘1010’ /dev/s3c6410_leds”# 第1个和第3个LED打开,第2个和第4个LED关闭 adb shell echo 1111 /dev/s3c6410_leds”# 打开所有的LED讲师 李宁创建LED驱动的设备文件 使用cdev_init函数初始化cdev指定设备号 用cdev_add方法添加字符设备使用class_create宏创建struct class使用device_create函数创建设备文件 讲师 李宁使用cdev_init函数初始化cdev(1) 描述设备文件需要一个cdev结构体。该结构体在include/linux/cdev.h文件中定义,代码如下:struct cdev { struct kobject kobj;// 封装设备文件的对象 struct module *owner;// 指向内核模块的指针 const struct file_operations *ops;// 指向file_operations结构体的指针 struct list_head list;// 指向上一个和下一个cdev结构体的指(prev和next) dev_t dev;// dev_t是int数据类型,表示设备号。前12位表示主设备号 // 后20为次设备号 unsigned int count; // 请求的连接设备编号范围(最大值),在建立多个设备文件时使用}; 讲师 李宁使用cdev_init函数初始化cdev(2) cdev的大多数成员并不需要我们自己去初始化,只要调用cdev_init函数就可以初始化大部分cdev的成员。cdev_init函数在fs/char_dev.c文件中,代码如下:void cdev_init(struct cdev *cdev, const struct file_operations *fops){ // 将cdev结构体中的成员变量清零 memset(cdev, 0, sizeof *cdev); // 初始化首尾指针 INIT_LIST_HEAD(cdev-list); // 初始化设备未见对象 kobject_init(cdev-kobj, ktype_cdev_default); // 关联cdev和file_operations cdev-ops = fops;}讲师 李宁使用cdev_init函数初始化cdev(3) 如果在一个Linux驱动在要建立多个设备文件,cdev.count变量的值就是要建立的设备文件数。这个设备文件数在以后还会多次使用。而这些设备文件对应的cdev结构体就通过cdev.list.prev和cdev.list.next指针变量连接。从而形成了一个双向链表。cdev.owner变量并未在cdev_init函数中初始化,因此要使用下面的代码初始化cdev.owner变量。// leds_cdev为cdev类型的变量。要为当前Linux驱动建立设备文件需要使用THIS_MODULE初始化leds_cdev.owner = THIS_MODULE;讲师 李宁指定设备号 Linux设备文件的设备号分为主设备号和次设备号。用1个int类型(dev_t)表示。其中前12位表示主设备号,后20位表示次设备号。设备号有如下两种指定方法。直接在代码中指定(硬指定)动态分配讲师 李宁动态分配设备号(1) 使用alloc_chrdev_region函数自动分配一个未使用的主设备号。从理论上次设备号可以设为任何合法的值,但习惯上会将次设备号设为0。alloc_chrdev_region函数的定义如下:int alloc_chrdev_region(dev_

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档