linux设备驱动(1)--驱动开发基础

文章介绍了Linux驱动开发的基础知识,包括应用程序与驱动的交互,用户空间和内核空间的概念,以及内核空间访问的三种方式:系统调用、异常和陷入。重点讲述了字符设备驱动的开发流程,如通过open、close、write等函数操作设备文件,并提到了file_operations结构体在驱动中的作用。
摘要由CSDN通过智能技术生成

代码学习资料来源于:

第2讲 字符设备驱动开发基础实验_哔哩哔哩_bilibili

仅用于个人学习/复习,侵联删

1、应用程序和驱动的交互原理

驱动就是获取外设、或者传感器数据、控制外设。数据会提交给应用程序。Linux驱动编写不仅要编写驱动,还要我们简单编写一个测试应用程序。linux下驱动和应用是完全分开的。

用户空间和内核空间

每个进程都有一个虚拟地址空间。对于32位操作系统而言,虚拟地址空间为4G,且内核空间与用户空间的分配比为1:3。这样做的目的是让每个进程运行都相互不干扰。用户空间对应进程,所以每当进程切换的时候,用户空间就会随之变化,内核空间是由内核进程映射,每个内核空间都会有自己对应的页表,用户进程各有不同的页表。

更加详细的描述如下:Linux 内核空间与用户空间_liefyuan的博客-CSDN博客

用户空间(用户态)和内核空间(内核态):

linux操作系统内核和驱动程序运行在内核空间,应用程序运行在用户空间。分为内核空间和用户空间最大的一个好处就是安全,可以防止一个应用程序获取到较大的权限来改变操作系统。

应用程序想要访问内核资源(驱动)怎么办呢?有三种方法:系统调用、异常(中断)、陷入(软中断)。

应用程序不会直接调用系统调用,而是通过API函数来间接调用系统调用,比如POSIX、C库等。unix类操作系统中最常用的编程接口就是POSIX。

POSIX:POSIX 是 可移植操作系统接口(Portable Operating System Interface) 的缩写。它是一个 IEEE 1003.1 标准,其定义了应用程序(以及命令行 Shell 和实用程序接口)和 UNIX 操作系统之间的语言接口。

比如:应用程序使用open函数打开一个设备文件

每个系统调用都有一个系统调用号

系统调用处于内核空间,应用程序无法直接访问,因此需要陷入到内核,方法就是软中断。陷入到内核以后还要指定系统调用号(下图来源于网络)。

2、字符设备驱动开发流程

1)linux里面一切皆文件,驱动设备表现就是一个/dev/下的文件,比如/dev/led。应用程序调用open函数打开设备,比如led。应用程序通过write函数写数据,比如写1表示打开,写0表示关闭。如果要关闭设备那么就是close函数。

2)编写驱动的时候也需要编写驱动对应的open、close、write等函数。字符设备驱动file_operations结构体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值