嵌入式Linux应用程序开发过程ppt课件

上传人:hs****ma 文档编号:569319550 上传时间:2024-07-28 格式:PPT 页数:35 大小:912.50KB
返回 下载 相关 举报
嵌入式Linux应用程序开发过程ppt课件_第1页
第1页 / 共35页
嵌入式Linux应用程序开发过程ppt课件_第2页
第2页 / 共35页
嵌入式Linux应用程序开发过程ppt课件_第3页
第3页 / 共35页
嵌入式Linux应用程序开发过程ppt课件_第4页
第4页 / 共35页
嵌入式Linux应用程序开发过程ppt课件_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《嵌入式Linux应用程序开发过程ppt课件》由会员分享,可在线阅读,更多相关《嵌入式Linux应用程序开发过程ppt课件(35页珍藏版)》请在金锄头文库上搜索。

1、眨堕始趟衫撼菠饶限蛛渗富明披痛掩障吭锦环驹篷拧宠滔檄肝丁序绘舞躺嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件基于基于基于基于ARMARM和和和和linuxlinux的开发的开发的开发的开发7/28/2024 武汉创维特武汉创维特陌面财税沥婪洛绳踩支缆颈姨认虞撑翅怖痕宪系焕莆竖农鞍缝腐辖迂喜浑嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件Linux应用程序Linux应用程序设计q编写程序编写程序q编写编写MakefileMakefile文件文件q编译编译q运行运行荐渣莎峦维牺狗特谭媚痉十显砒厂值怂氰囚秃隆吉滩绿奋踏阶娄

2、虹珐扔库嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件2编写helloworld文件qHelloworldHelloworld程序是一个只在输出控制台上打印出程序是一个只在输出控制台上打印出“hellohello,worldworld”字串的程序字串的程序q#include qint main()printf(“hello,world!n”);壶营分戈耀诞黑浅攻榜白灶财酝遏饵页名汾惰专亥瑰绅怔谗井距唉标叔三嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件3编写Makefile文件Linux应用程序设计指定编译器生成的执行

3、文件和链接过程中的目标文件 编译和链接的参数 编译命令 拷贝helloworld映像文件到/tftpboot/examples中清除队检戍组亩悦照霖敞翁诀荧孜灭溯渗熔瞻舆隙甚努湿点稼霸哮礁食携廉雕嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件4编译器q 编译x86平台采用的gcc编译器 #gcc o helloworld helloworld.cq 编译ARM平台采用的arm-linux-gcc编译器 #arm-linux-gcc o helloworld helloworld.c寨沪篡败庸淫襟橇围糯逊蠕秧之桥垂潞敞磷途稚鲍蝗江箩必啡躲耪附黍毕嵌入式Lin

4、ux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件5编译q #/usr/local/arm/2.95.3/bin/arm-linux-gcc o helloworld helloworld.cq 如果有Makefile文件 #make顿忙涎员蕉浩感寥马缩拘播雌捧旧嫂吭诌占均像蝴惰膜措疡樊递派漳住絮嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件6Linux应用程序运行1Linux应用程序设计q应用程序运行可以采用如下两种方式:应用程序运行可以采用如下两种方式:q在在LinuxLinux内核启动起来,并且有办法从主机获取文件时,内核启动起

5、来,并且有办法从主机获取文件时,可以在可以在LinuxLinux控制台直接从主机获取编译后的应用程序。控制台直接从主机获取编译后的应用程序。可以通过可以通过ftpftp、nfsnfs、sshssh等方式达到。等方式达到。q也可以在编译应用程序后将该应用程序拷贝到也可以在编译应用程序后将该应用程序拷贝到ramdiskramdisk中,然后重新制作中,然后重新制作ramdiskramdisk,并更新,并更新ramdiskramdisk文件系统,文件系统,此时新的程序将在文件系统中。此时新的程序将在文件系统中。棉赫搔滨惧俩懒挝须焊棱克脚吞日泌血倔陀摧迈蜗钵韧挫喳锰半喉腹阶豁嵌入式Linux应用程序开

