版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、tms320c6678多核烧写研究 樊文贵 电子信息工程学院203教研室 北京航空航天大学 2014年5月16日 主要内容 可执行文件生成过程1 多核烧写文件生成原理2 多核烧写文件生成过程4 参考文献6 多核烧写操作过程5 多核boot原理3 1. 可执行文件生成过程 1. 可执行文件生成过程 一个demo程序的生命周期一般是从c语言程序开始的,因为这种形式编写最为 方便。为了在系统上运行demo程序,其每一条语句都需要被转化为低级的机器指 令(machine language),并按照一定格式打包以二进制磁盘文件存放,该形式的程 序称为可执行目标文件(executable file),被加
2、载到内存后,由系统运行。 在文本编辑器中编辑的源程序成为可执行目标文件需要经过四步处理:预处理 (preprocesser)、编译(compiler)、汇编(assembler)以及链接(linker)。 1. 可执行文件生成过程 预处理阶段:预处理器根据字符#开头的命令修改c源 程序,例如main.c中第一行#include,告诉预 处理器读取系统文件stdio.h中的内容并将其直接插入到 程序文本中;而宏定义告诉预处理器将程序文本中对应的 字符进行替换。 附带演示程序demo,基于ccsv5开发平台编辑生成。 1. 可执行文件生成过程 编译阶段:编译器将预处理器输出的文件翻译成汇编语 言程
3、序(.asm)。汇编语言程序中的每一条语句都以一种标 准的文本格式确切的描述了一条低级机器语言指令(参看 参考文献2)。汇编语言为不同高级语言的不同编译器提 供了统一的输出语言。有时为提高程序的执行效率,程序 员可以直接编写汇编程序文件(例如demo程序中的 sum.asm)。 1. 可执行文件生成过程 汇编阶段:汇编器将输入的汇编文本(.asm)逐条翻译成 二进制机器语言指令,并把这些指令打包成可重定位的目 标程序(relocatable object program),保存到各自的目标 文件(.obj)中。该目标文件是二进制文件,它的字节编码 是机器语言指令而不是字符,如果用文本编辑器打开
4、.obj 文件,将看到一堆乱码. 1. 可执行文件生成过程 链接阶段:通常,整个程序由多个.c文件组成,经过前 面的处理生成各自对应的可重定位目标文件(.obj),程序 调用了若干库函数(例如printf()也保存在经过单独编译汇 编过的目标文件库(.lib)里。链接器在.cmd文件的指导下 将这些文件合成一个可在系统上运行的可执行文件。 1. 可执行文件生成过程 链接阶段:编译器和汇编器生成从地址0开始的代码和 数据节。链接器通过把每一个符号定义(在可重定位文件 中,对程序外部文件的变量或函数的引用通过一个符号定 义来表示)与存储位置联系起来(.cmd),然后修改这些符 号的引用,使得他们指
5、向这个存储器的位置(引用符号由 引用变量或函数的具体存储器地址代替),从而实现重定 义这些细节。最后链接器将经过重定位的各代码和数据节 组成一个完整的可执行目标文件,加载到处理器中即可运 行。(链接器的实现细节参看文献1的第7章 链接) 2.多核烧写文件生成原理 2. 多核烧写文件生成原理 对于多核编程,各核源文件分别经ccs编译、 汇编、链接为各自对应的.out文件,但该文件 不能被直接烧写到外部flash中,必须经过工 具链处理为满足bootloader的格式即如右图所 示的镜像文件(.dat)。该文件经ccsv5自带的 flash烧写工程(my_spi_modify)烧写到外部 flas
6、h,之后上电系统完成自举,程序正常运 行。 2. 多核烧写文件生成原理 镜像文件就是用户要烧写到外部flash上的全 部数据文件,它是由boot参数表(在文件前 部)和应用程序的根表数据(文件后部)的合 成数据文件。单核和多核的boot参数表格式 都一样,区别就是后部的根表数据。 2. 多核烧写文件生成原理 boot 参数表占用8个字(32bytes),位于镜像文件的开头。不同的字段具有不同的 意义,用于指导启动过程。下表列出了spi启动模式下参数表的配置寄存器。由于 spi boot 是寄存器的直接读写,因此配 置过程中不会涉及到edma 寄存器的配置 (因此前12个字段被忽略)。这些参数部
7、分可以通过读取管脚配置来填充(参看参考文 献7,p.27-33),也可以被用户自定义修改。 注意:无论是管脚配置还是参数表的 书写都是为了生成boot 参数表。在我 们的系统中是通过dsp外部13个配置 管脚配置boot参数的,所以.dat文件 中的boot参数表被忽略。 2. 多核烧写文件生成原理 单核根表:根表是应用程序的所有代码和数 据以在片上占用地址来分段存储的数据包,包 的第一个4b是core0程序中main()函数的入口 地址_c_int00,后面由若干数据段组成,每个 段前4 b为该段数据的字节长度,接着4 b为该 段在片上的存储地址,后面是具体代码和数据。 所有数据段结束后是4
8、个字节的0作为根表的结 束标记。 多核根表:把各辅核的代码数据段及入口地 址值按照上述单核根表的格式续写在core0根 表后,其中入口地址值的地址为各核的 boot_magic_address地址。最后同样以 4个字节的0作为根表的结束标志。 2. 多核烧写文件生成原理 boot rom中的代码完成bootloader初始化(pll、cpu时钟、启动方式等)后会 继续初始化core的l2 ram缓存的最后0 xd23f个字长的代码,此段代码用于保存 boot配置信息并指导后续boot过程。 2. 多核烧写文件生成原理 boot_magic_address地址是每个core各自一块固定的内存。由
9、上表所示, boot_magic_address地址是 rom搬移到ram信息的最后一个字。该字存放 着各个core 初始化之后需要跳转到的c程序入口地址 _c_int00()。 根据c66x内存的规划设计,不同core的boot_magic_address位于在该core 本地l2 ram的最后一个word里。由于多核dsp采用全局地址来区别不同核的ram 地址,因此每个核的boot magic地址是0 x1x87fffc(x为核号)。 2. 多核烧写文件生成原理 工具链: 将ccs生成的.out文件转化为bootloader 可以“理解”的格式是c66x 启动至关重要的一步。与以前的dsp
10、 启动相比,c66x 系列的工具链更加复杂和多 样化。文件转换格式也呈现多态化。以.dat 文件格式为例,生成所需的镜像文件需 要以下工具链做支持: 2. 多核烧写文件生成原理 工具链: hex6x 文件需要和.rmd 文件配合使用,后者描述了boot 参数表模式, rom 宽度,大小端模式等信息。由此得到8 个核的.btbl 文件,该文件包含了大部分 的内容信息,再经过两个小工具的转化可以得到有效数据信息。此时的.ccs 文件只 包含各个段的内容,不包含 boot 参数的内容,因此需要将一定格式的参数配置信 息进行解析,作为boot 参数表头加在.ccs 文件上成为一个含有参数配置头的.cc
11、s 文件。最后由于rom bootloader 只识别大端(big end)模式数据,所有需要进行 一次大小端的转化。至此一个完整的可以被rom bootloader 识别的多核镜像文件 就成功生成。 3.多核boot原理 3. 多核boot原理 c66x芯片对典型c6000系列芯片做了改进, 不需要由用户在外部flash起始的1k空间编写 二级bootloader。c66x dsp内部有一个固 化的rom存放着boot代码(rom bootloader)。每当dsp启动时,会自动从这 里读取代码并执行。此代码是固化的不可更 改的,其作用就是根据管脚配置方式对核进 行初始化(比如pll等)和完
12、成不同模式的boot 处理(搬运程序和代码到指定的内部ram中)。 3. 多核boot原理 cpu 执行boot rom 中的代码将外部flash 中的程序和数据搬移到内部ram中。之后 core0启动初始化外设,此时其他core都会执 行相关的代码映射ipc中断,并配置相应的寄 存器,然后进入idle状态,等待core0的发 起ipc(inter-process-communication)中断。 当core0完成初始化后向其他core发送ipc中 断。其他core在接收到中断后启动执行代码, 即其他核是在core0的命令下执行第一句代码。 3. 多核boot原理 core0 在 spi 启
13、动中起到至关重要的作用。作为主核,核0 负责着搬移镜像,写 boot_magic_address地址值,以及发ipc 中断触发其他核启动等多项工作。 其中搬移多核镜像的工作由dsp rom bootloader 完成,而剩下两项工作需要用 户自定义操作。 本文附带的工具链不具有将各核入口地址写入对应boot_magic_address中 的功能,因此前述镜像文件格式中标为红色的部分没有被添加进去,这么做的主 要原因是程序的入口地址无法确知。解决这一问题有两种方法:1,在生成.out文 件之后参看.map文件获得各辅核程序的入口地址,并在主核的main()函数中分别 将该地址写入到各辅核对应的b
14、oot_magic_address中(如上图所示);2,获 得辅核入口地址后,修改工具链将其以数据段的形式写入到镜像文件中(如前述镜 像文件)。 3. 多核boot原理 如果多核dsp 是由同一套工程分别编译,那么每个核内存分配完全相同。core0 在读取自己核的boot_magic_address地址(0 x1087fffc)下的值后,就可以 得到其他核的boot_magic_address地址。但是如果各核独立编译各自工程, 各变量内存映射关系不再相同, 那么就无法从 core0 的 boot_magic_address地址值去推算其他核相应地址。这个时候只能事先记 录下各核的boot_m
15、agic_address地址值,然后写到核0 的用户初始化代码上。 3. 多核boot原理 在完成所有上述操作后,core0 需要对每个核的ipcgrx 寄存器写中断以唤醒其 他核的正常运行状态。ipcgrx 寄存器的31-4 比特位是ipc 中断源索引,可支持 多达28 个中断源,可以设置为全0;比特3-1 是保留位,可以任意赋值。因此只要 对最低比特赋 1 就可以完成对其他核ipc 中断的触发。(参看文献7.p.80-82) 3. 多核boot原理 到此为止基于spi 多核启 动的过程全部结束,多核 dsp 正常运转起来。注意 每个核的ipc 中断生成寄 存器有固定的内存映射地 址。 4.
16、 多核烧写文件生成过程 4. 多核烧写文件生成过程 在core0的main函数中要增加写各辅核入口地址到相应的boot_magic_address 及触发ipc中断的逻辑,如图所示,否则多核不可能正常boot。 void multicoreboot() int *pbootmagicaddcore0; int *ipcgr0; int i; int coreid = 0; coreid = platform_get_coreid (); if(coreid = 0) pbootmagicaddcore0 = (int*)0 x1087fffc; /*core0 的magic address*/
17、 *pbootmagicaddcore0=0 x10843994; /*core0 的_c_int00 函数入口地址*/ /*此处写入各辅核的入口地址*,在此core1 的_c_int00函数入口地址/ *(pbootmagicaddcore0+0 x01000000/4)=0 x1180c300; /*core0发送ipc中断*/ ipcgr0 = (int*)0 x02620240; for(i = 1;i core_num_6678;i+)/core0 sent ipc interrupt to *(ipcgr0+i) = (*(ipcgr0+i) | 0 x00000001; 可在转换
18、工具链 spi_boot_suit_v2.3.1_r elease2_ledtestprj1.6 678src找到原版代码。 4. 多核烧写文件生成过程 四核烧写文件的生成 工具链选择: spi_boot_suit_v2.3.1_release 1_utilities 1.6678 multicore_boot_4cores 。 把要处理的四个.out文件粘贴 到该文件夹下,依次修改文件名 为simple0simple3(必须为 core序号一 一对应关系)。 点击该文件夹下的批处理文件: spiboot_multi_4cores.bat,生 成镜像文件spirom_le.dat,即 烧写文件
19、。 4. 多核烧写文件生成过程 两核烧写文件的生成 修改批处理文件 spiboot_multi_4cores.bat中 内容如下。 删掉多余的hex6x simple2.rmd 和hex6x simple3.rmd 以及第五行中 simple2.btbl 和 simple3.btbl,将修改后文件 保存为文件名为 spiboot_multi_2cores.bat的 批处理文件。 点击该批处理文件就可以生 成两核程序的.dat代码。 4. 多核烧写文件生成过程 _c_int00入口地址的获得 在编译链接之后的工程下有一个 文件夹:debug。 在此文件夹下有一个以工程名命 名的.map文件,在此
20、文件的开头 可以看到_c_int00的入口地址。 各core启动之前pc指令应该指 向_c_int00的位置,即在执行 main函数之前应该先执行 _c_int00开始的一段初始化过程, 比如全局变量赋初值、局部变量 入栈等操作,之后才开始main函 数。 5. 多核烧写操作过程 5. 多核烧写操作过程 烧写:将之前生成的烧写文件通过spi的烧写工程my_spi_modify写到nor flash里 1.运行spi工程完成初始化部分,断点到ddr3测试结束,这样可以可以确认ddr3 工作正常,程序工作正常。一般断点设到 init_val= nor_init() 注意:在断点之前, 设置系统工作
21、环境并向 ddr3起始地址空间写 入09,若程序暂停到 断点时ddr3起始地址 空间为递增数,则说明 ddr3时钟等配置正常。 这一验证非常必要,因 为镜像文件需要先镜像 存储在ddr3中,之后 由spi写入到外部flash。 5. 多核烧写操作过程 烧写:将之前生成的烧写文件通过spi 的烧写工程my_spi_modify写到nor flash里 2.此时,从memory browser里 将.dat文件load到程ddr3里,在 memory browser的范围右击,选 择load memory。 5. 多核烧写操作过程 烧写:将之前生成的烧写文件通过spi的烧写工程my_spi_mod
22、ify写到nor flash里 3.选择之前产生的.dat文件,勾选 use head imformation的选项,点击next。 注意: .dat文件路径不 能有中文,否则不能导入 到内存中! 5. 多核烧写操作过程 烧写:将之前生成的烧写文件通过spi的烧写工程my_spi_modify写到nor flash里 4.确定地址和长度填写正确(地址为0 x80000000 ddr3首地址,长度为.dat文件 长度),点击finish。 5. 多核烧写操作过程 烧写:将之前生成的烧写文件通过spi的工程my_spi_modify写到nor flash里 5.让程序继续执行,清除掉flash里内
23、容之后,将ddr3 0 x80000000开始的内容 写入flash,最多可写入16mb(最大容量),目前程序也是这么写的。写完再将 spi数据读出来,进行对比,检查是否错误。 目前写入是按照16mb写入的,时间比较久,可以根据程序大小,将spilength 的宏 定义改小,当然对比数据大小的时候,要做相应更改,不然会因为比较的数据多余实 际读写的数据,而产生对比误报。 5. 多核烧写操作过程 烧写:将之前生成的烧写文件通过spi的烧写工程my_spi_modify写到nor flash里 5.让程序继续执行,清除掉flash里内容之后,将ddr3 0 x80000000开始的内容 写入flash,最多可写入16mb(最大容量),目前程序也是这么写的。写完再将 spi数据读出来,进行对比,检查是否错误。 目前写入是按照16mb写入的,时间比较久,可以根据程序大小,将spilength 的宏 定义改小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年初级新能源客户投诉基础常识考试试卷及答案
- 2026年保安出入管理试题及答案
- 2026秋小学沪教版英语五年级上册(新教材)教学计划附进度表
- 2026年全国法律硕士(法学)联考真题及答案
- 2026年北京教师招聘《教育综合知识》模拟试题
- 2026年第三季度查对制度试卷及答案
- 2026年秋季学期校园安全高质量国旗下讲话稿8篇
- 2026年四川省马尔康市高三数学下册期末考试模拟检测卷含答案(能力提)
- 化工单元操作工岗前安全规程考核试卷含答案
- 锂焙烧工操作能力水平考核试卷含答案
- 高三化学一轮复习“钠及其化合物”教学设计
- 修订一单一库质量手册和程序文件参考文件
- DB15-T 3583-2024 黄河灌区轻中度盐碱耕地建设高标准农田技术规程
- 2026中国小儿助消化药行业竞争态势与盈利趋势预测报告
- 智慧水务系统智能调度优化方案
- 2025年小米电动汽车购车合同
- 美剧口语9000句课件
- 常压储罐呼吸阀培训课件
- 海洋智能装备研发重点
- 【MOOC】数据结构与算法-北京大学 中国大学慕课MOOC答案
- DL∕T 246-2015 化学监督导则
评论
0/150
提交评论