主题中讨论的其他器件:DRA752
工具/软件:Linux
大家好、我一直在使用基于 AM5728的设计、我们对 AM57x EVM 的主要更改之一是、我们只使用256MB RAM (地址范围为0x80000000至0x90000000)、而不是2GB。 因此、我们在 PSDK4内核配置中禁用了 ARM LPAE。 我已经用一个最小的映像(PSDK4中的 Arago 文件)让电路板引导到 Linux 终端、并且我正在着手开发我们计划使用的其余片上外设、从 IPU (用于 IVA-HD 解码器)开始。 由于我们计划的应用是多媒体密集型的、因此我打算使用与 EVM 相同的内存空间量(如果这已经过多、我会很感激)。 但是、我将会遇到该错误
[引用] CMA 区域的对齐不正确[/引用]
我从 https://stackoverflow.com/questions/4888067/how-to-get-linux-kernel-page-size-programmatically 上注意到 、可以通过将"/proc/meminfo:Mapped"除以"/proc/vmstat:nr_Mapped"来找到页面大小、在我的案例中、结果为
[引述]
root@am57xx-EVM:~# cat /proc/meminfo | grep mapped
映射:9520KB
root@am57xx-EVM:~# cat /proc/vmstat | grep nr_mapped
NR_MAPPED 2371
[/报价]
9520kB/2371 = 4KB
与 ARM 为 ARMv7的有效非 LPAE 页面大小指定的匹配项: 
我的.config 文件还指定 CONFIG_CMA_alignment 值= 8、这意味着256页对齐、即4KB * 256 = 1MB 内存对齐。
我提出 IPU 的策略是将 CMA 缓冲区的开头放置在可被1MB 除的空间、然后使用与 EVM 相同的缓冲区长度。 我的定位策略与 EVM 类似、我将其放置在 RAM 顶部附近、U-Boot 放置器件树的位置下方(在我的情况下、这意味着我的 CMA 缓冲区必须结束于0x8def4000以下)。
我的 CMA 缓冲区为:
ipu2_CMA_pool:ipu2_CMA@8a600000{ compatible ="shared-DMA-pool"; reg =<0x0 0x8a600000 0x0 0x3800000>; reusable; status ="确定"; }; ipu1_CMA_pool:ipu1_cma@88600000{ compatible ="shared-DMA-00000" ;reg = 0x860000";ature= 0x8600000";ature=0x8600000"= 0x8600000"
进行了比较
ipu2_CMA_pool:ipu2_CMA@95800000{ compatible ="shared-DMA-pool"; reg =<0x0 0x95800000 0x0 0x3800000>; reusable; status ="确定"; }; dsp1_CMA_pool:dsp1_CMA@ @99000000{compatible ="shared-DMA-pool";0x000000 = 0x400000000;i400000-reg = 0x400000-reuse_pool = 0x000000;i400000-rk = 0x400000-rg";i4000-rgr = 0x400009000000 = 0x400000-rgr = 0x400009000000;i4000-rk = 0x40000ngr = 0x40000ngr = 0x40000ngr;i40000gr; }; dsp2_CMA_pool:dsp2_CMA@9f000000{ compatible ="shared-DMA-pool"; reg =<0x0 0x9f000000 0x0 0x800000>; 可重复使用; status ="确定"; }; };
但是、当我尝试引导时、我会收到上面提到的错误。 相关日志部分如下所示:
[引述]
##当前堆栈结束于0x8df11a00 *内核:cmdline 映像地址= 0x82000000
##跳过 init Ramdisk
##无初始化 Ramdisk
RAMDISK START = 0x00000000、RAMDISK END = 0x00000000
* FDT:cmdline 映像地址= 0x88000000
##在88000000时检查'FDT'/'FDT Image'
错误的拟合格式:无说明
* FDT:原始 FDT blob
###展开的设备树 blob、88000000
使用0x88000000处的 FDT blob 进行引导
0x88000000大小为0x00018dbe 时的 TO_FULL_TREE
argc=3的初始值
argc=3的最终值
未指定## FIT 配置
使用:FDT
## initrd 高= 0x90000000、copy_to_ram = 1.
RAMDISK LOAD START = 0x00000000、RAMDISK LOAD END = 0x00000000
##设备树(88000000)... 88018dbd (len=114110 [0x1BDBE])
正在将设备树加载到8def4000,结束8df0fdbd... 好的
argc=3的初始值
argc=3的最终值
更新属性"/ocp/ethernet@48484000/slave@48480200/mac-address"= D4 36 39 fc 4b 3e.
更新属性"/ocp/ethernet@48484000/slave@48480200/ local-mac-address"= D4 36 39 fc 4b 3e.
更新属性"/ocp/ethernet@48484000/slave@48480300/mac-address"= D4 36 39 fc 4b 3f
更新属性"/ocp/ethernet@48484000/slave@48480300/local-mac-address"= D4 36 39 fc 4b 3f
##正在将控制权转移到 Linux (地址82000000)...
正在启动内核...
[0.000000]在物理 CPU 0x0上引导 Linux
[0.000000] Linux 版本4.9.28-geed43d1050 (Tom@tom-ThinkPad-P50s)(gcc 版本6.2.1 20161016 (Linaro GCC 6.2-2016.11))#5 SMP 优先于 Mon Oct16 18:08:23 EDT 2017
[0.000000] CPU:ARMv7处理器[412fc0f2]修订版2 (ARMv7)、CR=10c5387d
[0.000000] CPU:可用的 div 指令:修补分部代码
[0.000000] CPU:PIPT/VIPT 非混叠数据高速缓存、PIPT 指令高速缓存
[0.0000M]、共个:FDT:机器模型:Tom 的定制板
[0.000000]引导控制台[earlycon0]已启用
[0.000000] EFI:从 FDT 获取 EFI 参数:
[0.000000] EFI:未找到 UEFI。
[0.000000]保留的内存:CMA 区域对齐错误
[0.000000]保留的内存:CMA 区域对齐错误
[0.000000] CMA:保留0x8e400000处的24 MIB
[0.000000]内存策略:数据高速缓存 writealloc
[0.000000] OMAP4:将0x8fe00000映射到 DRAM 隔离层的 fe600000
[0.000000] DRA752 ES2.0
[0.000000]% pu:嵌入式13页/CPU @cfd80000 s22092 r8192 d22964 u53248
[0.000000]在区域顺序和移动分组中构建了1个区域列表。 总页数:60352页
[0.000000]内核命令行:console=ttyO2,115200n8 debug arlyprintk=ttyO2,115200n8,keep loglevel=7 log_buf_len=16000 initcall_debug time root=PARTUUUUID=79beccd-02 rootfstype=ext4 rootwait
[0.000000] PID 哈希表条目:1024 (顺序:0、4096字节)
[0.000000]条目高速缓存散列表条目:32768 (顺序:5、131072字节)
[0.000000] inode 高速缓存散列表条目:16384 (顺序:4、65536字节)
[0.000000]内存:114168K/243712K 可用(7168K 内核代码、312K rwdata、2412K rodata、1024K init、292K BSS、 104968K 保留、24576K CMA 保留、0K HIGHMEM)
[0.000000]虚拟内核内存布局:
[0.000000]矢量:0xff0000-0xff1000 (4KB)
[0.000000] fixmap:0xc00000 - 0xc00000 (3072 KB)
[0.000000] vmalloc:0xd0800000 - 0x0x800000 (752MB)
[0.000000]低内存:0xC0000000 - 0xd0000000 (256 MB)
[0.000000] pkmap:bbfe00000 - 0xC0000000 (2 MB)
[0.000000]模块:bbf000000 - bbbfe00000 (14 MB)
[0.000000].text:0xc0008000 - 0xc0800000 (8160 KB)
[0.000000].init:0xc0b00000 - 0xc0c00000 (1024KB)
[0.000000].data:0xc0c00000 - 0xc0c4e360 (313 KB)
[0.000000].bss:0xc0c50000 - 0xc0c992b0 (293 KB)
[0.000000] slub:HWalign=64、order=0-3、MinObjects=0、CPU=2、Nodes=1
[0.000000]可抢占的分层 RCU 实现。
[0.000000]叶扇出的生成时间调整为32。
[0.000000] NR_IRQ:16 nr_IRQ:16 16.
[0.000000] OMAP 时钟事件源:Timer1为32786Hz
[0.000000] ARM_ARCH_TIMER:构建了以6.14MHz (PHY)运行的 cp15计时器。
[0.000000]时钟源:arch_sys_counter:mask:0xffffffffffffffffffffffffff max_cycles:0x16af5adb9、max_idle_ns:440795202250 ns
[0.000006] sched_clock:6MHz 时为56位、分辨率为162ns、每4398046511023ns 换行一次
[0.008308]切换到基于计时器的延迟环路、分辨率为162ns
[0.014950]时钟源:32K_COUNTER:MASK:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:58327039986419 ns
[0.025212] OMAP 时钟源:32768Hz 时为32K_COUNTER
[0.030992]控制台:彩色虚拟设备80x30
[0.035662]警告:'console=ttyO2'已被'ttyS2'替代
[0.042457]这可确保您仍能看到内核消息。 请
[0.048974]更新您的内核命令行。
[0.053373]校准延迟环路(跳过)、使用计时器频率计算的值。 12.29茂物剪(lpj=61475)
[0.064012] pid_max:默认值:32768最小值:301
[0.068957]安装高速缓存散列表条目:1024 (顺序:0、4096字节)
[0.075844] mountpoint-cache 哈希表条目:1024 (顺序:0、4096字节)
[0.084026] CPU:测试写入缓冲器一致性:好的
[/报价]