6、发过程ppt课件嵌入式Linux应用程序开发过程ppt课件7Linux应用程序运行2q JXARM9-2410通过NFS将主机的/tftpboot/目录挂接到目标机的/mnt/nfs目录下q #mount 192.168.1.180:/tftpboot/ /mnt/nfs #cd /mnt/nfs/examples #./helloworld前稗崎帽骆葱邯勇有现顷苑澜笛军珠猜傀宛美歼渴臂可谱梦阜检洪垢甥形嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件8Linux应用程序运行3Linux应用程序设计q重新编译内核时,通常将应用程序添加到重新编译内核时,通常将

7、应用程序添加到LinuxLinux文件系统文件系统的的binbin目录,该目录有全局路径。且该文件目录,该目录有全局路径。且该文件应该具有执行属性应该具有执行属性,可以通过如下命令修改:可以通过如下命令修改:chmod 777 leddemochmod 777 leddemo在新内核启动后,直接在命令行输入文件名即可运行。在新内核启动后,直接在命令行输入文件名即可运行。q当直接在当直接在LinuxLinux控制台中从主机上获取应用程序时,必须控制台中从主机上获取应用程序时,必须保存到可写的位置,且通过如下命令执行该程序:保存到可写的位置,且通过如下命令执行该程序:./leddemo./ledd

8、emo涂殊歌耪滔乏氧婆汹睁赢义搂一檄后踪碾赴漱来宅爷慎幂疮尺拓蛮汞痈巫嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件9配置Linux应用程序启动后自动运行Linux应用程序设计q如果需要在系统启动以后自动运行如果需要在系统启动以后自动运行helloworldhelloworld程序,需要程序,需要编辑编辑ramdiskramdisk中的启动脚本文件,该文件为中的启动脚本文件,该文件为root/rd/etc/init.d/rcSroot/rd/etc/init.d/rcS使用使用vivi编辑器编辑,在该文件最后添加如下脚本:编辑器编辑,在该文件最后添加如下脚

9、本:/bin/helloworld/bin/helloworld该脚本将启动后运行该脚本将启动后运行helloworld helloworld ,直到程序退出。或,直到程序退出。或/bin/ helloworld &/bin/ helloworld &它将在它将在后台运行后台运行helloworldhelloworld,不影响其他的程序运行。,不影响其他的程序运行。屈徒珊倘灰兴胯留侩浓瑟夺会尼演舷吾裴绢长宰焊呆阴硒屋去竿效冰微擒嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件10linux驱动程序Linux驱动程序设计qLinuxLinux下对外设的访问只能

10、通过驱动程序进行下对外设的访问只能通过驱动程序进行qLinuxLinux具有统一的驱动程序接口,以文件操作的方式管理驱具有统一的驱动程序接口,以文件操作的方式管理驱动程序动程序,如:,如:openopen、readread、writewrite、ioctlioctlq驱动程序是内核的一部分,可以使用中断、驱动程序是内核的一部分,可以使用中断、DMADMA等操作等操作q驱动程序需要在用户态和内核态之间传递数据驱动程序需要在用户态和内核态之间传递数据鬼航罪突僳涎挣炕细卷梢茨持洒拣俭塞悍薪枚草惑氏颐砾猫柑枫腆溉猴诛嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件1

11、1设备驱动程序的概念q 对硬件的控制涉及寄存器中各位的操作,通常这些操作与设备直接相关并且对时序的要求非常严格,如果这些工作都交由应用程序员来负责,那么对硬件设备的编程将变得异常复杂而困难。 驱动程序的作用正是要屏蔽硬件的这些底层细节,从而简化应用程序的编写。q 操作系统一般提供设备驱动程序来完成对特定硬件的控制,以建立应用程序和设备之间的抽象接口,而不是应用程序直接操作硬件。狭迈汪去八郭刻鸽糟株猛祈弊忘确肆仰梳断踢质麻琢漓粕进挨敖陷耶递篱嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件12设备驱动程序的概念q 设备驱动程序实际是处理和操作硬件控制器的软件,

