自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【问题记录】进程调度导致 UDP 丢包问题分析

接收端处理时间过长(数据接收线程调度不及时)发送的数据包过大发送的数据包频率过快(网络拥塞)

2024-09-26 09:03:37 829 1

原创 Android Sepolicy 介绍及配置

SeAndroid 指的是安卓系统中的安全增强功能,全称为 Security-Enhanced Android。它是基于SELinux(Security-Enhanced Linux)的安全机制,在安卓系统中提供了更加细粒度的安全控制和权限管理。SeAndroid 的作用包括但不限于以下几个方面:强化安全性:SeAndroid通过实施强制访问控制(MAC)策略,限制了应用程序和进程对系统资源(如文件、设备、网络等)的访问权限。这有助于防止恶意应用程序获取系统敏感信息或对系统进行破坏。

2024-03-11 15:33:07 1409

原创 【内核机制】kref 引用计数

kref 是一个引用计数器,它在使用时通常会嵌套在其它结构体中,用于记录所嵌套结构体的引用计数,并在计数清零时调用相应的 release 函数。简而言之,kref 的创建主要是为了跟踪复杂情况下的结构引用销毁情况。单从内核源码实现来说,kref 的设计是非常简单的,其目的是为了能灵活地运用在各种结构的生命周期管理中。

2024-02-23 14:13:00 494

原创 【内核机制】pstore 使用

pstore最初是用于系统发生 oops 或 panic 时,自动保存内核 log buffer 中的日志。不过在当前内核版本中,其已经支持了更多的功能,如保存 console 日志、ftrace 消息和用户空间日志。同时,它还支持将这些消息保存在不同的存储设备中,如内存、块设备或 mtd 设备。

2024-02-23 13:53:12 1006

原创 【PCI】基地址寄存器(BAR)

基地址寄存器(BAR)在配置空间(Configuration Space)中的位置如下图所示:其中 Type0 Header 最多有 6 个 BAR,而 Type1 Header 最多有两个 BAR。这就意味着,对于 Endpoint 来说,最多可以拥有 6 个不同的地址空间。但是实际应用中基本上不会用到 6 个,通常 1~3 个 BAR 比较常见。主要注意的是,如果某个设备的 BAR 没有被全部使用,则对应的 BAR 应被硬件全被设置为 0,并且告知软件这些 BAR 是不可以操作的。

2024-02-20 15:37:03 1174

原创 【PCI】BDF&配置空间、PCIe Memory 、IO 地址空间

系统在启动过程中会枚举所有的pcie设备,当这些设备加载完成之后,软件上是根据什么信息来找到其中的某一设备的呢?就是BDF,即 Bus number、Devicesnumber、Function number。如下图中 Bus number 为 01,Devicesnumber 为 00,Function number 为 0。每一个 PCIe 设备可以只有一个功能(Function),即 Fun0。也可以拥有最多 8 个功能,即多功能设备(Multi-Fun)。

2024-02-20 10:39:11 971

原创 C#开发上位机绘制光谱图

1.随笔 想了很久,准备开始写博客。一方面是想着提高自己的写作水平,结果写着写着发现,自己最好的写作能力在当年高考完之后,就已经消失不见了;另一方面是为了记录自己做过的一些项目经历,算是留存备份,如有能帮助到你的,也算是冬天中的一抹阳光罢。下面就进入正题了。 由于项目需要开发一款上位机来将下位机传上来的光谱数据绘制成光谱图,特编写了这个光谱图绘制软件。下位机会定时上传一组数据到上位机,每一组数...

2024-02-19 16:22:33 3240 4

原创 【PCI】移除 & 扫描 EP

【代码】【PCI】移除 & 扫描 EP。

2024-02-19 16:17:33 448

原创 【PCI】lspci & setpci 工具编译及使用

以上面的 02:01.0 为例,总线域为0000(lspci默认省略总线域0000,可以加参数-D显示),bus总线号为02,槽位号为01,功能号为0,对应的是桥片下的slot,并非具体的设备。以上面的 04:00.0 为例,总线域为0000(lspci默认省略总线域0000,可以加参数-D显示),bus总线号为04,槽位号为00,功能号为0,对应的是具体的设备,因为槽位号为00。查看bus为 06:00.0 对应的3556的对应8796对应port口的配置空间。2.2 执行 make。

2024-02-19 16:12:10 1359

原创 【PCI】kernel pci 常用接口函数

PCI 有 3 种独立地址空间:PCI/IO 空间、PCI 内存地址空间和 PCI 配置空间。

2024-02-19 15:55:57 421

原创 【PCI】设备的枚举

至此,PCI 总线的枚举过程执行完毕,经历了上述这些函数,我们已经得到了 PCI总线下的所有设备的信息,并将它们注册为了 pci_dev 结构体,这时 pci 总线上的设备信息已经准备完毕,现在就是等待后续将要注册的 PCI 驱动与他们进行匹配。梳理了整个过程之后,我们可以了解到,BIOS的枚举:初始化所有PCI设备的配置空间;系统的枚举:依据 BIOS枚举后的配置空间信息生成 pci_dev 设备结构体。

2024-02-19 15:44:40 1112

原创 【PCI】 配置空间访问

