当前位置: 首页 > wzjs >正文

dedecms网站的下载百度seo

dedecms网站的下载,百度seo,企业网设计案例分析,网站域名登陆地址查询Linux驱动开发2:字符设备驱动 字符设备驱动开发流程 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如最常见的点灯、按键、 IIC、 SPI&#x…

Linux驱动开发2:字符设备驱动

字符设备驱动开发流程

字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如最常见的点灯、按键、 IIC、 SPI, LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。

驱动就是获取外设、或者传感器数据,控制外设。数据会提交给应用程序。Linux驱动编译既要编写一个驱动,还要我们编写一个简单的测试应用程序,APP,Linux下驱动和应用是完全分开的。

字符设备的注册与注销

注册字符设备使用register_chrdev函数

函数原型:static inline int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops)

major: 主设备号, Linux 下每个设备都有一个设备号,设备号分为主设备号和次设备号两部分
name:设备名字,指向一串字符串。
fops: 结构体 file_operations 类型指针,指向设备的操作函数集合变量。

注销字符设备使用 unregister_chrdev函数

函数原型:static inline void unregister_chrdev(unsigned int major, const char *name);
major: 要注销的设备对应的主设备号。
name: 要注销的设备对应的设备名。

设备号
Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备

Linux 提供了一个名为 dev_t 的数据类型表示设备号

dev_t 其实就是 unsigned int 类型,是一个 32 位的数据类型,其中高 12 位为主设备号, 低 20 位为次设备号。

可以通过cat /proc/devices命令查看当前设备中已被使用的主设备号

在这里插入图片描述

字符驱动编写

字符设备驱动的编写主要就是驱动对应的open/close/read/write函数的编写,本质上就是对file_operations结构体的成员变量的实现。

在此给出结构体函数定义
在这里插入图片描述
完善实现file_operations结构体的成员变量open/close/read/write函数的实现后进行编译
在这里插入图片描述

编写应用程序进行测试

在这里插入图片描述
加载驱动后移植应用代码进行测试
在这里插入图片描述
输入命令手动创建驱动节点
在这里插入图片描述

输入命令测试chrdevbase驱动
在这里插入图片描述
最后给出一般流程下的完整字符设备驱动框架

字符驱动开发总流程
一、设备树定义
1、在设备树文件中定义节点示例:gpioled {#address-cells = <1>;#size-cells = <1>;compatible = "alientek,gpioled";pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpioled>;led-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;status = "okay";};pinctrl_gpioled: gpiogrp {fsl,pins = <MX6UL_PAD_GPIO1_IO03__GPIO1_IO03	0x10b0	/* gpioled */	>;};二、驱动代码开发
1、module_init和module_exit
2、声明模块相关信息1-作者:MODULE_AUTHOR(author);2-描述:MODULE_DESCRIPTION(description);3-版本:MODULE_VERSION(version_string);4-设备表:MODULE_DEVICE_TABLE(table_info);5-别名:MODULE_ALIAS(alternate_name);6-开源协议:MODULE_LICENSE("GPL");
3、定义字符设备结构体
4、定义设备操作函数 file_operations
5、实现init函数流程1-注册字符设备,判断major是否已被指定Y:register_chrdev_region(dev_t from, unsigned count, const char *name)N:alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)	-> MAJOR,MINOR2-添加cdev字符设备cdev_init(struct cdev *cdev, const struct file_operations *fops) -> cdev_add(struct cdev *p, dev_t dev, unsigned count)3-创建class设备类	class_create(owner, const char *name)4-创建device设备device_create(struct class *class, NULL , dev_t devt, NULL, const char *name)5-获取设备树节点信息of_find_node_by_path(const char *path)5.1-获取对应的GPIOof_get_named_gpio(struct device_node *np, const char *propname, int index)5.2-申请IOgpio_request(unsigned gpio, const char *label)5.3-设置GPIO口输入输出模式并配置默认输出模式gpio_direction_output(unsigned gpio, int value)5.4-设置指定GPIO口电平值gpio_set_value(unsigned int gpio, int value)6-获取设备树属性信息of_property_read_string-字符串of_property_count_elems_of_size-获取数组大小of_property_read_u32_array-从数组中获取每个元素等7-实现write操作函数-从应用程序用户空间拷贝数据copy_from_user(void *to, const void __user *from, unsigned long n)//7-实现地址映射//	ioremap 或 of_iomap
6、实现exit函数流程1-释放GPIOgpio_free(unsigned gpio)//2-取消地址映射//	iounmap3-删除device设备device_destroy(struct class *class, dev_t devt)4-删除class设备类class_destroy(struct class *cls)5-注销cdev字符设备cdev_del(struct cdev *p)6-释放设备号unregister_chrdev_region(dev_t from, unsigned count)
http://www.dtcms.com/wzjs/92410.html

相关文章:

  • 宜春市城乡规划建设局网站西安网站seo诊断
  • 个人网站如何快速通过icp备案外贸网站建设推广
  • 网站开发报价单模板全网营销推广 好做吗
  • b站推广网站入口无病毒如何制作企业网站
  • 群晖ds216j能否做网站seo基本概念
  • 基于工作过程的商务网站建设 网页制作免费有效的推广平台
  • 数据库与动态网站开发实验报告福州网seo
  • 各大网站提交入口网络营销是什么专业
  • 菏泽 兼职做网站seo 知乎
  • app导航网站源码seo还有未来吗
  • g点网站建设工作室收录网站排名
  • 二手书网站开发需求分析企业培训机构排名
  • 自己建公司网站可以嘛深企在线
  • 如何在mac系统安装wordpress百度关键词排名优化
  • 商务网站开发与建设危机公关处理方案
  • 答题app怎么制作玉林网站seo
  • 网站的主要功能槐荫区网络营销seo
  • 北京市政府网站建设规范域名批量查询工具
  • 广州开发区第二小学北校区win7怎么优化最流畅
  • 摄影网站的实验设计方案排名app
  • 怎么在网站后面做链接百度官方客服
  • esp8266做网站网络营销服务有哪些
  • 深圳企业网站制作中心网站排名软件优化
  • 铁岭做网站信息济南优化哪家好
  • 用easyui做的网站如何自己免费制作网站
  • 人人车网站建设费用德阳seo优化
  • 做外语网站近期发生的重大新闻
  • 基础网站建设公司班级优化大师下载安装app
  • 做产品设计之前怎么查资料国外网站中小企业网站制作
  • 什么学习网站建设网络公司关键词排名