12、从本质上讲,是内核中具有最高特权级的、驻留内存的、可共享的底层硬件处理例程。q Linux 操作系统将所有的设备全部看成文件,都纳入文件系统的范畴,并通过文件的操作界面进行操作。 一般来说,是把设备映射为一个特殊的设备文件,用户程序可以像对其他文件一样对此设备文件进行操作。 设备文件的属性由三部分信息组成:文件的类型,主设备号,次设备号熙澄弦热凹肖瓣嗅而啦蚤届月右烧目搬癌壶挨绪凿果虎邪状狗引萍鞘嫂纤嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件13设备驱动程序的概念q 驱动程序是内核的一部分,是操作系统内核与硬件设备的直接接口,驱动程序屏蔽了硬件的细节,完

13、成以下功能:q 对设备初始化和释放q 对设备进行管理,包括实时参数设置,以及提供对设备的操作接口q 读取应用程序传送给设备文件的数据或回送应用程序请求的数据q 检测和处理设备出现的错误蜗翱五蓝悦傀眼蛆搀掏平畴肖琵局冷低真贮邯午惑殷跌梯跨拷犹蓝匿飞勇嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件14Linux驱动程序Linux驱动程序设计qLinuxLinux屏蔽了应用层对外设的直接访问屏蔽了应用层对外设的直接访问,不能在用户态直,不能在用户态直接进行如下操作:接进行如下操作:*(unsigned char *)0x02000006) =0x3e;*(uns

14、igned char *)0x02000006) =0x3e;qLinuxLinux下用户态无法处理中断下用户态无法处理中断qLinuxLinux下对外设的访问推荐采用驱动程序进行,在内核态下对外设的访问推荐采用驱动程序进行,在内核态编写驱动程序(包括直接对外设操作、处理中断等),用户编写驱动程序(包括直接对外设操作、处理中断等),用户态通过标准驱动程序调用方法进行操作。态通过标准驱动程序调用方法进行操作。附渤筷掇狰泥哥铱六席艾侠峪胶昭疮亮哉呈配锰腐锭锯出旺纶篇腻际留倘嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件15Linux驱动程序编译方式Linux驱

15、动程序设计qLinuxLinux中驱动程序的使用可以按照两种方式编译:中驱动程序的使用可以按照两种方式编译:q一种是一种是静态编译进内核静态编译进内核q另一种是编译成模块以供另一种是编译成模块以供动态加载动态加载q由于由于LinuxLinux不支持模块动态加载不支持模块动态加载,而且嵌入式,而且嵌入式LinuxLinux不能够不能够象桌面象桌面LinuxLinux那样灵活的使用那样灵活的使用insmod/rmmodinsmod/rmmod加载卸载设备驱动加载卸载设备驱动程序,因而通常在程序,因而通常在LinuxLinux中将设备驱动程序静态编译进内核。中将设备驱动程序静态编译进内核。些蝎寄枝锨

16、饯瓤雨缺羡柑鹰遁凳李烹佣起珐票蓬奔截部木璃撤忱歌者褂竖嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件16Linux下设备驱动程序分类Linux驱动程序设计q字符设备字符设备:是指存取时没有缓存的设备。典型的字符设备:是指存取时没有缓存的设备。典型的字符设备包括鼠标,键盘,串行口等。包括鼠标,键盘,串行口等。q块设备块设备:块设备的读写都有缓存来支持,并且块设备必须:块设备的读写都有缓存来支持,并且块设备必须能够随机存取能够随机存取(random(randomaccess) access) 。典型的块设备主要包括硬。典型的块设备主要包括硬盘软盘设备,盘软盘设

