长话短说开始搞SD卡烧写UBOOT,从SD启动UBOOT。从s5pv210_irom_applicationnote_preliminary_20091126.pdf知道,s5pv210启动分BL0、BL1、BL2阶段。BL0是s5pv210内部IROM固化的
代码,这段代码根据OM引脚配置状态来选择从哪个外部存储设备加载BL1段代码(实际上BL1代码就是我们编写的UBOOT的前8K代码,这段代码要包含完整的将后半部UBOOT代码复制和清bss段的功能,当然我们要从SD卡启动烧写在上面的UBOOT,OM引脚就必须配置为从SD卡启动配置)。图1从上图可知,逗慎毕从sd启动的时候BL0加载的代码是从第512个字节处开始加载代码,为什么要这样做呢?由于以后功能扩展的需要三星的软件工程师写的固化到IROM中的BL0代码是从SD卡的512字节处加载BL1的,他就是这样写的,我们对应UBOOT放置在SD卡中的位置就要往后移动512字节,后面有介绍怎么指定把uboot写到sd卡指定的位置的命令。还有一定要注意如下所示的地方:图2在BL1之前要加16个字节的头部信息。也就是在真正的UBOOT第一条指令之前孝段要加16个字节的头部信息,于是就山芹有我们所看到的uboot代码如下的用宏定义的一段:[cpp]viewplaincopy#ifdefined(CONFIG_EVT1)&&!defined(CONFIG_FUSED).word0x2000.word0x0.word0x0.word0x0#endif.globl_start_start:bresetldrpc,_undefined_instructionldrpc,_software_interruptldrpc,_prefetch_abort其中的.word0x2000代表BL1size(8K长度),.word0x0为保留字节.word0x0为checksum(后续会通过一个mkbl1工具来计算bl1的checksum并填写这个位置),最后一个.word0x0也为保留字节。再来看看uboot的下面的部分,如果bl0正常读取了bl1,代码就会到如下段:[cpp]viewplaincopy/*Readbootinginformation*/ldrr0,=PRO_ID_BASEldrr1,[r0,#OMR_OFFSET]//读OM引脚的配置状态bicr2,r1,#0xffffffc1#ifdefCONFIG_VOGUES/*PS_HOLD(GPH0_0)settooutputhigh*/ldrr0,=ELFIN_GPIO_BASEldrr1,=0x00000001strr1,[r0,#GPH0CON_OFFSET]ldrr1,=0x5500strr1,[r0,#GPH0PUD_OFFSET]ldrr1,=0x01strr1,[r0,#GPH0DAT_OFFSET]#endif/*NANDBOOT*/cmpr2,#0x0@512B4-cyclemoveqr3,#BOOT_NAND//根据OM引脚配置状态来给R3寄存器赋予代表系统是从何冲外部存储器启动的配置值。cmpr2,#0x2@2KB5-cyclemoveqr3,#BOOT_NANDcmpr2,#0x4@4KB5-cycle8-bitECCmoveqr3,#BOOT_NANDcmpr2,#0x6@4KB5-cycle16-bitECCmoveqr3,#BOOT_NANDcmpr2,#0x8@OneNANDMuxmoveqr3,#BOOT_ONENAND/*SD/MMCBOOT*/cmpr2,#0xcldrsp,_TEXT_PHY_BASE/*setuptempstackpointer*/subsp,sp,#12movfp,#0/*nopreviousframe,sofp=0*//*whenwealreadyruninram,wedon'tneedtorelocateU-Boot.*andactually,memorycontrollermustbeconfiguredbeforeU-Boot*isrunninginram.*/ldrr0,=0xff000fffbicr1,pc,r0/*r0moveqr3,#BOOT_MMCSD/*NORBOOT*/cmpr2,#0x14moveqr3,#BOOT_NOR#if0/*AndroidC110BSPusesOneNANDbooting!*//*Forseconddevicebooting*//*OneNANDBOOTONGfailed*/cmpr2,#0x8moveqr3,#BOOT_SEC_DEV#endif/*UartBOOTONGfailed*/cmpr2,#(0x1//ldrsp,=0xd0036000/*endofsramdedicatedtou-boot*/ldrsp,=0xd0035400//BL1段的函数进行 *** 作的
堆栈位置,这里我修改了堆栈到了0xd0035400是由于图2中所示BL0代码进行了它自己代码堆栈的初始化,而RW/ZIregionHeap的最低部就位于0xd0035400,为了不修改BL0堆栈和BL0代码已经写好的一些函数功能(会在下面用到),我将堆栈修改到了0xd0035400subsp,sp,#12/*setstack*/movfp,#0bllowlevel_init/*gosetuppll,mux,memory*///这里会进行始终,内存,串口初始化之后运行到ldrsp,_TEXT_PHY_BASE/*setuptempstackpointer*///由于上面一步已经初始化了DRAM,所以在这里将以后的堆栈设置到了DRAM中的位置(以后BL2代码中函数都是基于此堆栈)subsp,sp,#12movfp,#0/*nopreviousframe,sofp=0*//*whenwealreadyruninram,wedon'tneedtorelocateU-Boot.*andactually,memorycontrollermustbeconfiguredbeforeU-Boot*isrunninginram.*/ldrr0,=0xff000fffbicr1,pc,r0/*r0ldrr0,=INF_REG_BASEldrr1,[r0,#INF_REG3_OFFSET]cmpr1,#BOOT_NAND/*0x0=>bootdeviceisnand*/beqnand_bootcmpr1,#BOOT_ONENAND/*0x1=>bootdeviceisonenand*/beqonenand_bootcmpr1,#BOOT_MMCSDbeqmmcsd_bootcmpr1,#BOOT_NORbeqnor_bootcmpr1,#BOOT_SEC_DEVbeqmmcsd_boot//代码判断要拷贝后,读取之前存入到用户使用寄存器中的值来判断此次启动从何种外部存储设备启动,这里为sd卡启动~~~~~省略若干代码~~~~~~~~mmcsd_boot:#ifDELETEldrsp,_TEXT_PHY_BASEsubsp,sp,#12movfp,#0#endifblmovi_bl2_copy//最后BL1代码来到此处从sd卡拷贝剩余的代码bafter_copyZynq-7000是一种全可编程FPGA SoC,它将ARM Cortex-A9处理器和Xilinx FPGA集成在一起。使用激局册Linux
*** 作系统可以为Zynq-7000带来以下优点:
1.强大的软件支持:Linux是一种流行的开源 *** 作系统,具有广泛的软件支持和社区支持。使用Linux *** 作系统可以轻松地访问各种软件和工具,从而提高开发效率。
2.易于开发:使用Linux *** 作系统可以使用各种编程语言和开发工具进行开发,例如C/C++、Python、Java等。这使得开发人员可以使用他们熟悉的工具和语言进行开发。
3.可靠性和稳定性:Linux *** 作系统是一种稳定和可靠腊旁的 *** 作系统,具有良好的内存管理和错误处理机明宏制。这使得它成为一种可靠的 *** 作系统,适用于需要高可靠性的应用程序。
然而,使用Linux *** 作系统也存在一些难点:
1.硬件驱动程序:使用Linux *** 作系统需要编写适当的硬件驱动程序,以便 *** 作系统可以与硬件进行通信。这需要一定的硬件和软件知识。
2.系统配置:使用Linux *** 作系统需要进行系统配置,例如设置网络连接、安装软件包等。这需要一定的系统管理知识。
3.性能优化:使用Linux *** 作系统需要进行性能优化,以确保系统可以在给定的资源下运行。这需要一定的系统优化和调试知识。
总之,使用Linux *** 作系统可以为Zynq-7000带来许多优点,但也需要一定的硬件和软件知识来克服一些难点。
出故障了。可以这样做:1、关闭工程后重新打开ISE,将下载电缆重新安装(或进行更换),必要时重启电脑。2、若(1)方案失败,则右击“Processes”窗口中的"GenerateProgrammingFile",点击“ProcessProperties”左边的“ConfigurationOptions”,找到“UnusedIOBPins”选项,将其修改为“float”。3、若(2)方案也失效,则进入第三步,在iMpact界面中的Edit——>Preferences——>IMPACT-ConfigurationPreferences中选中“UseHighZintsteadofBypass”一项即可。4、若(3)方案也失效,则进入第四步,在生成Bit文件扒铅明之前,右击“Processes”窗激答口中的“GenerateProgrammingFile”,点击“StartupOptions”,找到"MatchCycle",将该项修改为最大值“6”。ISE12.3。
软件是一系列按照特定顺序组织的计算机数据和指令的集合。一般来讲软件被划分为系统软件、应用软件和介于这两者之间的中间件。软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。简单的说软件就是程序加文档的集合体春告。另也泛指社会结构中的管理系统、思想意识形态、思想政治觉悟、法律法规等等。
评论列表(0条)