自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设备驱动-随记

dma_alloc_coherent函数是用于在Linux内核中为设备驱动程序分配用于DMA操作的内存区域的函数。DMA是指通过外部设备直接访问系统内存的过程,它通常用于设备之间的数据传输,比如网络数据包的接收和发送,磁盘I/O等。通过使用container_of宏,可以很方便地根据结构体的某个成员的指针获取整个结构体的指针,从而进行相应的操作。dma_alloc_coherent函数的作用是在内核中分配一块物理上连续、足够大的内存区域,用于设备进行DMA操作。这个宏通常在设备驱动程序或内核模块中使用。

2024-04-25 11:44:11 384

原创 自动化测试-ping超时联动

安装完AutoIt3后,在开始菜单输入auto可弹出AutoIt v3 Window Info软件,使用该软件的Finder Tool工具可定位窗口等相关信息的名称。直到出现连续10次ping超时的情况,调用click_script.au3脚本,执行click_script.au3中定义的相关功能。click_script.au3的功能为,点及窗口Window Title中的stop按钮。2.将click_script.au3和ping_click.bat拷贝到软件安装路径下。1.安装AutoIt3软件。

2024-04-17 14:36:49 153

原创 Linux内核裁剪

Linux内核裁剪是一种优化Linux内核的过程,通过移除不必要的功能和模块,以及调整参数来减小内核的大小并提高性能。裁剪可以针对特定的嵌入式系统、服务器环境或个人需求进行定制,以满足特定的功能和资源要求。本文将介绍Linux内核裁剪的概述,包括裁剪的原因、方法和注意事项。

2024-04-13 15:37:03 352

原创 Linux USB驱动(二)

USB集线器的每个下游端口的D+和D-上,分别接了一个15KΩ的下拉电阻到地,在端口悬空时,就被这两个下拉电阻拉到了低电平。Hub给Device发出复位信号,如果Device支持高速模式,就会回复一个K信号,Hub收到K信号后,如果自身也支持高速模式,就会发出一系列的KJ信号,Device收到后就知道Hub也支持高速模式,然后就会。当高速设备断开后,Hub发出的信号,得到的反射信号法无衰减,Hub监测到这些信号以后就知道设备已经断开(此处涉及到比较深的与阻抗匹配相关的硬件知识)。中已经封装好的函数接口。

2024-03-31 16:12:32 727

原创 Linux设备驱动

Linux设备驱动模型有(1):管理设备自身的属性信息(寄存地址或者led个数),对应的数据结构随类型而变,但有共同的属性成员 struct device。(2):实现设备的具体硬件操作(驱动方法),对应的数据结构随类型而变,但有共同的属性成员 struct device_driver;(3):绑定了符合该总线要求(匹配词)的设备端和驱动端,将设备和驱动匹配起来,对应的数据结构是struct bus_type。补充:多个类似的设备可以匹配同一个驱动。也有些设备与驱动时一对一匹配的。

2024-03-29 14:02:01 1006

原创 malloc

在用户空间,进程调用malloc函数动态申请内存时,如果申请的内存大于128KB则使用mmap系统调用,否则使用brk系统调用。(128KB这个值可通过M_MMAP_THRESHOLD进行调节)。实际上,调用malloc会发生三种可能:操作系统为应为应用层提供了 mmap、brk 等系统调用来申请内存。但是这些系统调用在很多的时候,我们并不会直接使用。原因有以下两个:所以,现代编程语言的做法都是自己在应用层实现了一个内存分配器。其思想都和内核自己用的 SLAB 内存分配器类似。都是内存分配器预先向操作系统申

2024-03-27 20:35:00 660

原创 博客摘录「 Linux内存管理相关—基础知识篇(一)」2024年3月27日

slab是如何对伙伴系统进行改进和补充的?对伙伴系统的改进和补充。

2024-03-27 16:51:09 99

原创 Linux内核态信号量和用户态信号量

inux 内核信号量用户态信号量 详解 https://blog.csdn.net/weed_hz/article/details/8965733?Linux用户态的信号量 https://blog.csdn.net/zhang_shuai_2011/article/details/7653750。//把指定的信号量sem的值加1;POSIX信号量的引用头文件是<semaphore.h>,而SYSTEM V信号量的引用头文件是 <sys/sem.h>// 这是一个阻塞的函数,信号量减1。

2024-03-25 15:09:36 182

原创 linux内核五大子系统

Linux内核--五大子系统。

2024-03-17 21:25:22 337

原创 嵌入式linux与驱动开发面试题

https://zhuanlan.zhihu.com/p/676423106?utm_campaign=shareopn&utm_medium=social&utm_psn=1752605686738071552&utm_source=wechat_session&utm_id=0