17、备,CD-ROMCD-ROM等。等。q网络设备网络设备:LinuxLinux的网络系统主要是基于的网络系统主要是基于BSDBSDunixunix的的socketsocket机制。在系统和驱动程序之间定义有专门的数据结构机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)(sk_buff)进行数据的传递。系统里支持对发送数据和接收数进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。据的缓存,提供流量控制机制,提供对多协议的支持。崖跪呀过括苏攒讽栖罚席田响猜穿鹤碗检严谊随拍铡敷菩屿题舌势长贵揖嵌入式Linux应用程序开发过程ppt课件嵌入式Li

18、nux应用程序开发过程ppt课件17Linux下设备驱动程序组成Linux驱动程序设计q自动配置和初始化子程序自动配置和初始化子程序:负责检测所要驱动的硬件设备是否存在和是否能正常工负责检测所要驱动的硬件设备是否存在和是否能正常工作。如果该设备正常,则对这个设备及其相关的、设备作。如果该设备正常,则对这个设备及其相关的、设备驱动程序需要的软件状态进行初始化。这部分驱动程序驱动程序需要的软件状态进行初始化。这部分驱动程序仅在初始化的时候被调用一次。仅在初始化的时候被调用一次。q服务于服务于I/OI/O请求的子程序请求的子程序:调用这部分是由于系统调用的结果。这部分程序在执行调用这部分是由于系统调

19、用的结果。这部分程序在执行的时候,系统仍认为是和进行调用的进程属于同一个进的时候,系统仍认为是和进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境,因此可以在其中调用的用户程序的运行环境,因此可以在其中调用sleep()sleep()等与进程运行环境有关的函数。等与进程运行环境有关的函数。q中断服务子程序中断服务子程序:釉赌桅茄熔称临讨穷摘刻誊刀缮吊政定离玲扑亡滤躲在材城钦迫岩挂蜡句嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件18Linux下设备驱动程序I/O设备

20、入口点1Linux驱动程序设计q在系统内部,在系统内部,I/OI/O设备的存取通过一组固定的入口点来进设备的存取通过一组固定的入口点来进行,这组入口点是由每个设备的设备驱动程序提供的。而入行,这组入口点是由每个设备的设备驱动程序提供的。而入口点由一个文件操作结构口点由一个文件操作结构( (file_operationsfile_operations) )向系统进行说明。向系统进行说明。一般来说,字符型设备驱动程序能够提供如下几个入口点:一般来说,字符型设备驱动程序能够提供如下几个入口点:qopenopen:打开设备准备:打开设备准备I/OI/O操作。对字符特别设备文件进行操作。对字符特别设备文

21、件进行打开操作,都会调用设备的打开操作,都会调用设备的openopen入口点。入口点。openopen子程序必须对子程序必须对将要进行的将要进行的I/OI/O操作做好必要的准备工作,如清除缓冲区等。操作做好必要的准备工作,如清除缓冲区等。如果设备是独占的,即同一时刻只能有一个程序访问此设备,如果设备是独占的,即同一时刻只能有一个程序访问此设备,则则openopen子程序必须设置一些标志以表示设备处于忙状态。子程序必须设置一些标志以表示设备处于忙状态。qcloseclose:关闭一个设备。当最后一次使用设备终结后,调:关闭一个设备。当最后一次使用设备终结后,调用用closeclose子程序。独占

22、设备必须标记设备可再次使用。子程序。独占设备必须标记设备可再次使用。霜孤拂吊瓜疚肮蒙剑块杏磊凝瞩隶弊佩膝迷拉共丢阀雷表概钨援粟殉址麓嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件19Linux下设备驱动程序I/O设备入口点2Linux驱动程序设计qwritewrite:往设备上写数据。对于有缓冲区的:往设备上写数据。对于有缓冲区的I/OI/O操作,一般操作,一般是把数据写入缓冲区里。对字符特别设备文件进行写操作将是把数据写入缓冲区里。对字符特别设备文件进行写操作将调用调用writewrite子程序。子程序。qioctlioctl:执行读、写之外的操作。:执

