自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 根文件系统

3.解压busybox,进入其目录,配置编译,在 busybox 目录下cd 进入 _install 目录,里面有 bin sbin usr linuxrc 四个文件将这三个目录或文件拷到第一步所建的 rootfs 文件夹下。1.下载busybox,BusyBox 是一个集成了大量常用 Linux 命令和工具的软件,它被设计为体积小巧,适合在嵌入式系统和资源受限的环境中使用。4.补全lib库,找到工具链中的lib目录拷贝到你的根文件目录中,我用的是arm-linux-gcc的lib。

2024-08-23 18:31:35 212

原创 C语言相关

C语言中函数的定义都是相互平行、相互独立的,也就是说在函数定义时,

2024-08-17 22:21:20 1186

原创 linux

阻塞与非阻塞访问、poll函数提供了较好的解决设备访问的机制,但是如果有了异步通知,整套机 制则更加完整了。一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状 态,这一点非常类似于硬件上“中断的概念,比较准确的称谓是信号驱动的异步I/O”。信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底 什么时候到达。

2024-08-11 23:09:33 847

原创 ARM相关知识概括

根文件系统首先是一种文件系统,用于存储数据文件,相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本如)和服务加载到内存中去运行,里面包含了Linux系统能够运行所必需的应用程序、库等,比如可以给用户提供操作Linux的控制界面的shell程序、动态连接的程序运行时需要的glibc库 等。我们要明白文件系统和内核是完全独立的两个部分。

2024-08-10 21:47:05 1196

原创 操作系统—调度算法,文件系统,设备管理,网络系统学习心得

前面提到的 Reactor 是非阻塞同步网络模式,而Proactor 是异步网络模式。

2024-08-06 11:56:30 739

原创 操作系统_进程管理

优点:每个进程都有控制块,用内核函数完成切换,速度更快。缺点:系统无法识别单个线程,一阻塞全阻塞,线程不可被其他线程打断,多线程抢时间执行较慢。优点:能阻塞单个线程,具有更多运行时间。缺点:内核支持,系统调用,开销大。

2024-08-05 17:38:07 442

原创 操作系统_内存管理学习心得

计算机是由各种外部硬件设备组成的,比如内存、cpu、 硬盘等,如果每个应用都要和这些硬件设备对接通信协议,那这样太累了,所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交写,不用关心硬件的细节。 内核的基本能力:内核的工作方式 内核程序执行在内核态,户程序执行在用户态。当应用程序使用系统调用时,产生一个中断。 发生中断后,CPU 会中断当前在执行的用户程序,转而跳转到中断处理程序,也就是开始执行内核程序。内核处理完后,主动触发中断,把CPU执行权限交回给用户程序,回

2024-08-01 19:19:50 751

原创 操作系统-硬件结构学习心得

伪共享(False Sharing)的定义: 发现如果1号和2号CPU核心这样持续交替的分别修改变量A和B,就会重复这两个步骤,Cache 并没有起到缓存的效果,虽然变量A和B之间其实并没有任何的关系,但是因为同时归于一个Cache Line,这个Cache Line中的任意数据被修改后,都会相互影响,从而出现交替修改共享和已失效状态这两个步骤。因此,这种因为多个线程同时读写同一个Cache Line的不变时,导致CPU Cache失效的现象称为伪共享(False Sharing)。

2024-07-31 21:44:54 1058

原创 UART编程框架详解

UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。串口在嵌入式中用途非常的广泛,主要的用途有:打印调试信息;外接各种模块:GPS、蓝牙;串口因为结构简单、稳定可靠,广受欢迎。通过三根线即可,发送、接收、地线。TxD线把PC机要发送的信息发送给ARM开发板。最下面的地线统一参考地。

2024-07-25 20:49:33 1279

原创 两类中断控制器处理流程详解(链式和层级)

GIC之下的中断控制器分为两类:链式(chained)、层级(hierarchy)。

2024-07-25 16:19:38 674

原创 中断相关驱动详解

ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源。GIC提供了内存映射寄存器,可用于管理中断源和行为,以及(在多核系统中)用于将中断路由到各个CPU核。它使软件能够屏蔽,启用和禁用来自各个中断源的中断,以(在硬件中)对各个中断源进行优先级排序和生成软件触发中断。它还提供对TrustZone安全性扩展的支持。GIC接受系统级别中断的产生,并可以发信号通知给它所连接的每个内核,从而有可能导致IRQ或FIQ异常发生。2.1 GIC两个主要功能模块(软件层面)

2024-07-25 14:13:28 1159

原创 GPIO子系统

芯片内部有很多引脚,这些引脚可以接到GPIO模块,也可以接到I2C等模块。通过Pinctrl子系统来选择引脚的功能(mux function)、配置引脚:当一个引脚被复用为GPIO功能时,我们可以去设置它的方向、设置/读取它的值。GPIO名为"General Purpose Input/Output",通用目的输入/输出,就是常用的引脚。GPIO可能是芯片自带的,也可能通过I2C、SPI接口扩展:GPIO有一些通用功能、通用属性。

