非盈利网站建设问题响应式品牌网站设计

bicheng/2026/1/17 20:56:21/文章来源:
非盈利网站建设问题,响应式品牌网站设计,网站导航条背景图片,中山seo关键词1 设备的概念 在学习驱动和其开发之前#xff0c;首先要知道所谓驱动#xff0c;其对象就是设备。 1.1 主设备号次设备号#xff1a; 在Linux中#xff0c;各种设备都以文件的形式存在/dev目录下#xff0c;称为设备文件。最上层的应用程序可以打开#xff0c;关…1 设备的概念 在学习驱动和其开发之前首先要知道所谓驱动其对象就是设备。 1.1 主设备号次设备号 在Linux中各种设备都以文件的形式存在/dev目录下称为设备文件。最上层的应用程序可以打开关闭读写这些设备文件从而完成对设备的操作。 为了管理这些设备系统为设备编了号每个设备都拥有主设备号和次设备号。主设备号用于区分不同种类的设备而次设备号用于区分同一类型的多个设备。对于常用的设备如硬盘Linux赋予的主设备号一般是3 在/dev目录下输入“ls -l”就可以看到设备文件对应的主次设备号 1.2 设备号的用处 在了解了什么是主次设备号之后就要了解设备号的用处 在用户态中当用户调用了如open, read, write等函数想要操作设备文件时需要两个参数第一个是文件名第二个就是设备号在内核态中存在着一个驱动链表用于管理所有设备的驱动而驱动在链表中的位置就由设备号来检索 2 驱动的概念 参考最全Linux驱动开发全流程详细解析持续更新-CSDN博客 Q1什么是驱动 A驱动与底层硬件直接打交道充当了硬件设备与应用软件中间的桥梁 Q2驱动的功能 对设备初始化和释放把数据从内核传送到硬件 从硬件读取数据读取应用程序传送给设备文件的数据 回送应用程序请求的数据检测和处理设备出现的错误 Q3驱动的分类 Linux驱动分为三个基础大类字符设备驱动块设备驱动网络设备驱动。 字符设备(Char Device) 字符设备是个能够像字节流类似文件一样被访问的设备对字符设备发出读/写请求时实际的硬件I/O操作一般紧接着发生字符设备驱动程序通常至少要实现open、close、read和write系统调用比如我们常见的lcd、触摸屏、键盘、led、串口等等他们一般对应具体的硬件都是进行出具的采集、处理、传输 块设备(Block Device) 一个块设备驱动程序主要通过传输固定大小的数据一般为512或1k来访问设备块设备通过buffer cache(内存缓冲区)访问可以随机存取即任何块都可以读写不必考虑它在设备的什么地方块设备可以通过它们的设备特殊文件访问但是更常见的是通过文件系统进行访问只有一个块设备可以支持一个安装的文件系统比如我们常见的电脑硬盘、SD卡、U盘、光盘等 网络设备(Net Device) 任何网络事务都经过一个网络接口形成即一个能够和其他主机交换数据的设备访问网络接口的方法仍然是给它们分配一个唯一的名字比如eth0但这个名字在文件系统中不存在对应的节点内核和网络设备驱动程序间的通信完全不同于内核和字符以及块驱动程序之间的通信内核调用一套和数据包传输相关的函socket函数而不是read、write等比如我们常见的网卡设备、蓝牙设备 回顾上节Linux系统的构造 可见驱动位于内核态上面是系统调用下面是硬件设备。 2.1 上层用户操控设备的流程 每一个系统调用在驱动中都有与之对应的一个驱动函数 以open为例其系统调用为sys_open那么驱动文件中就会有一个与其对应的“实现open的驱动函数xxx_open()”其大致步骤就是用户层C库的open→系统调用层的open→驱动函数的open 以上是一个我作为初学者总结的大概流程下图是一个更详细的流程 2.2 Linux驱动的运行方式 将驱动编译进 Linux 内核中当 Linux 内核启动的时就会自动运行驱动程序将驱动编译成模块Linux 下模块扩展名为.ko并在Linux 内核启动以后使用相应命令加载驱动模块 3 驱动开发实战 尝试使用“将驱动编译成模块的方式”来编写“字符设备的驱动” 驱动开发不是一件容易的事情对于初学者可以先根据一个固定的框架来学习驱动的开发 3.1 基本的字符设备驱动框架 注释很重要认真看 #include linux/fs.h //file_operations声明 #include linux/module.h //module_init module_exit声明 #include linux/init.h //__init __exit 宏定义声明 #include linux/device.h //class devise声明 #include linux/uaccess.h //copy_from_user 的头文件 #include linux/types.h //设备号 dev_t 类型声明 #include asm/io.h //ioremap iounmap的头文件static struct class *pin4_class; static struct device *pin4_class_dev;static dev_t devno; //设备号 static int major 231; //主设备号 static int minor 0; //次设备号 static char *module_namepin4; //模块名//_open函数 static int pin4_open(struct inode *inode,struct file *file) {printk(pin4_open\n); //内核的打印函数和printf类似return 0; }//_write函数 static ssize_t pin4_write(struct file *file,const char __user *buf,size_t count, loff_t *ppos) {printk(pin4_write\n); //内核的打印函数和printf类似return 0; }static struct file_operations pin4_fops { //结构体的类型是“file_operations”名字可以自定义 //该结构体的成员就包含实现open和write的驱动函数 //当上层用户想要open或者write这个设备时就会最终跳转到这个驱动代码中实现的open和write操作函数 //此处只赋值了该结构体中的三个成员变量在keil中是不能这样写的linux中可以这个结构体其实有很多成员如果想要实现更多的驱动函数可以把更多的该结构体成员赋值并在这段代码中重写.owner THIS_MODULE,.open pin4_open,.write pin4_write, };int __init pin4_drv_init(void) //真实驱动入口 {int ret;devno MKDEV(major,minor); //创建设备号ret register_chrdev(major, module_name, pin4_fops); //注册驱动告诉内核把这个驱动加入到内核驱动的链表中//以下两句代码目的是“生成设备文件”也可以通过“mknod”命令手动生成但是一般不会这样做pin4_classclass_create(THIS_MODULE,myfirstdemo); //先创建‘类’pin4_class_dev device_create(pin4_class,NULL,devno,NULL,module_name); //再创建‘设备’return 0; }void __exit pin4_drv_exit(void) {device_destroy(pin4_class,devno); //先销毁‘设备’class_destroy(pin4_class); //在销毁‘类’unregister_chrdev(major, module_name); //卸载驱动 }module_init(pin4_drv_init); //入口内核加载驱动的时候这个宏会被调用 module_exit(pin4_drv_exit); MODULE_LICENSE(GPL v2); //linux内核遵循GPL协议 在代码中添加大量“static”的原因是内核的代码太多了为了防止出现重名导致歧义加入static可以保证变量的作用域只在当前代码中从而不会影响到其他的代码。 file_operation 结构体是 Linux 内核驱动操作函数集合 比如我在写某设备的驱动文件并想为其实现一个read的驱动函数那么我就需要 定义一个类型为file_operation的结构体XXX其中XXX是自定义的结构体名在XXX结构体中使用“.read XXX_read,”其中XXX_read是自定义的函数名在驱动代码里重写XXX_read函数函数的参数格式和file_operation类型结构体中给出的write成员的参数格式保持一致函数体就是想要实现的具体内容 3.2 驱动的编译 打开虚拟机进入Linux源码的路径 然后进入“drivers/char/”子目录driver驱动char字符型设备 在这个路径下创建一个新的C文件mydriver_pin4.c内容为刚刚的字符驱动框架 修改当前路径下的Makefile确保这个新的驱动会被编译到 回到linux内核源码的路径运行以下指令尝试编译 ARCHarm CROSS_COMPILE/home/mjm/ras_CrossCompile/gcc-linaro-5.1-2015.08-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- KERNELkernel7 make -j4 modules 回顾在前几节学习内核编译时的代码 ARCHarm CROSS_COMPILE/home/mjm/ras_CrossCompile/gcc-linaro-5.1-2015.08-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- KERNELkernel7 make -j4 zImage modules dtbs 区别就是代码的最后少了“zImage”和“dtbs”。原因也很简单现在只需要编译驱动不需要再次生成镜像文件等其他文件。 将编译好的“mydriver_pin4.ko”通过以下的scp命令发送到树莓派 scp drivers/char/mydriver_pin4.ko pi192.168.2.26:/home/pi/mjm_code 此时编译好的驱动文件就出现在树莓派上了 3.3 驱动的加载(卸载) 由于现在刚刚把驱动编译成了.ko的模块所以需要运行以下指令来加载驱动模块 sudo insmod mydriver_pin4.ko 补充 驱动的卸载 sudo rmmod mydriver_pin4.ko //此时驱动名字后不用加.ko 查看内核模块 lsmod 运行成功后就可以在/dev下看到生成的设备文件“pin4”了 如果用“ls -l” 就可以看到这个设备文件的主次设备号和框架代码中的设置相同 3.4 驱动的测试 在树莓派下写一个测试驱动的C代码 pin4_test.c: #include sys/types.h #include sys/stat.h #include fcntl.h #include stdio.hint main() {int driver_fd;driver_fd open(/dev/pin4,O_RDWR); //以可读可写打开的方式打开驱动if(driver_fd 0){perror(fail to open driver file:);}else{printf(open driver file success!\n);}driver_fd write(driver_fd,a,1); //向驱动文件写一个字节if(driver_fd 0){perror(fail to write to driver file:);}else{printf(write success!\n);}return 0; } 编译然后运行 1. gcc pin4_test.c -o pin4_test 2. sudo ./pin4_test如果加了sudo还是没法运行可以根据错误提示修改可能需要给驱动文件一个执行权限 sudo chmod 666 /dev/pin4 //666代表让所有用户都有所有权限 可见运行成功没有报错此时还可以另开一个窗口输入“dmesg”查看内核打印的信息 可见内核也按照框架代码中的printk成功打印了信息驱动测试成功 同时结果也再次印证了当用户在最上层对 驱动文件 调用C库的open函数后最后的结果还是调用最底层 驱动文件里实现的open驱动函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么在工商局网站做股东变更北京免费网站建设模板

