自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

耐心的小黑的博客

爱学习的小黑!

  • 博客(17)
  • 收藏
  • 关注

原创 linux基础学习笔记六:配置环境变量

一、什么是环境变量?概念:环境变量是系统预设置的参数。Linux 是一个多用户的操作系统,所以每一个用户 也都有自己的环境变量举例:比如我们之前学习的命令我们不管在哪个路径下输入,都是可以执行成功的,因为 系统已经把命令的搜索路径提前设置好了二、常用变量 PATH这个变量决定了要去那个路径下去寻找我们的程序或者命令,而且在以后的开发过程 中,我们要经常修改这个变量。echo $PATH,$表示引用三、怎么修改 Ubuntu 的环境变量?这里给大家介绍最常用的俩种方法。举例:把/home/t

2020-05-23 15:14:28 1998

原创 linux基础学习笔记五:软链接和硬链接

一、Linux 下的链接种类软链接:类似于 windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。硬链接:通过文件系统的 inode 进行链接,类似于 windows系统中的复制,但是不产生新的文件。二、什么是 inode?inode 是用来存放文件信息的,每个文件都会占用一个 inode,并且这个 inode 号是唯一的,文件的内容都是 inode

2020-05-23 11:15:00 1710 1

原创 linux驱动开发学习笔记二十五:SPI驱动框架介绍

一、SPI 驱动框架简介和I2C一样,SPI 也是很常用的串行通信协议,SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动,主机控制器也就是 SOC的 SPI 控制器接口。1、 SPI 主机驱动SPI 主机驱动就是 SOC 的 SPI 控制器驱动,类似 I2C 驱动里面的适配器驱动。Linux 内核使用 spi_master 表示 SPI 主机驱动,spi_master 是个结构体,定义在 include/linux/spi/spi.h 文件中,内容如下(有缩减):315 stru

2020-05-13 13:23:23 2397

原创 linux驱动开发学习笔记二十四:I2C驱动框架介绍

I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等器件,Linux 下的 I2C 驱动是有框架的,我们需要按照指定的框架去编写 I2C 设备驱动。为了符合 Linux 的驱动分离与分层的思想,Linux内核将 I2C 驱动分为两部分:①I2C 总线驱动,I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。②I2C 设备驱动,I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。一、I2C 总线驱动首先来看一下 I2C 总线,在platform中总线是虚

2020-05-12 17:54:36 2358

原创 linux驱动开发学习笔记二十三:input子系统

一、简介按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框架,用户只需要负责上报输入事件,比如按键值、坐标等信息,input 核心层负责处理这些事件。input 就是输入的意思,因此 input 子系统就是管理输入的子系统,和 pinctrl 和 gpio 子系统一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等等这些都

2020-05-11 22:52:57 1806

原创 linux驱动开发学习笔记二十二:MISC驱动

一、简介misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动,所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解决此问题。MISC 设备会自动创建 cdev,不需要像我们以前那样手动创

2020-05-10 14:23:51 2121

原创 linux驱动开发学习笔记二十一:异步通知

一、异步通知简介我们首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。比如我们在裸机篇里面编写的 GPIO 按键中断实验,我们通过按键去开关蜂鸣器,采用中断以后处理器就不需要时刻的去查看按键有没有被按下,因为按键按下以后会自动触发中断。同样的,Linux 应用程序可以通过阻塞或者非阻塞这两种方式来访问驱动设备,通过阻塞方式访问的话应用程序会处于休眠态,等待驱动设备可以

2020-05-09 22:26:19 1976

原创 linux驱动开发学习笔记二十:linux内核中断

一、简介不管是裸机实验还是 Linux 下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断我们需要做一大堆的工作,比如配置寄存器,使能 IRQ 等等。Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。在 Linux 内核中使用一个...

2020-05-07 15:18:13 1889

原创 linux驱动开发学习笔记十九:认识一下ioctl函数

