自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Linux_设备树

1 设备树起源Linux 3.x之前,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,很多代码只是在描述板级细节,并且有大量重复性的描述,而这些板级细节对内核来讲并没有什么用。设备树是一种描述硬件的数据结构,它起源于OpenFirmware(OF)。在Linux 2.6中,ARM架构的板级硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用设备树后,许多硬件的细节可以直接通过它传递给Linux,而不需要在

2022-01-12 16:53:04 588

原创 Linux下的命令学习--dd命令

Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。使用方法:dd if=xx of=xx bs=xx count=xx skip=xx seek=xx一般情况下使用格式就是这样,可以根据自己的情况省略参数;参数说明:if=文件名:输入文件名,默认为标准输入。即指定源文件。of=文件名:输出文件名,默认为标准输出。即指定目的文件。ibs=bytes:一次读入bytes个字节,即指定一个块大小为

2021-12-04 18:16:10 781

原创 Linux_输入子系统

1.输入子系统概述1.1.输入子系统的作用在嵌入式系统中,会使用到多的输入设备,像按键、鼠标、键盘、触摸屏等都属于输入设备。对于这些输入设备,如果都按照之前字符设备注册模型进行驱动程序的编写,那么编程过程会比较复杂,会出现许多重复性的代码。而且又因为不同的人编写出来的设备驱动也不同,向应用层上报的数据也不同,应用开发人员访问这些设备驱动也是比较麻烦。由于这些输入设备最终的功能都是将数据上报给用户,因此,Linux内核专门做了一个叫做input子系统来统一处理这些输入设备。输入子系统的作用有以下几点:

2021-11-28 21:01:01 396

原创 Linux_平台设备总线

1.platform总线模型1.1.Linux设备驱动模型回顾1.实现驱动加载函数xxx_init()和驱动卸载函数xxx_exit()(与内核相关)2.申请设备号,字符设备注册(与内核相关)3.利用udev/mdev机制创建设备文件节点class_create,device_create(与内核相关)4.硬件部分初始化(与硬件相关)IO资源映射ioremap注册中断request_irq5.构建file_operation结构(与内核相关)6.实现操作硬件方法xxx_open、xxx_r

2021-11-25 22:43:24 679

原创 Linux_内核同步机制

1.Linux内核同步机制1.1.内核同步机制作用1)Linux操作系统是一个多任务操作系统,2.6以上版本都支持任务抢占。2)现在的CPU大部分都是多核心CPU,多核心CPU同时并发执行程序。3)不管是多核心CPU还是单核心CPU在任务执行过程都可能产生中断。多进程并发:进程之间会存在多进程同时并发访问同一共享资源,就会产生竞争。任务抢占:当进程在访问某个共享资源的时候发生任务抢占,随后进入了高优先级的进程,如果该进程也访问了同一共享资源,那么也会造成进程与进程之间的竞争。多核心CPU:

2021-11-24 22:44:21 1187

原创 Linux_文件IO模型

1.阻塞与非阻塞IO模型3## 1.1.阻塞与非阻塞IO简介首先,这里的“IO”指的是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式IO就会将应用程序对应的进程挂起,直到设备资源可以使用为止。对于非阻塞IO,应用程序对应的进程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞式IO模型如下图所示:应用程序调用read函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入休眠态。等设备可用的时候就会从休眠态唤

2021-11-23 23:28:34 146

原创 Linux_内核定时器

1.内核定时器1.1.内核定时器简介和系统时钟Linux内核定时器是一个基于系统时钟的软件模拟定时器。Linux内核定时器使用很简单,只需要提供超时时间和定时处理函数即可,当超时时间到了以后设置的定时器处理函数就会执行。在使用Linux内核定时器要注意一点,内核定时器并不是周期性运行的,超时以后就会自动关闭,因此如果想实现周期性定时,那么就需要在定时处理函数中重新开启定时器。之前大家学习过ucos系统,我们知道ucos系统是需要一个硬件定时器来提供系统时钟。同样,Linux系统要运行,也得需要硬件定时

2021-11-20 23:24:55 303

原创 Linux_中断下半部

1.中断下半部1.1.中断上半部与中断下半部为保证系统的实时性,中断服务程序必须足够简短。但实际应用中,中断处理过程就是需要消耗一定的时间。比如:SOC在中断服务函数中接收网络数据,还需要对网络数据进行解析处理,解析数据不可避免需要消耗时间;触摸屏通过中断通知SOC有触摸事件产生,如果SOC与触摸屏是IIC通信(IIC通信速度本来就慢),则在中断中通过IIC读取数据也得消耗时间。如果在中断服务程序中消耗时间,则会严重降低系统的实时性。基于这个原因,Linux系统中提出一个概念:把中断处理过程划分为俩部

2021-11-19 23:41:39 675

原创 Linux_内核中断编程

1.中断基础1.1.什么是中断中断是指在CPU正常运行期间,由于内部事件或外部事件引起的CPU暂时停止正在运行的程序,转去该内部或外部事件的服务程序中去,服务程序执行完毕后再返回断点处继续运行被暂时中断的程序。在中断发生时被调用的用来处理中断的函数称为中断处理函数。中断的处理流程如下图所示:1.2.中断的意义外设的处理速度远远慢于CPU的处理速度,如果采用轮询方式(CPU一直等待)处理外设,会降低CPU的利用率。如果采用中断方式处理外设,会大大提高CPU的利用率。以cpu读取串口信息为例:

2021-11-18 23:25:35 270

原创 Linux_新版字符设备模型和杂项字符设备模型

1.新版本字符设备驱动模型Linux字符设备驱动开发的基本步骤:字符设备驱动开发重点是使用register_chrdev函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev函数注销字符设备。register_chrdev和unregister_chrdev这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。1.1.新旧字符设备驱动模型比较不论是哪种版本的字符设备驱动模型,在编写字符设备驱动时都需要

2021-11-17 23:15:23 135

原创 Linux_字符设备驱动开发

1.Linux设备驱动相关知识点1.1.应用程序、内核、驱动的关系应用程序、内核和驱动之间的关系如下图所示:应用程序:应用程序以文件形式访问各种资源,应用程序调用应用程序函数库完成各种功能。调用的应用程序函数库中,部分函数直接完成功能,部分函数(文件、进程、线程、网络)通过系统调用。内核:处理系统调用,调用设备驱动程序。驱动:负责直接与硬件通信。注:系统调用,是一种特殊的接口,通过这个接口,用户可以访问内核空间。系统调用会向内核发出请求,实现内核提供的某些服务。一个API如果需要和内核打交道

2021-11-16 23:06:24 182

原创 Linux_内核模块化编程

1.加载驱动的情况1.1.静态编译到内核1)执行make menuconfig,找到Device Drivers —>Character devices —>将菜单前面的括号选择为 ’*’ ,然后保存退出。2)分析linux-3.5/drivers/char/目录下的Makefile,寻找和tiny4412_hello_module.c有关的地方3)CONFIG_TINY4412_HELLO_MODULE为一个宏,是在linux-3.5/.config内定义的4)从这可以看出,

2021-11-15 23:39:16 330

空空如也

空空如也

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

TA关注的人

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