m805_893x memory layout

本文详细分析了基于M805_893x EVM板的Linux内核启动过程中的内存布局,包括物理地址、虚拟地址、内存大小及用途等关键信息。通过官方规格和日志信息,揭示了系统内存如何被划分为不同部分,如ATAG、Kernel Image、ramdisk、UMP、FBWMIXER等,并提供了详细的内存分配和使用情况。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

The bootloader passes memory layout profile to kernel via tag pmap.


The address/size of TAG/Kernel/Ramdisk are decided by macros in

lk/target/m805_893x_evm/rule.mk:

BASE_ADDR := 0x80000000

MEMBASE := 0x82000000

MEMSIZE := 0x01000000   //16MB

TAGS_ADDR := BASE_ADDR+0x00000100

KERNEL_ADDR := BASE_ADDR+0x00008000

RAMDISK_ADDR := BASE_ADDR+0x01000000


The log shows:

name = pmem, base = 0x82000000, size = 0x0
name = ump_reserved, base = 0x82000000, size = 0x1b00000
name = fb_wmixer, base = 0x83b00000, size = 0x400000
name = ram_console, base = 0x83f00000, size = 0x100000
name = secured_inbuff, base = 0x84000000, size = 0x0
name = overlay, base = 0x84000000, size = 0x1800000
name = overlay1, base = 0x85800000, size = 0x1000000
name = overlay_rot, base = 0x86800000, size = 0x400000
name = video, base = 0x86c00000, size = 0x3e00000
name = viqe, base = 0x8aa00000, size = 0x1500000
name = ext_camera, base = 0x8bf00000, size = 0x0
name = fb_video, base = 0x8bf00000, size = 0x2000000
name = fb_scale, base = 0x8df00000, size = 0x0
name = fb_scale0, base = 0x8df00000, size = 0x0
name = fb_scale1, base = 0x8df00000, size = 0x0
name = fb_g2d0, base = 0x8df00000, size = 0x0
name = fb_g2d1, base = 0x8df00000, size = 0x0
name = video_dual, base = 0x8df00000, size = 0x0
name = jpeg_header, base = 0x8aa00000, size = 0x100000
name = jpeg_raw, base = 0x8b000000, size = 0xf00000
name = jpeg_stream, base = 0x8ab00000, size = 0x500000
name = nand_mem, base = 0x8df00000, size = 0x100000
name = jpg_enc_dxb, base = 0x8e000000, size = 0x300000
name = jpg_raw_dxb, base = 0x8e300000, size = 0x300000
name = video_ext, base = 0x8e600000, size = 0x0
name = total, base = 0x82000000, size = 0xc600000
booting linux @ 0x80008000, ramdisk @ 0x81000000 (1784625)



According to the log info, together with the official spec,  we can get the system memory layout like this:

Physical/Virtual address
description
size
comment
80000100 - 80007FFF / c0000100 - c0007FFFATAG32KB 
80008000 -                     / c0008000 -Kernel Imageabout 4-5 MB 
81000000 -                     / c1000000 -ramdisk (initramfs)about 600KB 
80000000 - 82000000 / c0000000 - c20000000Kernel / User32MB 
    
82000000 - 83b00000 / c2000000 - c3b00000UMP27MBcontiguous physical memory
for dedicated UMP
83b00000 - 83f00000  / c3b00000 - c3f00000FB WMIXER4MB 
83f00000 - 84000000  / c3f00000 - c4000000RAM console1MB 
84000000 - 86c00000 / c4000000 - c6c00000Overlay44MB 
86c00000 - 8aa00000 / c6c00000 - caa00000Video62MB 
8aa00000 - 8bf00000  / caa00000 - cbf00000VIQE / JPEC decoder21MB 
8bf00000 - 8df00000   / cbf00000 - cdf00000FB_Video32MBFrame buffer
8df00000 - 8e000000  / cdf00000 -ce000000NAND1MB 
8e000000 - 8e600000 / ce000000 - ce600000JPEG encoder/capture6MB 
    
8e600000 - c0000000 / ce600000 - FFFFFFFFKernel / User794MBMax mali heap size is 750MB;
Max UMP heap size is 64MB
    
      
    
NOTE: __virt_to_phys(x)    (x) - PAGE_OFFSET + PHYS_OFFSET

             __phys_to_virt(x)    (x) - PHYS_OFFSET + PAGE_OFFSET

             PAGE_OFFSET = 0xC0000000;

             PHYS_OFFSET = 0x80000000;


As we can see,  the virtual address space, from 0xc2000000 t0 0xce600000 (198MB), is reserved for specific 8935 hardware blocks, like VIQE, FB, and so forth.

The virtual address spaces, from 0xc0000000 t0 0xc2000000 and from 0xce600000 - 0xFFFFFFFF (total 826MB) is used by ATAG / Kimage / ramdisk /kernel.

NOTE: 198 + 826 = 1024MB (on-board DDR3)


The details of kernel memory space looks like below:

[    0.000000] PAGE_OFFSET = 0xc0000000                                                
[    0.000000] TASK_SIZE = 0xbf000000
[    0.000000] PHYS_OFFSET = 0x80000000
[    0.000000] VMALLOC_START = 0xe0800000
[    0.000000] VMALLOC_OFFSET = 0x800000
[    0.000000] VMALLOC_END = 0xf0000000
[    0.000000] MODULES_VADDR = 0xbf000000
[    0.000000] MODULES_END = 0xbfe00000

