- 博客(21)
- 收藏
- 关注
原创 ARM64架构启动流程
ARM64 的启动流程是一个分层次、多阶段协作的过程,涉及从硬件初始化到操作系统加载的多个环节。理解其核心阶段(BootROM → Bootloader → Kernel)和权限切换(EL3 → EL1)是进行底层开发或系统移植的关键。实际应用中需结合具体芯片手册和调试工具,确保各阶段代码的地址、权限和安全策略正确配置。ARM64 架构的启动流程是一个多阶段、分层次的过程,涉及硬件初始化、权限切换、代码加载和操作系统启动。或厂商定义的地址)开始执行 BootROM 代码。:执行完整启动流程。
2025-04-23 09:15:34
955
原创 嵌入式硬件平台修改启动地址
修改启动地址的具体方法取决于目标硬件平台和启动阶段(如 BootROM、Bootloader 或操作系统)。某些芯片(如 STM32)通过引脚电平选择启动模式(从 Flash、RAM 或系统存储器启动)。仅在某些可擦写 BootROM 的芯片上可行(如部分 ESP32),需使用厂商专用工具。使用专用工具(如 STM32CubeProgrammer)修改芯片的启动地址寄存器。:在 BootROM 执行后,通过代码跳转到自定义地址(需汇编/C 开发能力)。修改环境变量中的内核加载地址和启动命令。
2025-04-23 09:10:09
462
原创 Linux内核崩溃定位及解决方法
在 Linux 系统中,内核崩溃(Kernel Panic/Oops)通常由硬件故障、驱动错误或内核代码缺陷引发。通过结合日志分析、崩溃转储调试和硬件检测,可以高效定位内核崩溃根源。对于关键系统,建议定期演练崩溃恢复流程并保持内核更新。
2025-04-09 08:19:17
1994
原创 Linux系统如何定位并且解决内存泄露
通过工具链(Valgrind、ASan)和代码规范(RAII、智能指针)的结合,可以在 Linux 系统中高效定位和解决内存泄漏问题。Valgrind 是 Linux 下最经典的内存调试工具,可检测未释放内存、非法访问等问题。ASan 是 Google 开发的内存错误检测工具,性能损耗比 Valgrind 更低。ASan 会在检测到错误时直接输出堆栈信息。是 GNU C 库自带的工具,用于跟踪。明确指出了泄漏位置在。
2025-04-09 08:13:00
1957
原创 显式初始化
为变量、对象或数据结构赋予初始值的行为。与隐式初始化(由编译器或运行环境自动赋予默认值)不同,显式初始化通过代码直接指定初始状态,确保程序的行为更可控、更安全。通过显式初始化,开发者可以更精准地控制程序状态,减少因未初始化或默认值导致的潜在错误,是编写健壮代码的重要实践。显式初始化是指在编程中,开发者。
2025-04-03 09:00:11
247
原创 DMA一致性问题
DMA一致性问题需结合软硬件手段解决:通过显式缓存管理、配置内存属性、利用IOMMU及适应架构特性,确保数据在设备与CPU间正确同步。开发时需深入理解目标平台的缓存机制和DMA API,以优化性能和可靠性。DMA(直接内存访问)传输的一致性问题源于CPU缓存与主存之间的数据不一致,可能导致设备与处理器访问的数据版本不同。
2025-04-01 20:08:02
481
原创 Linux 下 DMA 使用的详细指南
一、DMA 使用基础流程流式 DMA 映射(Streaming DMA)配置 DMA 传输二、关键 API 详解映射类型选择| 类型 | 适用场景 | 生命周期 | 缓存管理 ||-----------------|----------------------------|--------------|---------------|| 一致性映射 | 控制寄存器、长期共享数据 | 长
2025-03-31 08:45:17
638
原创 DMA(直接内存访问)原理及使用方法详解
一、DMA基本原理二、Linux DMA API使用方法:长期存在的映射,CPU和设备可同时访问:短期映射,需要显式同步缓存三、高级DMA技术四、缓存一致性处理。
2025-03-31 08:42:37
5335
原创 带Cache内存的别名访问问题
情况2:特殊Cache配置(VIVT Cache)尽量避免对同一物理地址创建多个可缓存虚拟映射。情况1:普通Cache配置(通常情况)这种情况在带Cache的系统中会导致。带Cache内存的别名访问问题。,可能产生不符合预期的结果。方法1:使用非缓存内存。方法2:维护缓存一致性。方法4:内核API处理。方法3:使用共享映射。
2025-03-31 08:10:00
194
原创 kzalloc与缓存(Cache)的结合使用
通过合理使用内核的缓存机制,可以显著提高频繁内存分配/释放操作的性能,同时保持。机制来实现带缓存的内存分配。本身不直接提供缓存功能,但可以通过内核的。缓存创建有开销,只对高频分配的对象有意义。确保缓存名称唯一(建议加模块前缀)注意内存泄漏,所有分配都应正确释放。在 Linux 内核中,在多核系统上考虑使用。
2025-03-31 08:00:38
345
原创 kzalloc的定义以及用法
是内核开发中最常用的内存分配函数之一,特别适合需要初始化内存为零的场景。的一个变体,它在分配内存后会将其内容初始化为零(相当于。是 Linux 内核中用于内存分配的一个函数,它在。相同,最大约几MB(具体取决于架构和配置):在中断上下文等不能睡眠的地方使用。:对于大内存分配,考虑使用。
2025-03-31 07:49:15
329
原创 Linux下Slab分配器
通过预分配和复用相同大小的内存块来优化频繁分配/释放的场景(如。,是 Linux 内核高效内存管理的基础设施之一。Slab 分配器是 Linux 内核中的一种。,减少内存碎片并提升性能。Slab 的核心价值在于。
2025-03-29 09:43:37
682
原创 中断上下文Tasklet
但它是一种特殊的“软中断(Softirq)”机制,与硬件中断上下文(Hard IRQ)有区别。如果需要更复杂的操作或允许睡眠,应改用。(属于进程上下文)。
2025-03-29 09:37:09
282
原创 自旋锁和互斥锁的区别?
自旋锁(Spinlock)和互斥锁(Mutex)是两种完全不同的锁机制,主要区别体现在。总结:中断上下文只能用自旋锁,可能睡眠的代码必须用互斥锁!
2025-03-29 09:25:09
406
原创 中断里可以用什么锁
在中断上下文中,由于对并发控制和睡眠的限制,需要使用特殊的锁机制。若中断和进程共享数据,且进程已持有自旋锁,此时中断到来并尝试获取同一锁,会导致死锁。:中断上下文(如中断处理函数、软中断、tasklet等)。// 同时保存IRQ状态(推荐在中断上下文使用)在加锁时禁用本地中断,避免这种竞争。
2025-03-29 09:11:02
437
原创 ARM下用scp指令拷贝远程文件到本地
远程目标机的IP是192.168.1.10,ssh用户名是ftfscp -r [email protected]:/home/ftf/test.mp4 ./
2023-01-10 10:36:12
305
1
原创 Yocto的weston如何取消上面的标题栏?
修改/etc/xdg/weston/weston.ini[shell]panel-position=none
2023-01-10 09:55:49
348
原创 2020-09-24
ffmpeg实现udp单播推送视频流1、编译ffmpeg4.2.2编译环境Ubuntu16.04#sudo ./configure --prefix=/ffmpeg_x86 --disable-x86asm#make#make install2、推流#sudo /ffmpeg_x86/bin/ffmpeg -re -i test. mp4 -vcodec copy-f mpegts udp://192.168.10.9:50043、用vlc播放测试在vlc中输入流地址udp://@19
2020-09-24 15:43:01
112
原创 2020-04-17
ARM开发板通过NFS加载内核出现ERROR:Cannot umount解决方法:在主机的/etc/hosts下面加入ARM开发板IP nfs目录比如192.168.0.21 /nfsroot/
2020-04-17 11:14:32
127
原创 2020-04-17
让ubuntu16.04系统支持组播输入命令sudo route add -net 224.0.0.0 netmask 224.0.0.0 ens33
2020-04-17 09:34:55
129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人