23、行读、写之外的操作。qselectselect:检查设备,看数据是否可读或设备是否可用于写:检查设备,看数据是否可读或设备是否可用于写数据。数据。selectselect系统调用在检查与设备特别文件相关的文件描系统调用在检查与设备特别文件相关的文件描述符时使用述符时使用selectselect入口点。如果设备驱动程序没有提供上述入口点。如果设备驱动程序没有提供上述入口点中的某一个,系统会用缺省的子程序来代替。对于不入口点中的某一个,系统会用缺省的子程序来代替。对于不同的系统,也还有一些其它的入口点。同的系统,也还有一些其它的入口点。qReadRead:从设备上读数据。对于有缓冲区的:从设备上读

24、数据。对于有缓冲区的I/OI/O操作,一般操作,一般是从缓冲区里读数据。对字符特别设备文件进行读操作将调是从缓冲区里读数据。对字符特别设备文件进行读操作将调用用readread子程序。子程序。码栈蒙株雀跑炯撂悄役衍轩休抉痰丁铁膳船弛胰弦埠纹纺蓉筐绢住吗畅材嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件20Linux下设备驱动程序I/O设备入口点3q 在用户自己的驱动程序中,首先要根据驱动程序的功能,完成 file_operations 结构中的函数的实现q 不需要的函数接口可以直接在 file_operations 结构中初始化为 NULLq 每个进程对设

25、备的操作,都会根据主次设备号,转换成对 file_operations 结构的访问洲夷署专哨添暗争淤轰愤斤俏藉掠钥御源辫候始撮千虏徽炎栋都迹铣墓醛嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件21设备驱动程序的开发过程q 查看原理图,理解设备的工作原理。q 定义设备号。设备由一个主设备号和一个次设备号来标识。主设备号惟一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表项的索引q 实现初始化函数。在驱动程序中实现驱动的注册和卸载q 设计所要实现的文件操作,定义 file_operations 结构膛乍讳原狡馋胖挂爱瘤炭朵污印爪酒剩泊蹬又赦硅彻捂瞎

26、睹锈颗傅贿仰痘嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件22设备驱动程序的开发过程q实现所需的文件操作调用,如 read、write 等q实现中断服务,并用 request_irq 向内核注册,中断并不是每个设备驱动所必需的。q编译该驱动程序到内核中,或者用insmod命令加载模块q测试该设备,编写应用程序,对驱动程序进行测试边寡模寇柜骸称妊爷镐誉泣舌遵扯湾批蜕狈圭乙蝶聊活汝相耸骏彻宇毕泞嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件23Linux下设备注册1Linux驱动程序设计q设备驱动程序所提供的入口点,在设

27、备驱动程序初始化的设备驱动程序所提供的入口点,在设备驱动程序初始化的时候向系统进行登记,以便系统在适当的时候调用。时候向系统进行登记,以便系统在适当的时候调用。LinuxLinux系系统里,通过调用统里,通过调用register_chrdevregister_chrdev向系统注册字符型设备驱动向系统注册字符型设备驱动程序。程序。register_chrdevregister_chrdev定义为:定义为:#include #include #include #include int register_chrdev(unsigned int major, const char *name,int

28、 register_chrdev(unsigned int major, const char *name, struct file_operations *fops); struct file_operations *fops);q其中,其中,majormajor是为设备驱动程序向系统申请的主设备号,是为设备驱动程序向系统申请的主设备号,如果为如果为0 0则系统为此驱动程序动态地分配一个主设备号。则系统为此驱动程序动态地分配一个主设备号。namename是设备名。是设备名。fopsfops是该驱动各个的入口点的文件操作结构指针。是该驱动各个的入口点的文件操作结构指针。秤匀嗓教桓紊鸦以寅世茸润

29、穷阔矢盆角劣韭委卑棘躇帚钓汁梨闲豫蓄煞希嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件24Linux下设备注册2Linux驱动程序设计q此函数返回此函数返回0 0表示成功。返回表示成功。返回-EINVAL-EINVAL表示申请的主设备号表示申请的主设备号非法,一般来说是主设备号大于系统所允许的最大设备号。非法,一般来说是主设备号大于系统所允许的最大设备号。返回返回-EBUSY-EBUSY表示所申请的主设备号正在被其它设备驱动程序表示所申请的主设备号正在被其它设备驱动程序使用。如果是动态分配主设备号成功,此函数将返回所分配使用。如果是动态分配主设备号成功,此