垃圾邮件(Spam)的泛滥成灾一直是电子邮件系统中的一个严峻问题。随着垃圾邮件技术的不断演变,传统的过滤方法逐渐显得力不从心。因此,本项目旨在利用支持向量机(SVM)这一强大的机器学习工具,实现…

乐清开发网站公司自己建还是找代理建网站

光伏连接器 电子元器件百科 文章目录 光伏连接器前言一、光伏连接器是什么二、光伏连接器的类别三、光伏连接器的应用实例四、光伏连接器的作用原理总结前言 常用的光伏连接器类型包括MC4、MC3、Amphenol和Tyco等,它们根据连接方式、电气性能和标准规范等因素进行设计和选择…

企业网站建设哪家服务好网络营销包括

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷A模块基础设施设置/安全加固(200分)A-1:登录安全加固(Windows, Linux)A-2&#…

西安做网站必达网络上海网站建设工作

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞,评论,收藏。 一起努力,共赴大厂。 目录 一.前言 二.插入排序 …

有自己网站好处北京注册公司代理机构排名

目录 访问字符串中的值 Python字符串运算符 Python 字符串格式化 str.format() 数字格式化 多行注释 f-string Unicode 字符串 Python 的字符串内建函数 我们可以用单引号或者双引号"来创建字符串。 创建字符串很简单,给变量分配一个值即可例如 ahell…