以上三个函数都是位于 pci_arch_init()函数中,该函数的启动等级为3,此函数就是设置整个PCI总线设备配置空间的读写方法。pci_probe = 0xf(默认值)raw_pci_ops = 空raw_pci_ext_ops = 空即在 0~256 字节大小配置空间内采用I/O访问,大于256字节则才有内存空间访问。

2024-02-19 14:57:43 1711

原创 【PCI】初始化

系统对于PCI的初始化大体分为4个阶段:1.BIOS 对PCI设备进行初次枚举:在系统启动时,BIOS 会扫描系统中的PCI总线,识别和枚举连接在总线上的所有PCI设备,并为它们分配资源(如IO端口、内存地址等)。2.PCI设备系统枚举的前期准备:在操作系统启动后,系统会进行更深入的PCI设备枚举工作。这个阶段会包括文件系统相关目录的建立(如/sys/bus/pci/devices/)、访问方法的初始化等准备工作。3.PCI设备的系统阶段枚举:在系统准备就绪后,会对PCI设备进行系统级别的枚举。

2024-02-19 14:30:07 1585

原创 【问题记录】如何打包两个dtb文件

系列文章目录【文件打包】如何打包两个dtb文件文章目录系列文章目录前言一、熟悉打包流程1. 查看编译内核信息,找到dtb信息2. 搜索关键字,找到打包脚本的代码3. 找到打包的命令4. 手动打包测试5. resource_tool 打包工具二、修改编译脚本和打包工具1. 修改顶层编译脚本2. 修改脚本mkimg3. 修改打包工具源码三、将不同的dtb文件传递给内核1. 获取HWID2. 区分dtb文件前言在项目开发过程中,可能会遇到多个项目使用同一个源码仓库,并且代码是高度复用的,如果在不同的项

2024-02-18 17:02:23 1248

原创 【调试工具】iperf 工具的使用

文章目录简介一、iperf 主要测试什么二、iperf 的主要参数说明1. 公共使用2. 服务端3. 客户端二、iperf 测试示例1. 吞吐量测试2. 稳定性测试3. 可靠性测试总结简介iperf 是一个基于 Client/Server 的网络性能测试工具,可以测试 TCP、UDP 和 SCTP 带宽质量,能够提供网络吞吐量信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息,帮助我们测试网络性能,定位网络瓶颈,其好处是纯粹的发包和接收,不会被硬盘、Flash的等读写速度影响测试结果。一、

2024-02-18 17:01:54 5549

原创 【调试工具】coredump 使用示例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代.

2024-02-18 17:01:18 4878 1

原创 【调试工具】pstore 工具配置及使用

pstore 最初是用于系统发生 oops 或 panic 时,自动保存内核 log buffer 中的日志。不过在当前内核版本中,其已经支持了更多的功能,如保存 console 日志、ftrace 消息和用户空间日志。同时,它还支持将这些消息保存在不同的存储设备中,如内存、块设备或 mtd 设备。

2024-02-18 17:01:00 1529

原创 【调试工具】pidstat 编译及使用

top 等方式能查看到整个系统的状态,但对于单个进程的状态并不是非常的直观,而 pidstat 命令可以更方便的获取到各进程的状态。

2024-02-18 17:00:46 690

原创 【问题记录】kmemleak 定位内存泄露

在某些复杂的项目中,如果存在内存泄露问题,而又无法通过常规的命令工具去定位问题,若通过代码去逐步排查也很难去排查出来,通过kmemleak工具就可以很好的帮我们定位出来内存泄露的具体代码处,进而缩小问题的范围,向上面的示例中,定位出来是 tty_open 函数内申请的内存,那对应的应该想到是不是在 tty_close 或者对应的退出函数中该段内存没有去释放掉,可以通过添加打印来逐步排查。

2024-02-18 17:00:30 1042

原创 【调试工具】taskset 设置处理器的亲和度

在项目开发过程中,某些cpu的使用率很高,而有些使用率较低,我们可以尝试使用设置cpu的亲和度来调整不同cpu上的task。

2024-02-18 17:00:13 1132

原创 【调试工具】addr2line 定位内核非法地址

addrline 工具并不能直接帮助解决问题,但是对于去排查出问题点还是很有帮助的。关于上面奇怪的地址:dead0000000000f0 在内核中出现,大概率与链表有关。具有原因是:链表第一个节点被删除了,里面next和prev都复制dead了。然而代码仍访问此被删除节点,于是非法地址了。

2024-02-18 16:59:59 730

原创 【调试工具】perf 定位cpu占用100%

perf 工具是非常强大的,能够在项目开发过程中来定位各种系统问题,来达到对性能优化。

2024-02-18 16:59:38 911

原创 【问题记录】内存屏障及实例分析

编译器和处理器为了提高效率,可能对读和写重新排序,像上面的就可能会出现,在给a中赋值之前就在b中存放新值,这样就使问题变得复杂化了。如果是下面这种具有依赖关系的,就不会发生这种问题。为了确保顺序要求,内核提供了一些接口来保证指令的执行顺序,这些顺序的指令称为屏障。实际上内存屏障问题的出现在非多线程的项目中并不多见,但一但遇见了也是很难排查的一个问题,下面将分享一个本人遇到的一个问题。

2024-02-18 16:58:51 844

空空如也

空空如也

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

TA关注的人

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