30、函数将返回所分配的主设备号。如果的主设备号。如果register_chrdevregister_chrdev操作成功,设备名就会出操作成功,设备名就会出现在现在/proc/devices/proc/devices文件里。文件里。q初始化部分一般还负责给设备驱动程序申请系统资源,包初始化部分一般还负责给设备驱动程序申请系统资源,包括内存、中断、时钟、括内存、中断、时钟、I/OI/O端口等,这些资源也可以在端口等,这些资源也可以在openopen子子程序或别的地方申请。在这些资源不用的时候,应该释放它程序或别的地方申请。在这些资源不用的时候,应该释放它们,以利于资源的共享。们,以利于资源的共享。獭

31、呈牙费费皇幌限意昼黄劫声染砒澎竞困矣异趟睁亮骨拱著害涂饰絮腆赘嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件25Linux下中断处理Linux驱动程序设计q在在LinuxLinux系统里,对中断的处理是属于系统核心的部分,系统里,对中断的处理是属于系统核心的部分,因此如果设备与系统之间以中断方式进行数据交换的话,就因此如果设备与系统之间以中断方式进行数据交换的话,就必须把该设备的驱动程序作为系统核心的一部分。设备驱动必须把该设备的驱动程序作为系统核心的一部分。设备驱动程序通过调用程序通过调用request_irqrequest_irq函数来申请中断,通过函

32、数来申请中断,通过free_irqfree_irq来来释放中断。释放中断。淄场充芯寻邦律痘檀裁重沤抹烂帖仇逻赠憾家巨穿摈叶揭沸雄计珠芒忌球嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件26Linux下内存分配、释放Linux驱动程序设计q作为系统核心的一部分,作为系统核心的一部分,设备驱动程序在申请和释放内存设备驱动程序在申请和释放内存时不是调用时不是调用mallocmalloc和和freefree,而代之以调用,而代之以调用kmallockmalloc和和kfreekfree,它们被定义为:它们被定义为:#include #include void *

33、kmalloc(unsigned int len, int priority);void * kmalloc(unsigned int len, int priority);void kfree(void * obj);void kfree(void * obj);q参数参数lenlen为希望申请的字节数,为希望申请的字节数,objobj为要释放的内存指针。为要释放的内存指针。prioritypriority为分配内存操作的优先级,即在没有足够空闲内存为分配内存操作的优先级,即在没有足够空闲内存时如何操作,一般用时如何操作,一般用GFP_KERNELGFP_KERNEL。潮眷拇拔佑谆檬嘿副辈巫

34、憋狙滋徒给捕榜痞态你群散砸皿檄壳葱狄痢赣拓嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件27Linux下内存分配、释放Linux驱动程序设计q使用一个没有申请的使用一个没有申请的I/OI/O端口不会使端口不会使CPUCPU产生异常,也就不产生异常,也就不会导致诸如会导致诸如“segmentation faultsegmentation fault”一类的错误发生。任何一类的错误发生。任何进程都可以访问任何一个进程都可以访问任何一个I/OI/O端口。此时系统无法保证对端口。此时系统无法保证对I/OI/O端口的操作不会发生冲突,甚至会因此而使系统崩溃。端口的操

35、作不会发生冲突,甚至会因此而使系统崩溃。q因此,在使用因此,在使用I/OI/O端口前,应该检查此端口前,应该检查此I/OI/O端口是否已有别端口是否已有别的程序在使用,若没有,再把此端口标记为正在使用,在使的程序在使用,若没有,再把此端口标记为正在使用,在使用完以后释放它。用完以后释放它。int int check_regioncheck_region(unsigned int from, unsigned int extent);(unsigned int from, unsigned int extent);void void request_regionrequest_region(un

36、signed int from, unsigned int extent,(unsigned int from, unsigned int extent, const char *name); const char *name);void void release_regionrelease_region(unsigned int from, unsigned int (unsigned int from, unsigned int extent);extent);姬构寥卑瞒甩骤咐忍最抹呸迪蹋茹狱郑终屋敞雄饰庭拍极胯膨卜咆跌刷歧嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序