2024-07-24 20:19:26 1237

原创 分析Pinctrl驱动程序

Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的:引脚枚举与命名(Enumerating and naming)引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能引脚配置(Configuration):比如上拉、下来、open drain、驱动强度等Pinctrl驱动由芯片厂家的BSP工程师提供,一般的驱动工程师只需要在设备树里:指明使用那些引脚复用为哪些功能配置为哪些状态在一般的设备驱动程序里,甚至可以没有pinctrl的代码。

2024-07-23 19:45:14 478

原创 Input子系统框架(编写触摸屏驱动程序_基于QEMU)

这张图片展示了Linux输入系统的工作流程,从物理硬件获取输入数据,通过硬件驱动转换为标准事件,然后通过内核的输入子系统处理这些事件,最终提供给用户空间的应用程序使用。在实际使用中,你需要根据实际的硬件设计来调整设备树中的属性,确保它们正确地反映了你的硬件配置。图片展示了一个简化的流程图,描述了在Linux内核中,I2C输入设备驱动程序的组件和它们之间的交互方式。这个图示提供了一个高层次的视图,展示了Linux内核中输入设备驱动程序的组件和它们之间的交互方式。:字符串属性,用于标识设备的兼容信息。

2024-07-23 17:59:33 903

原创 I2C驱动程序分析

I2C Core就是I2C核心层,它的作用:提供统一的访问函数,比如i2c_transfer、i2c_smbus_xfer等实现I2C总线-设备-驱动模型,管理:I2C设备(i2c_client)、I2C设备驱动(i2c_driver)、I2C控制器(i2c_adapter)在Linux内核中,i2c_client和i2c_driver是I2C设备驱动程序中两个密切相关的概念,它们共同工作以实现对I2C设备的管理。i2c_driveri2c_driver是一个结构体,定义了驱动程序的属性和操作函数。

2024-07-22 20:58:50 1205

原创 I2C驱动原理

APP访问硬件肯定是需要驱动程序的, 对于I2C设备,内核提供了驱动程序,通过它可以直接使用下面的I2C控制器驱动程序来访问I2C设备。框架如下:i2c-tools是一套好用的工具,也是一套示例代码。使用一句话概括I2C传输:APP通过I2C Controller与I2C Device传输数据。所以使用I2C-Tools时也需要指定:哪个I2C控制器(或称为I2C BUS、I2C Adapter)哪个I2C设备(设备地址)数据:读还是写、数据本身。

2024-07-22 14:51:38 1323

原创 LDC驱动单Buffer的缺点与改进方法

单缓冲区意味着每次只能有一个图像或帧在屏幕上显示。这限制了屏幕的刷新率,因为每次更新屏幕内容前,都需要等待当前图像处理完成。:如果画面的更新不是在垂直同步(VSync)的边界进行,可能会导致画面撕裂现象,即屏幕上的一部分显示旧帧的内容,而另一部分显示新帧的内容。:在单缓冲区中,当旧图像被新的图像替换时,可能会有短暂的屏幕闪烁,因为屏幕需要从旧图像完全过渡到新图像。:由于每次只能处理一个图像,这可能会成为性能瓶颈,尤其是在处理高分辨率或复杂图像时。

2024-07-19 17:31:00 769 1

原创 LCD图片显示实现渐进,漂移等翻页动画思路

确保你的 LCD 已正确初始化,包括设置合适的显示模式、分辨率等。:将图片数据加载到内存中,通常是将图片转成位图(Bitmap)格式。:将位图数据传送到 LCD 上进行显示。:通过编程实现各种动画效果,如渐进、漂移等。

2024-07-19 12:14:34 736

原创 LCD控制函数详解

查看任何芯片的LCD控制器寄存器时,记住几个要点:① 怎么把LCD的信息告诉LCD控制器:即分辨率、行列时序、像素时钟等;② 怎么把显存地址、像素格式告诉LCD控制器顺序就是:显存->LCD控制器->LCD上图是我们将要使用到的寄存器,

2024-07-18 23:25:18 1178

原创 基于QEMU的LCD驱动详解

概述:使用QEMU模型LCD屏幕,可以只写驱动程序,不需要设置LCD硬件相关,也不需要映射Framebuffer。使用QEMU可以非常方便地调试内核、查看驱动程序执行过程有助于深入研究内核及驱动Linux驱动 = 驱动框架 + 硬件操作。如果硬件操作足够简单,我们就可以把精力放在驱动程序的框架上,这才是Linux的核心。对于硬件操作,你至少要做这些事情:设置引脚用于LCD阅读LCD手册,阅读LCD控制器手册,根据LCD参数设置LCD控制器。

2024-07-17 15:44:59 786

原创 Framebuffer驱动详解

LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分辨率是:xres * yres。只要我们能控制任意一个像素的颜色,就可以在LCD上绘制文字、图片。

2024-07-16 20:08:57 897

原创 深入理解Linux内核中的同步与互斥的实现

一文详细了解Linux内核中的同步与互斥的实现。

2024-07-16 14:16:48 912 2

空空如也

空空如也

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

TA关注的人

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