专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

13。字符设备驱动开发及相关概念openwrt入门经典教程

  13。字符设备驱动开发及相关概念
  本实验目标
  对Linux内核、驱动有初步的认识
  如果对此部分不太熟悉的朋友可以下载国嵌的linux视频看看,非有很大帮助。
  1应用程序、库、内核、驱动程序的关系
  从上到下,一个软件系统可以分为:应用程序、库、操作系统(内核)、驱动程序。开发人员可以专注于自己熟悉的部分,对于相邻层,只要了解它的接口,无需关注它实现的细节。
  以点亮一个LED为例,这4层软件的协作关系如下,如图1所示。
  图1
  1)。应用程序使用库提供的open函数打开代表LED的设备文件。
  2)。库根据open函数传入的参数执行SWI指令,该指令会引起CPU异常,进入内核。3)。内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序。
  4)。应用程序得到文件句柄后,使用库提供的write或ioclt函数发出控制命令。
  5)。库根据write和ioclt函数传人的参数执行swi指令,这条指令会引起CPU异常,进入内核。
  6)。内核的异常处理函数根据这些参数调用驱动程序的相关函数,点亮LED。
  库(比如glibc)给应用程序提供的open、read、write、ioctl、mmap等接口函数被称为系统调用,它们都是设置好相关寄存器后,执行某条指令引发异常进入内核。除系统调用接口外,库还提供其他函数,比如字符串处理函数(strcpy、strcmp等)、输入输出函数(scanf、printf等)、数学库,还有应用程序的启动代码等。
  在异常处理函数中,内核会根据传入的参数执行各种操作,比如根据设备文件名找到对应的驱动程序,调用驱动程序的相关函数等。一般来说,当应用程序调用open、read、
  write、ioctl、mmap等函数后,将会使用驱动程序中的open、read、write、ioctl、mmap函数来执行相关操作,比如初始化、读、写等。实际上,内核和驱动程序之间并没有界线,因为驱动程序最终是要编进内核去的:通过静态链接和动态加载。
  从上面操作LED的过程可以知道,与应用程序不同,驱动程序从不主动运行,它是被动的:根据应用程序的要求进行初始化,根据应用程序的要求进行读写。驱动程序加载进内核时,只是告诉内核我在这里,我能做这些工作,至于这些工作何时开始,取决于应用程序。当然,这不是绝对的,比如用户完全可以写一个系统时钟触发的驱动程序,让它自动点亮LED。
  在Linux系统中,应用程序运行于用户空间,拥有MMU的系统能够限制应用程序的权限(比如将它限制于某个内存块中),这可以避免应用程序的错误使整个系统崩溃。而驱动程序运行于内核空间,它是系统信任的一部分,驱动程序的错误有可能导致整个系统崩溃。
  2Linux驱动程序分类
  Linux的外设可以分为3类:字符设备、块设备和网络接口。
  字符设备是能够像字节流(比如文件)一样被访问的设备,就是说对它的读写是以字节为单位的。比如串口在进行收发数据时就是一个字节一个字节的进行的,我们可以在驱动程序内部使用缓冲区来存放数据以提高效率,但是串口本身对这并没有要求。字符设备的驱动程序中实现了open、close、read、write等系统调用,应用程序可以通过设备文件(比如devttySAC0等)来访问字符设备。
  块设备上的数据以块的形式存放,比如NANDFlash上的数据就是以页为单位存放的。块设备驱动程序向用户层提供的接口与字符设备一样,应用程序也可以通过相应的设备文件(比如devmtdblock0、devhda1等)来调用open、close、read、write等系统调用,与块设备传送任意字节的数据。对用户而言,字符设备和块设备的访问方式没有差别。块设备驱动程序的特别之处如下。
  1)。操作硬件的接口实现方式不一样。
  块设备驱动程序先将用户发来的数据组织成块,再写入设备;或从设备中读出若干块数据,再从中挑出用户需要的。
  2)。数据块上的数据可以有一定的格式。
  通常在块设备中按照一定的格式存放数据,不同的文件系统类型就是用来定义这些格式的。内核中,文件系统的层次位于块设备驱动程序上面,这意味着块设备驱动程序除了向用户层提供与字符设备一样的接口外,还要向内核其他部件提供一些接口,这些接口用户是看不到的。这些接口使得可以在块设备上存放文件系统,挂载块设备。
  网络接口同时具有字符设备、块设备的部分特点,无法将它归入这两类中:如果说它是字符设备,他的输入输出却是有结构的、成块的(报文、包、帧);如果说它是块设备,它的块又不是固定大小的,大到数百甚至数千字节,小到几字节。
  UNIX式的操作系统访问网络接口的方法是给它们分配一个惟一的名字(比如eth0),
  但这个名字在文件系统中(比如dev目录下)不存在对应的节点项。应用程序、内核和网络驱动程序间的通信完全不同于字符设备、块设备,库、内核提供了一套和数据包传输相关的函数,而不是open、read、write等。
  3Linux驱动程序开发步骤
  Linux内核就是由各种驱动组成的,内核源码中有大约85是各种驱动程序的代码。内核中驱动程序种类齐全,可以在同类驱动的基础上进行修改以符合具体单板。
  编写驱动程序的难点并不是硬件的具体操作,而是弄清楚现有驱动程序的框架,在这个框架中加入这个硬件。比如,x86架构的内核对IDE硬盘的支持非常完善:首先通过BIOS得到硬盘的信息,或者使用默认IO地址去枚举硬盘,然后识别分区、挂载文件系统。对于其他架构的内核,只是要指定了硬盘的访问地址和中断号,后面的枚举、识别和挂接的过程完全是一样的。也许修改的代码不超过10行,花费精力的地方在于:了解硬盘驱动的框架,找到修改的位置。
  编写驱动程序还有很多需要注意的地方,比如:驱动程序可能同时被多个进程使用,这需要考虑并发的问题;尽可能发挥硬件的作用以提高性能。比如在硬盘驱动程序中既可以使用DMA也可以不用,使用DMA时程序比较复杂,但是可以提高效率;处理硬件的各种异常情况(即使效率低),否则出错时可能导致整个系统崩溃。
  一般来说,编写一个Linux设备驱动程序的大致流程如下。
  1)。查看原理图、数据手册,了解设备的操作方法。
  2)。在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始。
  3)。实现驱动程序的初始化:比如向内核注册这个驱动程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序。
  4)。设计所要实现的操作,比如open、close、read、write等函数。
  5)。实现中断服务(中断并不是每个设备驱动所必须的)。
  6)。编译该驱动程序到内核中,或者用insmod命令加载。
  7)。测试驱动程序。
  4驱动程序的加载和卸载
  可以将驱动程序静态编译进内核中,也可以将它作为模块在使用时再加载。在配置内核时,如果某个配置选项被设为m,就表示它将会被编译成一个模块。在2。6的内核中,模块的扩展名为。ko,可以使用insmod命令加载,使用rmmod命令卸载,使用lsmod命令查看内核中已经加载了哪些模块。
  当使用insmod加载模块时,模块的初始化函数被调用,它用来向内核注册驱动程序;当使用rmmod卸载模块时,模块的清除函数被调用。在驱动代码中,这两个函数要么取固定的名字:initmodule和cleanupmodule,要么使用以下两行来标记它们(假设初始化函数、清除函数为myinit和mycleanup)。
  moudleinit(myinit);moduleexit(mycleanup);