给个网站手机能看的河南23个岗位无人报考

文章目录 什么是主键生成策略?MyBatis Plus 中的主键生成策略如何在 MyBatis Plus 中配置主键生成策略 什么是主键生成策略? 在数据库中,每一行数据都需要一个唯一的标识符,这就是主键。主键生成策略决定了如何为新插入的行生成这…

网站单个页面紧张搜索引擎蜘蛛企业品牌宣传片制作

该读书笔记大多内容参照了大神浅墨的该篇文章https://zhuanlan.zhihu.com/p/35974789 本章介绍了一种在GPU中模拟和渲染大的水体的系统。它把基本网格的集合波动于动态发现贴图的生成结合起来。 1.1 目标和范围 这章里,我们将由计算简单正弦函数之和开始&#xf…

网站建设多少钱一个平台可以看设计的网站有哪些

前言 很久没写博客了,今天难得闲下来写一次。 不知道大家在使用git的时候有没有遇到过这样的问题:发现git submodule特别好用,适合用于满足同时开发和部署的需求,并且结构清晰,方便我们对整个代码层次有一个大概的了…

北京亦庄做网站公司邯郸网站开发公司电话

一、应用架构演变历史: 单一应用架构 -> 垂直应用架构 -> 分布式服务架构 -> 微服务架构。 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删…