一、ioctl介绍ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制。如果不用ioctl的话,也可以实现对设备I/O通道的控制,但那是蛮拧了。例如,我们可以在驱动程序中实现write的时候检查一下是否有特殊约定的数据流通过,如果有的话,那么后面就跟着控制命令。但是如果这样做的话,会导致代码分工不明,程序结构混乱,程序员自己也会头昏...

2020-05-07 01:18:44 2595

原创 linux驱动开发学习笔记十八:认识一下内核定时器

一、内核时间管理系统节拍率Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate)(有的资料也叫系统频率),比如 1000Hz,100Hz 等等说的就是系统节拍率...

2020-05-06 23:29:01 2167

原创 linux驱动开发学习笔记十七:并发与竞争

一、并发与竞争并发与竞争简介Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话可能会导致系统崩溃。现在的 Linux 系统并发产生的原因很复杂,总结一下有下面几个主要原因:①、多线程并发访问,Linux 是多任务(线程)的系统,所以多线程访问是最基本的原因。②、抢占式并...

2020-05-05 23:44:43 1860

原创 linux驱动开发学习笔记十六:gpio相关OF函数和子系统API函数

一、gpio相关OF函数我们在设备节点中会定义了一个名为“gpios”的属性,当然不一定是“gpios”,你可以自定义。gpios 属性描述了 test 这个设备所使用的 GPIO。在驱动程序中需要读取 gpios 属性内容,Linux 内核提供了几个与 GPIO 有关的 OF 函数,常用的几个 OF 函数如下所示:of_gpio_named_count 函数of_gpio_named_...

2020-05-03 20:06:24 5006

原创 linux驱动开发学习笔记十五:gpio子系统介绍

一、gpio子系统简介我们之前已经说过了 pinctrl 子系统,pinctrl 子系统重点是设置 PIN(有的 SOC 叫做 PAD)的复用和电气属性,如果 pinctrl 子系统将一个 PIN 复用为 GPIO 的话,那么接下来就要用到 gpio 子系统了。gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO为输入输出,读取 GPIO 的值等。...

2020-05-03 17:52:34 2525

原创 linux驱动开发学习笔记十四:pinctrl子系统介绍

一、前言之前已经介绍过关于设备树的一些基本概念,相信对设备数已经有了一些了解。我们知道在驱动开发过程中设备树是非常重要的,但是在使用pinctrl和gpio子系统之前,其实我们写驱动的方式,就拿点亮一个led来说,还是和裸机开发非常类似。因为我们仍然相当于直接操作的寄存器,和不使用设备树相比无疑只是将寄存器的地址写到了节点属性里,然后我们去读取而已。其实对于大多数的 32 位 SOC 而言,引...

2020-05-03 16:01:07 2867 1

原创 linux驱动开发学习笔记十三:设备树常用OF操作函数

       设备树描述了设备的详细信息,这些信息包括数字类型的、字符串类型的、数组类型的,我们在编写驱动的时候需要获取到这些信息。比如设备树使用 reg 属性描述了某个外设的寄存器地址为 0X02005482,长度为 0X400,我们在编写驱动的时候需要获取到reg属性的0X02005482和 0X400这两个值,然后初始化外...

2020-05-02 11:45:15 4496

原创 linux驱动开发学习笔记十二:设备树中节点的命名格式和常见属性

一、节点的命名格式1 / { 2 aliases { 3 can0 = &flexcan1; 4 };5 6 cpus { 7 #address-cells = <1>;8 #size-cells = <0>;9 10 cpu0: cpu@0 {11 ...

2020-05-01 15:19:07 5334 3

原创 linux驱动开发学习笔记十一:初识设备树

一、什么是设备树?在Linux3.x之前的内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录中。每年新出的 ARM 架构芯片少说都有数十、数百款,每一款芯片又会有很多款基于该芯片的板子,这些板子上的设备又不相同,每一块板子都要有自己的板级信息文件,所以Linux 内核下板级信息文件将会成指数级增长!关键是...

2020-05-01 11:58:58 2611

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除