新研究成果表明人在清醒时,大脑也会放空据新华社电一项国外的新研究显示,清醒时走神是自然现象,类似于大脑下线。该研究表明,一个人在清醒时走神是一种自然现象。欧洲研究人员开展的大脑成像研究挑战了人类大脑会不间断思考的观念,首发价549元起,小米米家智能吸顶灯Pro今日开售IT之家10月13日消息,今日上午1000,小米新款米家智能吸顶灯Pro将正式开售,包括卧室版和客厅版两个版本,首发价549元起。IT之家了解到,米家智能吸顶灯Pro卧室版采用圆形扫地机器人开始有了上门服务,云鲸J3扫拖机器人体验评测自动回洗扫地机开创者常言道懒人善假于物,懒并不是表面上的好逸恶劳,而是随着人们生活和工作节奏越来越快,社会分工越来越细,大家更愿意花一定的费用,购买便利的服务和产品,换来时间上的高四目神再会跨越血缘的亲子之爱欢迎关注,获取更多游戏评测资讯,入手与否不再犹豫喜欢的不妨点个赞唷()前言日本SEEC公司于2016年在手机平台推出了解谜向ADV四目神,在时隔近5年后的2021年推出了重置版四目克瑞因的纷争被金发大姐姐忽悠跑图打牌拯救世界手账测评克瑞因的纷争是由双星骑制作团队制作,由双星骑AnotherIndieNeonDoctrine发行的美少女卡牌肉鸽RPG游戏。讲述了三个身世经历年龄各有不同的少女在一位自称记叙者的金神舟14号成功发射!突破重重封锁,它这次的任务是什么?综述对于中国来说2022年是至关重要的一年,除了要完成正常的航空航天任务之外,我国还将展开新一轮的空间站试验,并且进行相关有突破性进展的技术人物。根据今年的总规划来看,我们需要进行为什么我劝你别买iPad9,而是等等iPad10?两大核心升级确认在第三方电商平台可以看到,iPad9的价格持续下跌,从2499元降到了2178元左右。不过别着急心动,如果你在近期打算买一台iPad9,我劝你最好再等等。也不用等太久,如果没意外的快稳雅!两层小复式,优倍快UniFi无线WiFi6全覆盖购买理由首先自己是个小白用户,对网络也是一知半解,装修新房子的时候考虑了好久如何全家漫游无线覆盖。在选择优倍快UniFi产品前,也是对比过了TPLINK和华为华3很多品牌,性能和稳不要买错,微软发布了新版XboxSeriesX概念迷你冰箱来源GameRent编译卡卡布微软游戏营销资深人士亚伦格林伯格宣布,新版XboxSeriesX迷你冰箱现已在零售商处上架。Xbox游戏营销副总裁AaronGreenberg透露,一iphone14首次降价近日,iphone14大幅降价的消息登上微博热搜话题,引发广大网友的关注,iphone14发行也才将近一个月的时间,就出现了降价情况,也是创造iphone最快降价记录。iphone新版首发,Adobe202210月全家桶全新升级版来了!新增更多黑科技Adobe2022软件越新它的功能就越强大问题越少本期带来Adobe2022全家桶10月新版全套版本升级PS202223。5ACR14。5Bridge202212。0ACR14。5
世界很大,风景很美,总有一些惊喜在路上作者墨影尘心摄影pexels编辑子墨美文人生最难得的是坚持,当你看不到希望,却依然能够相信自己,能够坚持下去,这本身就是一种执着!世界从未失去色彩,只是我们暂时失去了信仰。世界很大去年通航飞行量创历史新高,政协委员却指出这些痛点相比于亏损创新高的民航运输业,2022年的全球通航业可以说是已走出疫情阴霾,飞机交付总量超过疫情前。中国的通航飞行量也在2022年创历史新高,通航飞机注册数量较上年增长5。3,通航请看岐山的岐伯纪念馆请看岐山的岐伯纪念馆郑鼎文岐山县太平塔文化旅游街区的岐伯纪念馆建成半年多了,由于疫情等原因,一直没有开放。听说从3月10号起要正式开放,昨天开什么会,客人要求参观,便临时开放了。我中老边境磨憨口岸客运量继续攀升,单日最高突破5000人次自2023年1月8日磨憨口岸恢复通关以来,出入境客流不断攀升。复通以来,磨憨口岸共查验出入境人员超20万余人次,单日最高查验出入境旅客人数突破5000人次。根据乙类乙管总体方案政策百度Allin文心一言搜索将被重新定义?作者Pan编辑Duke来源钛财经2020年年底,由美国人工智能研究实验室OpenAI推出的自然语言处理工具ChatGPT,走入了人们的视野。它会聊天,会写论文,也能编代码多样且强大政协委员潘建伟我国正研制中高轨量子卫星通用量子计算还要等10年全国政协委员中国科学院院士中国科学技术大学常务副校长潘建伟在3月4日晚间举行的媒体采访时透露,中国正在研制中高轨量子卫星。潘建伟说道我们正在与国家空间科学中心合作,研制一颗中高轨卫江南春春意在江南的乡间悄然透头,如果阳光温煦,春色的蔓延便有不可阻挡之势。风是暖的,阳光是暖的,枯枝上萌动着淡绿色的芽和花苞,一切都像在突围,都像在给春天吐露心事。春天的深情叙事是从各种浙江永康微改造精提升打造红绿模式的特色乡村浙江省金华市永康市的古山镇前黄村位于古山镇北部,华溪之滨,紧邻东永一线。前黄村历史悠久,贤人辈出,是状元陈亮的祖居地,是革命先烈李立卓李立倚的家乡,也是永康市著名革命老区,解放前被江南烟雨三月,郑州自驾皖南婺源7天6晚赏花线路,值得收藏!江南烟雨三月天,春天来了,中国最美乡村古镇油菜花观赏线路,横跨四省,河南出发,途经湖北江西安徽游走在花海的旅途中。婺源油菜花接下来带给大家一条自驾线路Day1郑州信阳武汉(樱花)武33A股复盘指数再创新高,军工受益国改异动早盘有利好的芯片半导体开盘便直线拉升,而且以工程建设为首的中字头船舶航母航天航空等概念一路拉升,上证指数小幅高开后逐步走高。随后最近强势的大科技集体出现跳水,给市场情绪造成不小影响济宁能源到金乡推介港航资源3月2日,济宁能源2023年化工农副产品业务座谈会在金乡县成功举办。济宁能源向当地客商推介优质港航物流资源,谋求产业链供应链协同发展融合,在物流运输方面提供更大赋能。座谈会上,济宁
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网