企业网站建设排名网址宁波网站设计皆选蓉胜网络

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 财务人员管理 留言管理 薪资管理 财务人员功能实现 报销信息管理 收费信息管理 支出信息管理 员工功能实现 报销信息管理 留言管理 薪资查询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前…

营销型网站的建设和运营可视化 网站开发工具

再继续扒 继续 前一篇 的话题, 在那里, 提到了抽象, 耦合及 MVC, 现在继续探讨这些, 不过在此之前先说下第一篇里提到的对称性. 注: 以下讨论建立在前面的基础之上, 为控制篇幅起见, 这里将不再重复前面说到的部分, 如果您还没看过前两篇章, 阅读起来可能会有些困难. 这是第一…

地方网站需要什么手续成都网多多

Laplacian(拉普拉斯)算子 前面介绍的Sobel算子和Scharr算子存在的问题: 1.要分别计算两个方向(x,y)的边缘,之后将两方向的边缘进行叠加。 2.边缘与方向相关性较大。当我们通过Sobel算子提取x方向检测时,它所能够检测到的边缘都是一个沿着y…

一起做网店网站小程序代理须知

第三方库是工程开发必不可少的部分,而第三方库可以是.a和.framework的静态库,也可以是.framework的动态库,其中静态库是最常用的方式。 静态库往往比较大,可在打包到可执行文件之后,对安装包大小的增加远远小于静态库本…

网站内网页标题对百度排名技术网站

神经网络语言模型 使用神经网络的方法,去完成语言模型的两个问题,下图为两层感知机的神经网络语言模型: 以下为预备概念 感知机 线性模型可以用下图来表示:输入经过线性层得到输出 线性层 / 全连接层 / 稠密层:假…

做编程的+网站如何制作家具网站

网络安全事件分析应急响应 目录 网络安全事件分析应急响应 解析如下:

网站导航页面制作营销网站一般包括哪些内容

关于ElevationStation ElevationStation是一款专为红队设计的权限提升测试工具,在该工具的帮助下,广大红队研究人员和渗透测试人员可以轻松实现SYSTEM权限令牌的获取,并通过将目标账号提升至SYSTEM权限来测试目标操作系统的安全态势。 Elev…

扬州做网站的公司ftp服务器

快答案: SCADA和DCS作为单独的系统开始,但一起成长。今天的带宽如此广泛,不需要在每个节点进行本地化。 SCADA和DCS:如果您参与管理企业级网络,您可能已经听说过这些术语。本文将阐明两种技术之间的区别。请注意&#…

企业网站建设找外包公司做网上超市网站的设计与实现

一、数据监控Prometheus 1、什么是Prometheus Prometheus是由SoundCloud开源监控告警解决方案,从2012年开始编写代码,到2015年github上开源以来,吸引不少用户以及公司的使用。Prometheus作为新一代的开源解决方案,很多理念与Google SRE的运维之道不谋而合。 2、Promet…

英文网站建设 论文哈尔滨工程项目建设网

1. 涉及平台 平台管理、商家端(pc端、手机端)、买家平台(h5/公众号、小程序、app端(ios/android)、微服务平台(业务服务) 2. 核心架构 spring cloud、spring boot、mybatis、redis 3. 前端框架…

广告网站建设价格django网站开发流程

今天主要给大家介绍一下testcafe这个框架元素定位的方法。 一、CSS 选择器定位 使用 testcafe 对元素进行操作的时候,我们可以直接通过 CSS 选择器指定要操作的元素,比如,点击元素,input 输入文本内容,如下&#xff1…