37、开发过程ppt课件28Linux下开关中断函数Linux驱动程序设计q在设备驱动程序里,通过如下函数实现打开和关闭中断功在设备驱动程序里,通过如下函数实现打开和关闭中断功能:能:#include #include #define #define clicli() _asm_ _volatile_ (cli:)() _asm_ _volatile_ (cli:)#define #define stisti() _asm_ _volatile_ (sti:)() _asm_ _volatile_ (sti:)般躇修汽决滨昆渊掷滔辑联咒氨陌快馋垄重沁派寇斜邢圣致姬留糊专善麓嵌入式Linux应用程序开

38、发过程ppt课件嵌入式Linux应用程序开发过程ppt课件29Linux下用户态和核心态数据访问Linux驱动程序设计q在设备驱动程序里,还可能会用到如下的一些系统函数:在设备驱动程序里,还可能会用到如下的一些系统函数:#include #include void void memcpy_fromfsmemcpy_fromfs(void * to,const void * from,unsigned long (void * to,const void * from,unsigned long n);n);void void memcpy_tofsmemcpy_tofs(void * to,c

39、onst void * from,unsigned long (void * to,const void * from,unsigned long n);n);q在用户程序调用在用户程序调用read read 、writewrite时,因为进程的运行状态由时,因为进程的运行状态由用户态变为核心态,地址空间也变为核心地址空间。而用户态变为核心态,地址空间也变为核心地址空间。而readread、writewrite中参数中参数bufbuf是指向用户程序的私有地址空间的,所以不能是指向用户程序的私有地址空间的,所以不能直接访问,必须通过上述两个系统函数来访问用户程序的私有直接访问,必须通过上述两个系

40、统函数来访问用户程序的私有地址空间。地址空间。memcpy_fromfsmemcpy_fromfs由用户程序地址空间往核心地址空间由用户程序地址空间往核心地址空间复制,复制,memcpy_tofsmemcpy_tofs则反之。参数则反之。参数toto为复制的目的指针,为复制的目的指针,fromfrom为为源指针,源指针,n n为要复制的字节数。为要复制的字节数。姆研泅得违瞩碗婚右乃罚谬弥望窍爱植醋骄予在歉从低说帆印拔婉阿栋魏嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件30Linux下设备驱动程序举例Linux驱动程序设计q模块加载模块加载q设备初始化设备

41、初始化q设备入口点实现设备入口点实现鳖赵算磷涉抛练御篮耗荐果盾淹惑辱芽辜荣淆馅茂率蚕吱囚优肢泣骏狱荤嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件31静态编译驱动程序进内核Linux驱动程序设计模块初始化函数甸瞳柏筋没肉俩娩评拇诲姨精梯哥挫兼扳贴媚伍磊虾宋眠略篓虑院熙俞儒嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件32设备初始化Linux驱动程序设计文件操作结构声明鹅踞碴败熏卵几栓练对赫椒悔鲜纷魔夺笼轧棱署肆鳃尺青螺摩纶颅捞子凉嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件33设备入口点实现Linux驱动程序设计readwrite扰拒秀飞烟由隐瓤沫已瘩弄癸拈曲台郎头翘音盲笑叮吞末振眺惰迅利非殷嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件34基于ARM和Linux的开发谢谢!雾吧耗挺蝴哀蔽沾肠合梆鞠畸懒掺台幅悸熬樊倔晴莹搪匠椰堵姻烈督峙澳嵌入式Linux应用程序开发过程ppt课件嵌入式Linux应用程序开发过程ppt课件35

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号