设备驱动程序在内核中是封装在一起的独立存在的“黑盒子”,它通过特定硬件响应一个内部编程接口,对用户程序来说完全隐藏了设备工作的细节。用户的操作通过一组标准化的调用执行,而驱动程序的任务就是把这些调用映射到实际的硬件设备上的特有操作。
编写设备驱动程序时,不需要给用户强加任何特定策略,驱动只负责实现最基本的硬件功能,和任意应用程序、怎么去使用它没有任何关系。
联盟共举办两届“基于HIM的广义BIM矩阵(GIM)论坛”、两届“中国BIM经理高峰论坛”,第一届全国建筑业“互联网+”技术展示会,2016建筑施工BIM应用项目观摩会,参展“第十三届国际绿色建筑与建筑节能大会暨新技术与产品博览会”,协办“buildingSMART 2017年香港国际BIM大赛暨高峰论坛”,协办第四届BIM国际技术交流会等,通过论坛展览展示活动不断扩大联盟影响力。
Ubuntu(乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架构。本文以2016年发布代号为Xenial Xerus的16.04LTS为开发环境平台。
在实际的硬件系统组成中,设备可以分为网卡、显卡、U盘等,按其接口类型可以分usb设备、PCI设备、SPI设备、串口设备等。而在Ubuntu内核中把所有设备都看成文件,可以分为字符型设备、块设备、网络设备。
(7)编译内核,依次使用命令。
前文提及民宿运营模式发生了变化,亦可解释如下:第一阶段,民宿主将自家房间租给游客使用,是先有物质基础与场所氛围,继而产生相应的精神共鸣,人们向往这种共鸣的现象推动了第二阶段的民宿发展;第二阶段的民宿是目的性的发展其精神共鸣,再通过改造或新建来获得形式。根据现在民宿在旅游界大热的情况可以判定游客乐于接受被民宿主(或设计师)设定好的精神共鸣。
2)分段模式:段模式始终遵循交叉模式.在这种模式下,提出一个GOF策略来选择下一跳.RAR的动机是增加尽可能多地发送发射机的内部邻居的传输机会.发射机通过hello方案了解所有邻居的位置.让最远的层内邻居是节点Vintra,而最远的层间邻居是节点Vinter.设当前节点和两种邻居之间的距离分别为X1和Y1.当且仅当有Y1>X1+σ时,最远的层间邻居Vinter被选作下一跳,其中否则,该分组被发送到节点.另外,如果发射机没有有效的邻居,使用进位转发算法作为恢复方案.此时,发送器将携带数据包,直到它遇到可用节点或数据包的生命周期耗尽.
(3)设备操作的实现。通过file_operations函数集的实现主要函数有:
(3)网络设备。网络设备面向报文,它没有像字符设备和块设备一样的设备号,只有一个唯一的如eth0、eth1这样的名字,并且没有和设备文件节点对应。
在设备驱动程序开发中,必须先构建内核源码树。内核源码树最好由厂家提供的源码树,和目标开发版内核版本一致。本文以Ubuntu16.04系统为依据来构建内核源码树,详细过程如下:
(1)uname-r查看内核版本
(2)apt-cache search linux-source查询系统内核
一个人的40年,通常是整个生命历史中极重要的时间段。我们用我们自己几十年丰富多彩的大大小小的具体奉献表明:我们配得上这样最有意义的人生。前瞻改革开放的未来,依然任重道远。我们伟大的党、国家和民族,不仅依然肩负着自身前进的重任,而且肩负着为人类作出更大贡献的重任。
通过完成以上过程,重新启动Ubuntu系统在GUN GRUB界面进入高级选项,选择编译的内核进入系统,完成源码树的构建。
(4)解压下载的压缩包,cd/usr/src后tar-xjvf linuxsource-4.4.0.tar.bz2-C/usr/src(尽量把源码解压在/usr/src目录下)。
(5)依次安装内核编译过程中所需的软件包,内核编译需要安装相关的依赖包。如图1所示。
图1 内核编译所需相关依赖软件包
(6)配置/usr/src/linux-headers-4.13.0-36-generic/.config拷到/usr/src/linux-4.15.9目录下,根据菜单提示,选择编译配置选项,并保存配置文件为.config文件。
教育学和经济学有关人力资本生产和使用两分法归一不仅是必要的而且是可行的,这是由于重要的经济问题不仅包括教育投入究竟应该多少,而且包括:(1)哪些技能应集中考虑劳动力市场的复杂性;(2)人们获取这些技能的最好方式是什么?(3)如何安排、设计针对学生、家长和教师的正确激励机制,以实现学习成绩最优化。基于上述问题,笔者认为应取消经济学和教育学两分法,用经济学分析学习过程,明确人们工作中使用技能的方式。
(1)字符型设备。字符型设备是最基本、最常用的设备,它能够像字节流一样被访问,设备驱动程序与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样通过open,close,read,write等系统调用对设备进行操作。
(2)块设备。块设备通过设备节点访问,Ubuntu系统的磁盘都是块设备并在其上容纳文件系统,通过文件系统以及高速缓存访问块设备。在内核中,块设备驱动程序有完全不同的接口,具有请求缓冲区,能随机访问存取数据。
sudo make mrproper清除编译过程中产生的所有中间文件
sudo make clean清除上一次产生的中间文件
sudo make menuconfig选择图形界面编译,可以自己选择内核裁剪。过程如图2所示。
图2 内核剪裁自定义启动菜单
(8)查询cpu支持几个线程(lscpu),然后编译sudo make-j2(线程数目2,该过程持续2个小时左右,请耐心等待)。该命令将会生成内核模块和vmlinuz,initrd.img,Symtem.map文件。接着运行命令sudo make modules编译模块。
(9)安装内核。运行命令sudo make modules_install安装内核模块,运行命令Sudo make install安装内核。
(3)从网上下载安装内核源apt-get install linux-source-4.4.0下载后的软件包一般存放在/usr/src目录中。
在Ubuntu系统下,字符型设备驱动开发的初始化流程:定义相关的设备文件结构体(如file_operations()中的相关成员函数的定义)->向内核申请主设备号(建议采用动态方式)register_chrdev_region->申请成功后,调用MAJOR()获取主设备号->注册字符设备驱动(初始化cdev的结构体,调用cdev_init()->调用cdev_add(),注册cdev到kernel)->注册设备模块。如图3所示。
图3 设备驱动系统调用流程
(1)字符型设备驱动程序重要的数据结构。主要实现struct file_operations结构中的各个函数,该结构体所包含的函数操作:
(2)分配设备号。首先通过静态申请设备ret=register_chrdev(0,devName,&pStruct),使用完后注销设备号unregister_chrdev(device_num,devName)。
□发现《倚天屠龙记》中误将河北地名“榛子镇”写成了“棒子镇”后,“金迷”李柯勇给金庸去信指出。近日,李柯勇收到金庸秘书的回信,信中在表示感谢之余承诺今后在修订时将加以改正。金庸虚怀若谷的胸襟和严谨治学的大师风范由此可见一斑。(《燕赵晚报》2018年9月14日)
从市场机会来看,政策扶持节水节肥、省工省力、肥料利用率高的产品,市场需要既能实现作物高产,又能提升作物品质的产品,企业应当把握其中的市场机遇。市场趋势是水肥一体化规模将逐步扩大,水溶肥成为未来主流产品之一!钾盐产业应当调整产品新兴定位——钾肥是水溶肥的主要原料,应当关注液体氯化钾、速溶硫酸钾、环保碳酸钾以及水溶性更好的硝酸钾、磷酸二氢钾等品种的市场需求。
(1)程序的编译。在源程序的同一目录下构造Makefile文件,文件内容如下:
解决电压输入侧超压的另一思路是装设逆变电路将产生的再生能量反馈进入电网。以SINAMICS S120系列变频器为例,设计的SLM电源模块就具备将多余能量反馈至电网的能力。维持母线电压在一个正常的范围内波动,但是这种方法要求电源的稳定性较高,如果出现电源电压突增,仍会有变频器损坏的风险。
然后通过sudo make编译后,将在当前目录下出现dirvers.ko的字符型设备驱动程序。
(2)加载驱动程序模块到内核
模块是具有独立功能的程序,可以单独编译,只有超级用户让它在内核空间中运行,而不能独立运行,用来实现驱动程序。模块程序必须通过module_init()、module_exit()函数来告诉内核“初始化”和“退出”。
用insmod drivers.ko命令装入设备驱动模块,通过dmesg命令可以查看内核加载的模块。
(3)通过编写测试程序验证驱动程序的使用。
查询字符型设备号为243,使用命令sudo mknod/dev/TaogeDevice c 24302430把设备加入系统,并编写test.c程序验证程序,如图4所示验证成功。
图4 验证成功
本文叙述了一个基于Ubuntu系统的字符型驱动程序的开发与实现,最终实现在Ubuntu系统里对设备的使用。但是驱动程序开发是一项繁琐复杂的工作,论文只是搭建了一个初级的驱动开发环境,完成驱动开发的整个过程体验,要进行真正设备驱动移植开发还需要很多探讨学习的地方。
克莱默博士的浮木研究主要集中在奴河上,这条河流向北流入加拿大北部的大奴湖,然后流入麦肯齐河,最终汇入北冰洋。麦肯齐河相对未受大规模工业发展的影响,是研究漂流木的长期影响以及与海洋和河流生态系统关系的很好天然实验室。
[1]王粉花.基于Linux字符设备驱动程序的设计与实现[J].计算机工程,2006(23):278-280.
[2]丁迪.基于嵌入式Linux字符设备驱动的开发以及应用[J].科技经济导刊,2018(2):27-28.
[3]万玛宁,侯志化.基于Linux操作系统的U SB设备驱动程序开发及传输实现[J].微电子学与计算机,2018(11):124124-127127.
[4]添加字符设备驱动程序[EB/O L].[2018-2-28].https://blog.csdn.net/ARAFA Tms/article/details/79397800.
[5]杜俊.嵌入式Linux字符设备驱动程序设计研究[J].甘肃科技,2015(18):28-31.
[6]Dan Kusnetzky.Network World(Online)Ubuntu 16.10 targets hybrid cloud deployments,supports Unity 8 development.2016-10-18.
Development and Implementation of Character Device Driver Based on Ubuntu
文章来源:《电脑与电信》 网址: http://www.dnydxzz.cn/qikandaodu/2020/0522/340.html
上一篇:基于改进蚁群算法的震后应急救灾车辆最优路径
下一篇:三电平有源电力滤波器仿真研究