欢迎来到天天文库
浏览记录
ID:37193215
大小:345.10 KB
页数:53页
时间:2019-05-12
《嵌入式Linux编程基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章嵌入式Linux编程基础4.1Linux中系统调用的基本概念4.2Linux中用户编程接口(API)及系统命令的相互关系4.3Linux下设备文件读写方法4.4Linux中标准文件I/O函数的使用4.1Linux中系统调用的基本概念系统调用所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。例如用户可以通过进程控制相关的系统调用来创建进程、实现进程调度、进程管理等。为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离
2、的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。在有些情况下,用户空间的进程需要获得一定的系统服务(调用内核空间程序),这时操作系统就必须利用系统提供给用户的“特殊接口”——系统调用规定用户进程进入内核空间的具体位置。进行系统调用时,程序运行空间需要从用户空间进入内核空间,处理完后再返回到用户空间。4.2Linux中用户编程接口(API)及系统命令的相互关系API前面讲到的系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务的接口。在实际使用中程序员调用的通常是用户
3、编程接口——API。比如open,close,read,write,ioctl等都是API接口函数。2openreadwriteioctl…调用其他库函数称为系统调用其他库函数的实现执行swi指令进入内核系统调用的异常处理其他功能openreadwriteioctl…硬件设备应用程序库内核驱动程序Linux软件系统的层次关系(swi是ARM指令)系统命令系统命令:ls,cd,mkdir,cp,chmod,rm系统命令相对API更高了一层,它实际上一个可执行程序,它的内部引用了用户编程接口(API)来实现相应的功能。4.3Linux下设备文件读写方法文件描述符Linux中对目录和设
4、备的操作都等同于文件的操作,因此,大大简化了系统对不同设备的处理,提高了效率。Linux中的文件分为4种:普通文件、目录文件、链接文件和设备文件。内核如何区分和引用特定的文件呢?这里用到了一个重要的概念——文件描述符。文件描述符内核如何区分和引用特定的文件呢?这里用到了一个重要的概念——文件描述符。对于Linux而言,所有对设备和文件的操作都是使用文件描述符来进行的。文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符(fd);当需要读写文件时,也需要把文件描述符作为参数传递给相应
5、的函数.通常一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理。这3个文件对应的文件描述符为0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)基于文件描述符的I/O操作是Linux系统所特有的文件操作模式。函数说明open()函数是用于打开,在打开时可以指定文件的属性及用户的权限等各种参数。close()函数是用于关闭一个被打开的文件。当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。read()函数是用于将从指定的文件描述符中读出的数据放到缓存区中,并返回实
6、际读入的字节数。若返回0,则表示没有数据可读,即已达到文件尾。读操作从文件的当前指针位置开始。当从终端设备文件中读出数据时,通常一次最多读一行。write()函数是用于向打开的文件写数据,写操作从文件的当前指针位置开始。对磁盘文件进行写操作,若磁盘已满或超出该文件的长度,则write()函数返回失败。ioctl()函数是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。也可以通过它实现对简单I/O设备进行控制。上述函数格式如下:4.4Linux中标准文件I/O函数的使用数码管驱动程序中的函
7、数—驱动程序s3c2440-led.c#include#include#include#include#include#include#include#include#include#include<
此文档下载收益归作者所有