This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/PROCESSOR-SDK-AM335X:减小 DDR 大小

Guru**** 2933120 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/669711/linux-processor-sdk-am335x-ddr-size-reduction

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

您好!

我正在使用 BeagleBone Black 修订版#c 进行实验、

在默认配置下、一切正常、但我想将 DRAM 大小从512Mib 减小到64Mib、

请提供任何补丁或步骤以更改 u-boot 和内核中 DRAM 的配置、从而恢复 DRAM (64Mib)的大小

谢谢、

Amit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是哪种 Linux 版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用 u-boot V (2017.01)和 Linux -内核 V4.9、并在 Ubuntu 16.04 LTS 上使用 Yocto 环境
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    U-boot 2017.01正在实施 DRAM 大小自动检测过程。 U-boot 2017.01将自动检测您板载的实际 RAM 大小、没有单个参数可从512MibB 更改为64Mib. 在旧版本的 u-boot 中、我们有一个称为 phys_dram_1_size 的单个参数。

    有关 u-boot DRAM 大小自动检测的更多信息、请参阅以下 e2e 线程:

    e2e.ti.com/.../1837559
    e2e.ti.com/.../1857605
    e2e.ti.com/.../1866822

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以尝试更改 DRAM 最大大小参数。 AM335x EMIF 支持高达1GB 的 DRAM、您可以尝试将其更改为64MiB

    U-boot-2017.01/include/configs/ti_am335x_common.h

    #define CONFIG_MAX_RAM_Bank_size(1024 << 20)// 1GB */
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已经做了一些实验、能够将 BeagleBone 上512MB 中的 RAM 大小限制为256MB、当我看到/proc/meminfo 时

    我可以看到256MB 的内存、

    但当我将其配置为64MB 时、内核不会加载。 它在内存限制为256M 时工作正常、但在内存限制为128M 或64M 时不工作、

    我是否需要更改 u-boot 或内核中的其他参数?

    目前、我将宏" CONFIG_ENV_SIZE"更改为256
    I.G (CONFIG_ENV_SIZE (256<<10)),所有的一切都能在256MB 的内存上运行

    但该设置不适用于128M 或64M I.G (CONFIG_ENV_SIZE) (64<<10))、内核映像未加载。

    谢谢、
    Amit
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、

    [引用 user="Amit Gondaliya">但当我将其配置为64MB 时,内核不会加载。 它在内存限制为256M 时工作正常、但在内存限制为128M 或64M 时不工作、

    我是否需要更改 u-boot 或内核中的其他参数?

    请提供完整的控制台启动日志以进行分析。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请找到以下控制台日志、

    ================================================================================================================
    U-Boot 2017.01 (2018年3月7日- 18:03:23 +0530)

    CPU:AM335X-GP 修订版2.1
    I2C:就绪
    DRAM:128 mib
    MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.
    **第一个描述符不是1:1上的主要描述符**
    未设置。 验证第一个电子保险丝 MAC
    NET:无法获取 cpsw 的 PHY:Addr 0
    CPsw、USB_ether
    按空格键可在2秒钟内中止自动引导
    切换到分区#0,确定
    mmc0是当前器件
    找到 Micro SD 卡
    切换到分区#0,确定
    mmc0是当前器件
    在器件0上找到 SD/MMC
    正在阅读 uEnv.txt
    **无法读取文件 uEnv.txt **
    在282 ms (13.7 MiB/s)内读取的4051160字节
    在26ms (1.3 MIB/s)内读取34304字节
    正在从 MMC 引导...
    ##从 Legacy Image 中引导内核,地址为82000000...
    映像名称:Linux-4.9.0
    创建时间:2018-03-06 13:43:23 UTC
    映像类型:ARM Linux 内核映像(未压缩)
    数据大小:4051096字节= 3.9 MIB
    加载地址:80008000
    入口点:80008000
    正在验证校验和... 好的
    ###展开的设备树 blob、88000000
    使用0x88000000处的 FDT blob 进行引导
    正在加载内核映像... 好的
    正在将设备树加载到8fff4000,结束8ff5ff... 好的

    正在启动内核...
    ================================================================================================

    内核映像在执行此 pring 后未加载、只是它在启动内核时挂起。 然后重新启动电路板。

    谢谢
    Amit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我为 128 MIB 和 64MiB (CONFIG_MAX_RAM_Bank_Size (128 << 20))(CONFIG_MAX_RAM_Bank_Size (64 << 20))进行了分页(CONFIG_MAX_RAM_Bank_Size (64 << 20)))、但我使用相同的上述日志被吸入、内核未加载。

    我已识别 "default_linux_boot_env"、该宏在"include/configs/ti_armv7_common.h"文件中包含内核和器件树加载地址。 您能不能建议我需要更改此地址、还是应该由 u-boot 自行处理?

    此致、

    Amit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Amit Gondaliya"]目前我只将宏" CONFIG_ENV_SIZE"更改为256
    I.G (CONFIG_ENV_SIZE (256<< 10))、所有器件均可在256MB 上工作

    但此设置不适用于128M 或64M I.G (CONFIG_ENV_SIZE (64<<10))、内核映像未加载。[/QUERP]

    此 CONFIG_ENV_SIZE 宏定义了 u-boot 环境数据大小、我看不到这与 DRAM 大小有何关系。 默认情况下、AM335x EVM 将此宏设置为128KiB (不是128MiB):

    U-boot-2017.01/include/configs/am335x_evm.h

    /*始终为128 KiB env 大小*/
    #define CONFIG_ENV_SIZE         (128 << 10)

    #Elif defed (CONFIG_EMMC_BOOT)

    #define CONFIG_ENV_OFFSET      0x0
    #define CONFIG_ENV_OFFSET_redund   (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您有256Mib- DRAM 时、您有以下可用地址:0x8000000至0x8FFFFFFF

    当您有128MibTM DRAM 时、您有以下可用地址:0x8000000至0x87FFFFFF

    [引用 user="Amit Gondaliya"]###展开设备树 blob、价格为88000000
    使用0x88000000处的 FDT blob 进行引导
    正在加载内核映像... 好的
    正在将设备树加载到8fff4000,结束8ff5ff... 确定[/报价]

    这些地址(0x88000000、0x8FFF4000、0x8FFFF5FF)超出了128MiB DRAM 范围。 您可以尝试调整128MiB DRAM 映射的 DTB 加载地址。 查看以下 e2e 线程以了解更多信息:

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好

    我 已更改地址设置、如下所示为64MibRAM。

    "loadaddr=0x82000000\0"\
    "kernel_addr_r=0x82000000\0"\
    "Fdtaddr=0x8007FFF\0"\
    "FDT_addr_r=0x8007FFF\0"\
    "rdaddr=0x88080000\0"\
    "ramdisk_addr_r=0x88080000\0"\
    "脚本地址=0x80000000\0"\
    "pxefile_addr_r=0x80100000\0"\
    "bootm_size=0x10000000\0"\
    "BOOT_FDT=Try \0"

    但它给出了以下错误、我错过了计算、您会建议我吗?

    ===================================================================================================
    **无法读取文件 uEnv.txt **
    在282 ms (13.7 MiB/s)内读取的4051160字节
    数据中止
    PC:[<83f6d40c>] LR:[<83f53891>]
    重新分配 PC:[<8081b40c>] LR:[<801891>]
    SP:81f31630 IP:00000000 FP:00000fb8
    R10:00000200 R9:81f31ed8 R8:00000200
    R7:8007FFFF R6:00000020 R5:00008600 R4:48060100
    r3:800801ff r2:edfe0dd0 r1:00200000 r0:00000000
    标志:在模式 SVC_32上关闭 FIQ 的 Nzcv IRQ
    正在重置 CPU ...
    ===================================================================================================
    此致、
    Amit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Amit Gondaliya"]我 已更改地址设置,如下所示:64MibDRAM。

    [报价用户="Amit Gondaliya"]"读数地址=0x88080000\0"\
    "ramdisk_addr_r=0x88080000\0"\

    64MiB DRAM 范围为0x8000000000至0x83FFFFFF

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已经更改了别名、但它不起作用、我是否需要将所有地址置于0x8000000到0x83FFFFFF 的范围内? 包括脚本 addr、pexfile_addr_r?

    "loadaddr=0x82000000\0"\
    "kernel_addr_r=0x82000000\0"\
    "Fdtaddr=0x82FF5FFF\0"\
    "FDT_addr_r=0x82FF5FFF\0"\
    "rdaddr=0x88080000\0"\
    "ramdisk_addr_r=0x88080000\0"\
    "脚本地址=0x80000000\0"\
    "pxefile_addr_r=0x80100000\0"\
    "bootm_size=0x10000000\0"\
    "BOOT_FDT=Try \0"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Amit Gondaliya"]"读数地址=0x88080000\0"\
    "ramdisk_addr_r=0x88080000\0"\

    这些超出64MibB 范围

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已更改地址范围、如下所示、存储器的128Mibb 的地址范围如下所示、

    #define DEFAULT_LINUX_BOOT_ENV \
       "loadaddr=0x82000000\0"\
       "kernel_addr_r=0x82000000\0"\
       "Fdtaddr=0x86000000\0"\
       "FDT_addr_r=0x86000000\0"\
       "rdaddr=0x87000000\0"\
       "ramdisk_addr_r=0x87000000\0"\
       "脚本地址=0x80000000\0"\
       "pxefile_addr_r=0x80100000\0"\
       "bootm_size=0x10000000\0"\
       "BOOT_FDT=Try \0"

    但我仍然无法加载内核映像它卡在日志"正在启动内核"中

    电流只有两个变化。

    如上所述、新地址全部在0x87FFFFFFFF 以下

    宏、#define CONFIG_MAX_RAM_Bank_SIZE   (128 << 20)

    我是否需要更改其他内容?您是否建议对地址进行进一步修改?

    以下是控制台日志。

    ================================================================================================

    ##从 Legacy Image 中引导内核,地址为82000000...
      图像名称:  linux-4.9.0-ossdn-osasis
      创建时间     :2018-03-09  6:53:37 UTC
      映像类型:  ARM Linux 内核映像(未压缩)
      数据大小:   4051096字节= 3.9 MIB
      加载地址:80008000
      入口点: 80008000
      正在验证校验和... 好的
    ###展开的设备树 blob、86000000
      使用0x86000000处的 FDT blob 进行引导
      正在加载内核映像... 好的
      正在将设备树加载到8fff4000,结束8ff5ff... 好的
    ========================================================================================

    此致、

    Amit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、

    [引用用户="Amit Gondaliya"]

    我已更改地址范围、如下所示、存储器的128Mibb 的地址范围如下所示、

    #define DEFAULT_LINUX_BOOT_ENV \
       "loadaddr=0x82000000\0"\
       "kernel_addr_r=0x82000000\0"\
       "Fdtaddr=0x86000000\0"\
       "FDT_addr_r=0x86000000\0"\
       "rdaddr=0x87000000\0"\
       "ramdisk_addr_r=0x87000000\0"\
       "脚本地址=0x80000000\0"\
       "pxefile_addr_r=0x80100000\0"\
       "bootm_size=0x10000000\0"\
       "BOOT_FDT=Try \0"

    [/报价]

    您是否能够使用这些设置和256MibTM DRAM 引导您的电路板?

    [报价用户="Amit Gondaliya"]我是否需要更改其他内容?您是否建议对地址进行进一步修改?

    另请尝试以下 DTS 文件更新:

    u-boot/arch/arm/dts/AM335x-bone-common.dtsi

    内存{
          DEVICE_TYPE ="存储器";
         - reg =<0x8000000 0x10000000>;/* 256 MB */

        + reg =<0x8000000 0x08000000>;/* 128 MB */
       };

    linux-kernel/arch/arm/boot/dts/am335x-bone-common.dtsi

    内存@80000000{
          DEVICE_TYPE ="存储器";
          - reg =<0x8000000 0x10000000>;/* 256 MB */

           + reg =<0x8000000 0x08000000>;/* 128 MB */       
       };

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另请注意、AM335x Draco 板附带128MibTM DRAM 存储器。 您可以在 u-boot 中探索该板的设置方式。

    lists.denx.de/.../216785.html

    u-boot/板/Siemens / Draco/
    u-boot/include/configs/draco.h
    u-boot/include/configs/siemens-am33x-common.h
    u-boot/arch/arm/dts/AM335x-Draco.dtsi

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    建议的更改适用于256MiB DRAM、

    对于128MibTM DRAM、我引入了环境变量 FDT_HIGH = 0x86000000 (与 FDT_addr_r 相同)、它的工作原理是

    是的、我之前进行过上述所有设置、只是我没有引入"FDT_HIGH_"环境变量。

    此致、
    Amit
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、

    感谢您分享解决方案。

    为了获得更多信息、我们在下面的 e2e 线程中解释了 FDT_HIGH:

    e2e.ti.com/.../1883545

    此致、
    帕维尔