2024-03-17 10:39:39 118

原创 Linux内核运行原理图

重要函数,一张完整的 Linux 内核运行原理图。

2024-03-13 20:09:24 162

原创 Linux内核网络协议栈

带待。

2024-03-13 09:59:44 69

原创 Linux USB驱动(一)

在USB系统中有两个硬件的概念:USB软件的架构:

2024-03-10 12:57:24 601

原创 Linux驱动开发

我们在学习linux驱动开发时,我们去看视频去看书,我们能够看到的基本上全是基本的"驱动模型"。我们能够学到的也只是设备驱动程序的结构以及开发的套路。然而驱动开发真正的难点不在于此,而是需要我们对处理器,外设,外设与处理器通讯的接口协议,linux内核,这些内容的了解。所以需要去阅读,理解实际的驱动程序代码。

2024-03-09 07:51:01 81

原创 Linux驱动开发相关API

需要注意的是,从Linux内核版本2.6.26开始,推荐使用device_create()和class_create()等函数来替代直接使用register_chrdev()和unregister_chrdev(),因为它们提供了更灵活和统一的设备管理方式。它会将驱动的信息注册到内核的设备驱动结构中,并与相应的平台设备匹配。platform_device_register 用于注册一个平台设备,根据提供的设备信息来动态创建相应的平台设备对象,并将其注册到内核中。

2024-03-08 21:03:25 854

原创 Linux内核

Linux 内核源代码包含如下目录。● arch :包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如 i386、arm、 arm64、powerpc、mips 等。Linux 内核目前已经支持 30 种左右的体系结构。在 arch 目录下,存放的是各个平台以及各个平台的芯片对 Linux 内核进程调度、内存管理、 中断等的支持,以及每个具体的 SoC 和电路板的板级支持代码。● block:块设备驱动程序 I/O 调度。

2024-03-06 22:50:43 972

原创 linux中断——基础篇

中断。

2024-02-28 21:51:30 103

原创 LINUX内存管理-学习总结

1.相关函数的理解及使用。

2024-02-27 22:10:03 115

原创 LINUX内存空间布局

不在需要用到《7.1.2 ZONE_HIGHMEM 高端内存》小节中介绍的高端内存那种动态映射方式。在程序执行前BSS段会被清零,所以未初始化德 全局变量和静态变量的初始值是0。在 64 位体系下的内核虚拟内存空间与物理内存的映射就变得非常简单,

2024-02-26 20:30:02 332

原创 内存管理——常用函数接口

根据内存空间分配方式的不同,可以将内存分为和。动态内存与静态内存是两种不同的分配内存的方式,那么它们在分配方式上存在什么样的区别呢?

2024-02-25 10:40:24 628

原创 Linux内存管理相关—基础知识篇(二)

对于每个进程而言有4GB的虚拟内存空间,一般来说3GB(0-3GB)用于用户空间,1GB(3-4GB)用于内核空间,其中内核空间这1GB是所有进程共用的(每个用户进程都有 0x00000000~0xbfffffff 范围的用户空间虚拟地址以及共用的 0xc0000000~0xffffffff 内核空间虚拟地址)。当然这一比例是可以通过内核配置而修改的,有3:1的,有1:3的,也有2:2的。

2024-02-24 18:06:50 399

原创 Linux内存管理相关—命令操作篇

PS:高端内存一般供用户态申请使用,如果高端内存被用完,则会到低端内存及线性内存区申请,使用高端内存的目的可能是可以减少内存碎片化,具体原因待进一步学习。Bounce: 0 kB //可反弹高端内存区域的页的内存量。Active: 95776 kB //当前正在使用的内存页的物理内存量。Unevictable: 0 kB //无法被从内存中删除的页的内存量,通常为锁定的内存。

2024-02-20 20:34:51 404

原创 linux面试题

以下链接汇总了一些linux相关的面试题,学习时需要有着重点的来学,有些内容一带而过了解一下就行,有些内容需要在linux上实操一下,而有些内容则需要以这个为引子单独开辟专题来学习。

2024-02-06 08:56:10 98

原创 SVN相关

1.工作中遇到问题,本地调试编译成功,上传至SVN后在拉取下来编译报错,报错信息为找不到某个.o文件。经定位,原因为windows系统下svn上传时会默认过滤掉.o类型的文件,而报错信息中多提到的.o文件不是我们代码编译产生的二十光模块厂家给的,在编译时需要使用。所以需要上传至SVN。

2024-01-31 08:56:53 88

原创 PCIE之DMA传输

待。

2024-01-30 21:45:06 148

原创 Linux内存管理相关—基础知识篇(一)

