DM36x通过SD卡启动和烧写程序
??????? DM36X的SD BOOT网上的文章已经很多了,我也是根据网友的总结一步一步做出来的。经过昨天一天悲催的调试,今天终于找到原因并能启动了。为何悲催,就是因为我板子上是根据APPRO的方案做的,接出来的调试口不是串口0,而是串口1。害我折腾一天都看不到打印信息,一直以为我的步骤哪里出问题了。 ??????? 先来简单说下DM36X的启动方式。DM36X能通过8种方式启动,启动的时候通过设置BTSET[2:0]这3个脚来选择。当BTSET[2:0]=001的时候,可直接从AEMIF接口上的NOR或者OneNand启动,因为这两种存储介质地址是线性的,CPU可以直接像RAM一样读取指令,所以能直接启动。当BTSET[2:0]!=001的时候,CPU会执行内部ROM的代码,这部分代码是芯片出厂前已经固化好的,称为RBL(ROM Boot Loader)。RBL通过读取BTSET[2:0]来选择启动方式:
? ??????? 从上表可以看出,当从NAND启动不成功的时候会自动跳到SD BOOT的方式,这样的设计有个好处就是当产品的NAND出问题的时候能通过SD卡来解救。这么多种启动方式,我想对于量产来说用UART和SD都是很方便的烧写方法。所以我主要试了这两个启动方式。下面先介绍下SD启动吧。 ??????? SD卡启动原理其实就是RBL从SD卡上读取一个简单的程序,这个程序可以通过串口进行交互,可以烧写NAND,可以启动UBL,UBOOT等。所以SD卡要事先通过一个专门的工具格式化为RBL能识别的方式,这部分都包含在dm3xx_sd_boot这个代码里面。 先下载最新的dm3xx_sd_boot,下载地址为http://www.linux-davinci.info/data/boot/dm3xx_sd_boot-6.1.tgz 解压之后里面有多个文件和目录,先简单介绍下几个目录及文件的功能: dm3xx_boot_make_image.c? 这个文件编译出来的工具就是PC上用来操作SD卡的工具,包括格式化和把要烧写的文件写到SD卡上。编译后会在bin.x86目录底下生成dm3xx_boot_make_image这个工具。 dm3xx_sd_boot??? 这个文件是个脚本文件,我们操作SD卡的时候都是通过这个文件来完成。这个脚本会调用上面说的dm3xx_boot_make_image。 dm3xx_sd.config?? 这个文件主要是配置你使用的平台,是DM36x还是DM35x,还有最重要的是指定你要写到SD卡中的ubl,uboot,kernel,rootfs文件的名称。 flash_utils?? 这个目录其实跟UBL是一样的,在这里主要是使用了里面的部分初始化CPU的代码。 sdcard_flash? 这目录下的代码是SD启动烧写NAND的最关键的文件,编译后会生成sdcard_flash_DM36x.bin,这个程序会被RBL启动,然后由它来完成启动或者烧写NAND,这些都通过串口来交互选择。 original??? 这个目录就是存放你要烧写的UBL,UBOOT,KERNEL,ROTFS的文件。只要把那些文件复制进去就可以了。 ? 主要的文件就是上面这些了,现在来修改一些内容把它适应于我的板子: 1.主目录下的makefile 屏蔽DM35X平台的操作(当然,这步不是必须的)。 在clean下加入rm -f $(BIN)/dm3xx_boot_make_image(也不是必须的)。 2.修改dm3xx_sd.config 指定你要烧写的文件的具体名称以及你用的是什么平台,并将烧写的文件拷贝到original目录下。 3.修改dm3xx_sd_boot-6.1/flash_utils/DM36x/GNU/ubl/ubl.lds 根据你板子的硬件情况修改内存大小与起始地址,NAND大小与起始地址。 4. 修改sdcard_flash/Makefile 指定编译工具链, 将第一行ROSSCOMPILE?= arm_v5t_le-???? 改为? CROSSCOMPILE?=arm-none-linux-gnueabi- 增加一行 ?CFLAGS+= -mabi=aapcs-linux 5.修改sdcard_flash/sdboot_flash_cfg.h ?? 这个文件定义了UBL,UBOOT等装载到DDR的地址,烧写到NAND中的地址,文件大小以及在SD卡中的地址。这部分需要根据你的实际文件大小来改,避免地址重叠在一起引起不成功。 ? ? OK,完成了上面的步骤后就可以编译了,在dm3xx_sd_boot-6.1目录下: make clean make ? ? 上面代码部分的编译完成后,开始制作启动用的SD卡。(以下操作的路径都是在dm3xx_sd_boot-6.1下) 1.在电脑上插入一张SD卡,识别后可用df 或者sudo fdisk -l 命令来查看下挂载信息。如看到的挂载信息是挂载点位 /dev/sdb1 2.格式化SD卡: sudo ./dm3xx_sd_boot format /dev/<sd device>?? ??? 注意:命令中的<sd device>??就是第一步看到的SD卡设备号,如sdb1那就是sdb;sdc1就是sdc。 ? 成功的话会看到输出的打印中有两行绿色的提示: ? ?....... ?? SD card /dev/sdb formatted ??? ......... ??? dm3xx boot record is written ?? 格式成功后,在SD上有个dm3xx.dat的文件。 3.拔出SD卡然后重新插入。 4.运行命令:make install ?? 打印的信息会列出各个文件在SD卡的路径,如果文件地址重叠报错,那么去修改sdcard_flash/sdboot_flash_cfg.h ?完成以上操作后,SD启动卡已经制作完成,下面的工作是在板子上完成的。 5. 把板子通过跳线设为从SD卡启动,接上串口0,把刚才制作的SD卡插到板子上。 6.上电,看到串口有信息输出,可通过数字选择需要的操作
7. 选择 2 - install,就可以把 UBL,u-boot,uImage ... 下载到 NAND flash 中 8. 板子下电,然后启动改为NAND启动,重新上电就可以正常从NAND启动了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 2440烧写flash问题
- \res\values\styles.xml:7: error: &am
- 实体框架 – 具有实体框架的SQLite
- ruby-on-rails-4 – Rails coffeescript:TypeError:Objec
- 被误解好久的正则表达式之后向引用
- c++语言基础—多态—创建雇员信息类
- 英文词典, 以AutoCompleteTextView输入内容到SQLite数据库查
- pipeline and redirect
- SqlMapConfig.xml---在spring配置文件中自动加载的mybatis文
- c – 如何在Visual Studio 2010中设置单独的Boost测试项目