- 博客(318)
- 资源 (1)
- 收藏
- 关注
原创 汇编 -- ARM汇编之 .inst指令与udf指令使用
在ARM汇编编程中,有时需要使用一些标准汇编语言不支持的特殊指令,或需要在代码中插入断点或生成故意的异常以便进行调试和错误处理。.inst和udf指令在这些场景中非常有用。
2024-07-19 11:02:11
392
原创 Linux网络 -- TCP FIN包发送超时时间设置
在TCP连接中,当应用程序调用 或 函数关闭一个socket时,操作系统内核会发送一个FIN包以通知对端连接即将关闭。默认情况下,内核会等待所有未发送的数据发送完毕后再发送FIN包。然而,有时候我们希望在一定的时间内强制关闭连接,即使未发送的数据尚未发送完毕。这时候可以使用 选项来实现。 选项允许我们设置一个超时时间,当我们调用 或 函数时,内核会在这个超时时间内尝试发送所有未发送的数据和FIN包。如果在超时时间内未能完成发送,连接将被强制关闭。下面是使用 选项的具体步骤:引入必要的头文件:
2024-07-18 15:47:43
521
原创 Linux基础 -- 使用c++filt工具解析编译后的C++函数命名
c++filt是一个用于解码C++编译器生成的符号名称(即mangled names)到人类可读形式的命令行工具。以下是c++filt。
2024-07-18 12:17:57
397
原创 Linux基础 -- 使用readelf或gdb查看二进制的节与解析
本文档介绍了如何使用readelf -S命令查看 ELF 文件的节表(Section Headers),以及如何结合 ASLR(Address Space Layout Randomization)技术,理解启用和禁用 ASLR 时 ELF 文件的差异。
2024-07-17 10:46:57
328
原创 Linux基础 -- 运行安全之ASLR的作用与实现方式
ASLR 通过随机化进程的内存地址空间布局,有效地增加了攻击者利用已知漏洞进行攻击的难度,从而提升了系统的安全性。通过观察简单的 C 程序的运行结果,我们可以直观地看到 ASLR 对内存地址布局的影响。
2024-07-16 23:50:22
448
原创 Linux内核 -- 用户态coredump处理之do_coredump函数
本文档详细说明如何在 Linux 内核的函数中增加逻辑,将 core 信息保存到文件系统中。如果该文件夹不存在,则不保存;如果存在,则保存 core 文件便于查看。
2024-07-16 17:04:38
273
原创 数学基础 -- 求解微分问题之求切线方程法
使用切线方程方式求解微分问题通常涉及以下步骤:切线方程的形式为:y−f(a)=f′(a)(x−a)y - f(a) = f'(a) (x - a)y−f(a)=f′(a)(x−a)具体步骤如下:假设函数 f(x)=x2f(x) = x^2f(x)=x2,我们想求解它在 x=1x = 1x=1 处的切线方程。求导数:f′(x)=2xf'(x) = 2xf′(x)=2x在 x=1x = 1x=1 处,导数 f′(1)=2⋅1=2f'(1) = 2 \cdot 1 = 2f′(1)=2⋅1=2,即切线的斜率
2024-07-14 23:31:08
895
原创 数学基础 -- 函数的可导性
函数fxf(x)fx在xax = axa点的导数定义为极限f′alimh→0fah−fahf′ah→0limhfah−fa如果这个极限存在,则称fxf(x)fx在xax = axa处是可导的。
2024-07-10 23:50:22
592
原创 数学基础 -- 函数的连续性
函数的连续性是微积分中的一个基本概念。一个函数在某点连续,意味着在该点附近取的自变量值越靠近该点,函数值也会越接近该点的函数值。具体来说,如果函数 f(x)f(x)f(x) 在 x=cx = cx=c 处连续,需要满足以下三个条件:如果一个函数在区间上的每一个点都满足上述三个条件,则称该函数在该区间上是连续的。考虑一个简单的函数 f(x)=x2f(x) = x^2f(x)=x2,我们验证它在 x=2x = 2x=2 处的连续性:函数在 x=2x = 2x=2 处有定义:f(2)=22=4f(2) = 2
2024-07-09 23:52:00
778
原创 Linux内核 -- DMA控制器之dmaengine框架的注册与使用流程
Linux内核的dmaengine框架是一个用于管理DMA(Direct Memory Access)操作的通用框架。它抽象了不同DMA控制器的实现,使得上层代码可以方便地进行DMA传输。
2024-07-09 21:35:15
277
原创 Linux内核 -- 内存管理之scatterlist结构使用
结构在 Linux 内核中主要用于 DMA(直接内存访问)操作中的内存管理。它允许将不连续的物理内存片段表示为一个逻辑上的连续块,从而使 DMA 操作可以高效地处理这些不连续的内存片段。
2024-07-09 21:26:33
634
原创 RTOS系统 -- 调试大法之FreeRTOS在M4上实现coredump功能
可以在应用程序代码中自行实现异常处理和coredump功能。通过在FreeRTOS任务中定期检查系统状态,捕获异常并记录相关信息。通过自定义异常处理函数、使用第三方工具以及在应用程序中实现异常捕获和记录,可以在FreeRTOS系统中实现异常打印和coredump功能。这些方法能够有效帮助开发者定位和解决系统问题,提升系统的稳定性和可靠性。
2024-07-09 21:01:46
181
原创 Linux内核 -- 虚拟化之virtqueue结构
Virtqueue是Linux Kernel中用于实现Virtio设备的一个关键数据结构。Virtio是一种虚拟I/O设备标准,旨在简化虚拟化环境中虚拟设备与虚拟机之间的通信。Virtqueue则是实现这种通信的核心机制。
2024-07-09 20:53:21
565
原创 RTOS系统 -- FreeRTOS之任务调度
FreeRTOS是一种轻量级的实时操作系统,被广泛应用于嵌入式系统中。它提供了多任务管理功能,包括任务创建、任务调度和任务切换。FreeRTOS的调度器根据任务的优先级和状态自动调度任务,确保系统资源的有效利用和实时性。在M4处理器上,FreeRTOS能够实现任务间的自动调度。调度器采用基于优先级的抢占式调度算法,确保系统总是运行最高优先级且处于就绪状态的任务。如果有多个任务具有相同的优先级,调度器会采用时间片轮转的方法在这些任务之间切换。
2024-07-09 17:06:33
187
原创 数学基础 -- 共轭表达式
在数学中,共轭表达式指的是一种特殊的代数表达式,通常用于消去分母中的根号或简化复杂的代数表达式。共轭表达式最常用于含有平方根的分数中,通过与分母的共轭进行乘法操作,能够有效地将分母中的根号消去。具体来说,若有一个包含平方根的代数表达式abc,其共轭表达式为a−bc。通过将表达式与其共轭相乘,可以消去其中的平方根。
2024-07-09 00:15:10
742
原创 数学基础 -- 洛必达法则
洛必达法则(L’Hôpital’s Rule)是微积分中的一个重要定理,用于求解某些未定形式极限的问题。其基本思想是通过求导来简化极限计算。00和∞∞。
2024-07-09 00:08:23
1213
原创 RTOS系统 -- FreeRTOS之内存分配pvPortMalloc使用及命名规范
这个部分表示这个函数是与特定移植层(port layer)相关的。FreeRTOS 是一个可移植的 RTOS,它可以运行在不同的硬件平台上,而移植层负责处理与硬件相关的操作。这个命名遵循了 FreeRTOS 的命名惯例。FreeRTOS 的命名规范遵循一定的前缀规则,以帮助开发者快速了解函数的返回类型和用途。这个命名方式使得函数的用途和返回类型一目了然,有助于提高代码的可读性和可维护性。作为前缀,表明这个函数是在移植层中定义的,或者是与移植层相关的。它清楚地表明了这个函数的功能是分配内存。
2024-07-08 12:06:11
349
原创 数学基础 -- 三角学
三角学(Trigonometry)是数学的一个分支,主要研究三角形的边长与角度之间的关系。三角学在几何学、物理学、工程学等多个领域中有广泛的应用。
2024-07-07 23:31:18
816
原创 数学基础 -- 复合函数
函数复合是数学中的一个重要概念,指的是将一个函数的输出作为另一个函数的输入。具体来说,给定两个函数f和g,函数f和g的复合记作fgx))或f∘gx。在复合函数中,首先应用函数g,然后将其结果作为函数f的输入。以下是一个具体的例子:fx2x3gxx2则复合函数fgx))fgx))fx22x232x23同样地,复合函数gfx))gfx))g2x32x324x212x9。
2024-07-07 22:39:37
631
原创 数学基础 -- 反函数
虽然yx2y = x^2yx2定义域为非负数部分0∞0∞在此定义域内,yx2y = x^2yx2是单调递增函数,因此有反函数。反函数为f−1yyf−1yy。定义域为非正数部分−∞0−∞0在此定义域内,yx2y = x^2yx2是单调递减函数,因此有反函数。反函数为f−1y−yf−1y−y。在整个实数域上,函数yx2y = x^2yx2没有反函数,但在限定的定义域上,它可以有反函数。
2024-07-07 00:07:46
904
原创 RTOS系统 -- ARM Cortex-M4 RPMSG之通道初始化函数
在ARM Cortex-M4处理器上使用的RTOS(实时操作系统)中,rpmsg_lite是一个轻量级的远程处理消息传递框架,通常用于多核处理器或多核系统中不同处理器之间的通信。本文档将介绍和两个函数的作用及使用场景。
2024-07-06 16:02:22
449
原创 Linux内核 -- 虚拟化之virtio驱动程序实现
Linux kernel 中的 virtio_driver 是为 Virtio 设备设计的驱动程序接口。Virtio 是一种虚拟化标准,它允许虚拟机和物理主机之间高效地传输数据。Virtio 设备通常用于虚拟化环境,如 KVM 和 QEMU。Virtio 设备通过一个标准化的接口提供虚拟化功能,减少了虚拟设备的开发和维护复杂性。
2024-07-06 13:11:38
802
原创 Linux内核 -- 多核通信之RPMSG驱动使用
在Linux Kernel中,RPMsg(Remote Processor Messaging)是一种用于不同处理器之间通信的机制,通常用于多核系统中的通信,如主处理器和协处理器之间的消息传递。了解RPMsg驱动的注册流程以及其高级用法和注意事项,对于开发和维护复杂的多处理器系统至关重要。以下是详细的描述:定义RPMsg设备和驱动:rpmsg_driver结构体:注册RPMsg驱动:RPMsg设备匹配和绑定:动态创建RPMsg设备:自定义消息格式:多实例支持:内存管理:同步和并发处理:错误
2024-07-05 19:31:07
961
原创 数学基础 -- 三明治定理(夹逼定理)
三明治定理(Sandwich Theorem)又称夹逼定理或夹逼准则,是数学分析中的一个重要定理。它描述了当三个函数在某一区间上满足特定关系时,中间函数的极限可以通过两个外侧函数的极限确定。这个定理广泛应用于极限和连续性的证明中。具体来说,设a是一个实数或无穷大,假设在a的某个去心邻域上,三个函数fxgx和hxfx≤gx≤hx如果limx→afxlimx→ahxLx→alimgxL。
2024-07-03 00:39:41
985
原创 Linux内核 -- 多线程之完成量completion的使用
Linux内核中的completion机制是一个强大的工具,用于线程间的同步。通过合理使用它,可以有效地控制线程的执行顺序,确保程序的正确性。在使用时,应注意初始化、超时、中断安全等问题,以避免潜在的bug。
2024-07-02 21:55:55
453
原创 Linux内核 -- 多线程之kthread的使用
线程函数是内核线程运行时执行的函数。它通常是一个无限循环,直到某种条件使其退出。while (!ssleep(5);return 0;
2024-07-02 21:27:17
225
原创 汇编 -- arm架构的ldmia与stmia指令
在ARM架构中,数据传输指令被广泛用于从内存读取数据和向内存存储数据。ldmia(Load Multiple Increment After)和stmia(Store Multiple Increment After)是两条用于多寄存器传输的指令,可以一次性读取或写入多个寄存器,常用于堆栈操作和上下文切换。
2024-07-01 14:25:37
440
原创 Linux内核 -- 物理内存页分页规划之arm v7实现
在 ARMv7 架构下,页表的地址规划是非常重要的,它直接影响到内存的管理和访问效率。为了更好地理解地址规划的原理,以下是一些关键点和示例。
2024-06-30 00:09:37
331
原创 Linux内核 -- Clocksource的注册与使用
0x10000000// 假设计数器寄存器基地址1000000// 计数器频率,单位Hz// 读取计数器当前值.mult = 0, // 将在注册时计算.shift = 0, // 将在注册时计算。
2024-06-28 14:52:46
431
原创 Linux内核 -- ARMv7 与 ARMv8 中的 asmlinkage 作用及使用
asmlinkage在 ARMv7 和 ARMv8 中用于指定参数通过栈传递,适用于内核与汇编代码交互的场景。使用时需要注意性能问题和调用约定的一致性。通过汇编代码,我们可以清晰地看到参数是如何通过栈传递和获取的。
2024-06-28 14:03:21
485
原创 CPU架构 -- ARMv7与ARMv8协处理器比较
ARM v8在协处理器设计上做了许多改进,使得系统寄存器访问更为简洁和高效。通过合并浮点和SIMD单元以及优化系统控制寄存器,ARM v8不仅提高了性能,还简化了编程模型,适应了64位计算的需求。这些改进为开发者提供了更强大的工具和更高效的工作流程。
2024-06-28 11:52:12
1156
原创 Linux内核 -- ARM汇编获取CPU ID
通过上述汇编代码示例,展示了如何在ARMv8和ARMv7架构下读取当前运行的CPU核号。这些代码可以嵌入到您的应用程序中,以便获取和使用当前的CPU核号。
2024-06-28 11:31:45
352
原创 Linux内核 -- ARM指定CPU运行逻辑之smp_call_function_single函数
函数在 Linux 内核中用于在特定 CPU 上执行一个函数。该函数主要用于在多处理器(SMP,Symmetric Multiprocessing)环境下,协调多个 CPU 之间的操作。函数原型如下:cpu:目标 CPU 的 ID,表示在该 CPU 上执行函数。func:要执行的函数,该函数的原型为 。info:传递给函数 的参数。wait:是否等待函数执行完成。若为 1,则调用线程会等待直到 执行完成;若为 0,则调用线程不会等待。示例代码:3. 实现原理 的实现涉及到内核的跨 CP
2024-06-28 10:59:33
794
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人