而在这一过程中,DDR(Double Data Rate,双倍数据速率)内存的初始化无疑是至关重要的一环
本文将深入探讨Linux系统移植过程中DDR的初始化过程及其重要性
DDR在嵌入式Linux系统中的作用 DDR作为现代嵌入式系统中的主要存储介质,其性能直接影响系统的整体表现
在Linux系统移植过程中,DDR不仅负责存储操作系统的内核、设备树、根文件系统等关键数据,还要为系统运行时的动态数据提供存储空间
因此,DDR的正确初始化是系统能够成功启动和运行的基础
DDR初始化的步骤与实现 DDR的初始化过程通常发生在系统启动的早期阶段,具体可以分为以下几个步骤: 1.系统启动的早期阶段: 在嵌入式Linux系统中,系统启动通常从固化在硬件中的Boot ROM开始
Boot ROM中的程序负责加载并执行第一阶段的引导程序(FSBL,First Stage Boot Loader)
FSBL是开发者可以修改的部分,它通常使用Xilinx SDK等工具进行开发
2.FSBL中的DDR初始化: FSBL在执行过程中,会调用一系列初始化函数来配置系统的各个部分,包括DDR
在Xilinx的Zynq平台上,FSBL通过调用`ps7_init`函数来初始化DDR
这个函数根据PS(Processing System)的类型,设置MIO(Multi-IO)、PLL(Phase-Locked Loop)、CLOCK、DDR等参数
具体来说,它会根据硬件设计选择相应的初始化数据,并通过`ps7_config`函数应用这些设置
c int ps7_init() { unsigned long si_ver = ps7GetSiliconVersion(); int ret; if(si_ver == PCW_SILICON_VERSION_1) { ps7_mio_init_data = ps7_mio_init_data_1_0; ps7_pll_init_data = ps7_pll_init_data_1_0; ps7_clock_init_data = ps7_clock_init_data_1_0; ps7_ddr_init_data = ps7_ddr_init_data_1_0; ps7_peripherals_init_data = ps7_peripherals_init_data_1_0; } else if(si_ver == PCW_SILICON_VERSION_2) { // ...(其他版本的处理类似) } // MIO init ret = ps7_config(ps7_mio_init_data); if(ret!= PS7_INIT_SUCCESS) return ret; // PLL init ret = ps7_config(ps7_pll_init_data);