工作中遇到这样的问题,调用alloc_pages(GFP_KERNEL, 13),返回值为NULL,并且打印告警。使用cat /proc/buddyinfo 命令查看,最大为2的10次方,将13改为10,函数成功调用。

2024-01-29 22:17:05 560 3

原创 Linux驱动开发-实践篇

待更新。

2024-01-27 21:55:56 93

转载 Linux驱动开发-概念篇

【Linux驱动开发 - CSDN App】http://t.csdnimg.cn/UjZko。

2024-01-27 21:53:54 21

原创 常用通信协议

是一种将数据一个位一个地传输的方式。在串行通信中,数据通过单个信道传输,一个位接一个位地传输。例如,串行通信可以通过电缆或光纤将数据从一台计算机传输到另一台计算机。串行通信的优点是可以使用较少的信道传输大量数据,但是传输速度较慢。串行通信根据发送时源和接收时源是否保持一致,又分为同步通信和异步通信,其优点是只需要几条线就可以在系统之间交换信息。是一种同时传输多个位的方式。在并行通信中,多个位同时传输,通常使用多个信道进行传输。例如,计算机内部使用并行通信将数据从内存传输到处理器。

2024-01-23 22:36:31 410

原创 【Bootloader&uBoot】

下图给出了U-boot的Stage-1和Stage-2阶段在Flash和RAM中的分配。U-boot支持许多的处理器和开发板,主要是该软件有良好的架构,以ARM处理器的smdk2410开发板为例分析U-boot的启动流程,在其他处理器架构上,U-boot也执行类似的启动流程。通过Bootloader的代码初始化初始化处理器的各寄存器以及其他外部设备,建立存储器映射图以及初始化堆栈,为操作系统提供基本的运行环境。是U-boot整个程序的入口,该文件使用汇编语言编写,不同体系结构的代码是不同的;

2023-12-24 12:12:36 78

原创 关于内核移植

2、此后Linux要将自己的剩余部分全部加载到内存(如果有的话,视硬件平台的不同而不同),初始化所有设备,在内存中建立好所需的数据结构(有关进程、设备、内存等)。内核加载根设备并启动init守护进程,init守护进程会根据配置文件加载文件系统、配置网络、服务进程、终端等。1、一个不隶属于任何操作系统的加载程序将Linux部分内核调入内存,并将控制权交给内存中Linux内核的第一行代码。对于系统移植而言,Linux系统实际上由两个比较独立的部分组成:即内核部分和系统部分。

2023-11-28 10:34:37 32

原创 PCI和PCIE_No.2

IDSEL(初始化设备选择)引脚,想要配置某个设备时,通过这个引脚来选中他。不同的桥,选中IDSEL的方式可能不同,例如,使用不同的AD引脚来连接不同设备的IDSEL引脚,以达到选中不同的设备的效果。后面,CPU发出的地址就会被转换为PCI空间的地址,设备发现这个地址属于自己地址空间范围内的地址时就会回应CPU。对于PCI总线,FRAM信号为底时的第一个时钟期间,AD总线传输的是地址,在后续的时钟里,传输的是数据。a)扫描PCI设备,读取配置寄存器,获取设备种类以及设备所需要的空间。

2023-11-15 22:48:19 51

原创 PCI和PCIE_No.1

cpu发出地址,先到达内存控制器,内存控制器根据地址判断这个地址数据哪个设备,然后向该设备发出片选信号(cs)选中这个设备。在同一时间,只有一个片选信号有效。其中flash与GPIO都不是内存,但是使用的接口与内存一样,都是RAM-Like接口。只要是这种接口,就可以使用这种方法访问。在芯片手册中会有各种片上设备的地址范围。当CPU访问EMMC FLASH时,CPU发出的地址是属于CPU空间的地址,而EMMC控制器向EMMC FLASH发出的地址是属于EMMC控制器地址空间。两个地址空间是隔离的。

2023-11-14 22:37:25 63

原创 嵌入式基础知识汇总

在带有MMU(内存管理单元)的CPU中,程序运行一般使用的是虚拟地址,MMU会把虚拟地址朱焕伟物理地址,然后通过CPU管脚发出去,地址信号通过译码,选中指定的内存存储单元,再进行读写操作。总线作为一种工业标准,使得大家生产的设备在采用相同的总线接口,遵循相同的总线协议的情况下,都能够很方便的添加到计算机系统中与计算机进行通信。注意:寻址空间与操作系统实际的内存并不是一回事,例如,有8字节的寻址空间,可能只使用其中的4字节,其他地址是不可访问的。用来将总线的电子信号翻译成另一种总线的电子信号。

2023-11-13 22:03:25 44

空空如也

空空如也

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

TA关注的人

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