[    0.000000]     vector  :        0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  :       0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     DMA     :        0xff600000 - 0xffe00000   (   8 MB)
[    0.000000]     vmalloc :      0xe0800000 - 0xf0000000   ( 248 MB)
[    0.000000]     lowmem  :   0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   :     0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules :   0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text :          0xc0008000 - 0xc0595f80   (5688 kB)         //Start of the kernel image
[    0.000000]       .init :           0xc0596000 - 0xc05c36c0   ( 182 kB)
[    0.000000]       .data :         0xc05c4000 - 0xc0786b60   (1803 kB)
[    0.000000]        .bss :         0xc0786b84 - 0xc08fa5a0   (1487 kB)

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

内容概要:本文系统研究了基于豪猪优化算法(CPO)的多无人机协同集群在三维空间中的避障路径规划问题,聚焦于实现以最低成本为目标的航迹优化,综合考虑路径长度、飞行高度、威胁规避及转弯角度等多个关键因素。通过构建精细化的三维环境模型与多无人机协同机制,采用Matlab平台实现CPO算法的仿真与验证,充分展示了该算法在复杂动态障碍环境下的高效搜索能力与全局优化性能。研究不仅涵盖了路径规划的数学建模与目标函数设计,还深入探讨了算法的收敛特性与鲁棒性,为智能群体系统在实际场景中的应用提供了理论依据与技术支撑。; 适合人群:具备一定编程基础和优化算法背景,从事无人机系统控制、智能路径规划、群体协同、人工智能与自动化等相关领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于多无人机协同执行侦察、灾害监测、应急救援、区域巡检等复杂任务中的自主路径规划;②为智能优化算法在三维动态环境下的路径决策问题提供可复现的技术范例;③支持研究人员对CPO算法与其他主流群智能算法(如PSO、GWO、WOA等)进行性能对比与改进研究,推动路径规划技术的发展。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解目标函数的多维度建模方式与CPO算法的迭代优化流程,可通过调整环境参数与约束条件进行仿真实验,对比不同算法在相同场景下的路径质量与收敛速度,从而深入掌握其优势与适用边界。
内容概要:本文围绕电动汽车参与电力系统运行备用的能力评估展开深入研究,利用Matlab代码实现对电动汽车集群提供运行备用服务的建模与仿真分析。研究重点在于量化电动汽车作为分布式灵活资源参与电网辅助服务的潜力,通过构建精细化的数学模型,分析其可调功率容量、响应速度、时空分布特性及聚合能力,并采用多面体聚合、内近似模型与闵可夫斯基和等先进方法精确刻画其可调度能力边界。研究进一步结合大规模电动汽车接入场景,探讨其在多时间尺度调度框架下参与调峰、调频等辅助服务的优化策略,评估其对提升高比例可再生能源电网灵活性与稳定性的贡献,最终通过仿真验证所提模型与方法的有效性与实用性。; 适合人群:具备电力系统分析、智能电网、新能源汽车或优化调度等相关专业背景,熟悉Matlab/Simulink仿真工具,从事科研、工程应用的高校研究生、科研人员及电力行业工程师。; 使用场景及目标:①精确评估大规模电动汽车集群在不同约束条件下可提供的运行备用容量;②研究电动汽车在日前、日内及实时调度中的动态响应能力与优化调度策略;③为高渗透率新能源电力系统提供基于移动储能的灵活性资源解决方案,支撑电网安全经济运行。; 阅读建议:建议结合Matlab代码与技术文档同步学习,重点关注多面体聚合建模、能力边界计算及优化调度算法的设计与实现,可进一步拓展至V2G(车辆到电网)、需求响应等互动场景进行二次开发与应用验证。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 OpenCV(开源计算机视觉库)中的DNN(Deep Neural Network)模块是一种功能强大的工具,其目的是用于深度学习模型的操作。该模块使得开发人员能够在OpenCV环境中直接运用已经训练好的深度学习网络,以执行图像识别、目标检测、图像分割等多种功能。DNN模块能够兼容多种深度学习框架的模型,包括TensorFlow、Caffe、ONNX等。 一、DNN模块概述 OpenCV的DNN模块是为了简化深度学习模型的集成过程而专门设计的,它允许开发人员加载预先训练好的神经网络模型,并在图像数据上执行前向传播操作。借助这个模块,用户可以选用GPU或者CPU来提升计算效率,从而构建出高效的应用程序。 二、目标检测案例 在OpenCV的DNN模块中,目标检测是一个常见的应用情形。例如,可以选用SSD(Single Shot Multibox Detector)、YOLO(You Only Look Once)或者 Faster R-CNN 等模型进行实时的目标检测。这些模型能够识别并定位图像中的多个对象,并返回每个对象的类别和边界框坐标。 三、模型转换:PB到PBTXT 在OpenCV中运用TensorFlow模型时,通常需要处理的是`.pb`格式的模型文件,这是TensorFlow的二进制模型文件格式。然而,为了能够读取模型的结构信息,我们需要`.pbtxt`格式的文本文件。转换过程涉及解析`.pb`文件并将其结构信息导出为`.pbtxt`格式,这样做可以让人清晰地了解网络层和参数的配置。在OpenCV中,可以使用`tf.train.write_graph()`函数将.pb...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值