ifree64 发表于 2012-10-31 11:57:31

OK6410板SD卡启动裸机程序的简单方法。

读了网上大量的6410裸机调试文章,经过无数次的失败,终于从sd卡启动,跑起了简单的裸机程序,现在在这里把方法与大家分享一下。

1、我对SD卡启动原理的肤浅理解
6410板子上电后,和所有的CPU一样,都会去从一个指定的地方执行指令,ARM好像是到0x0000_0000出执行指令;因此我们的裸机代码必须放到
存储空间的这个位置去。6410有一个启动模式:IROM启动,启动时会将芯片内部固化的一段代码映射到0x0000_0000开始的内存地址出,于是芯片内部
固化的代码在CPU复位时得到执行,这段代码的一个任务从外部某个存储介质的某个分区的代码复制到芯片内部sram中去,然后跳转到那里去,这个跳转是
irom的代码完成的。我们需要做的就是把自己写好的裸机代码放到那个存储介质的那个分区里去。

2、裸机代码放到SD卡的哪里呢?
当选择SD卡启动时,我的理解就是芯片会将SD卡里某个扇区的代码加载到片内的SRAM,然后跳转到SRAM,我们自己的代码就得到运行了。可是这个“某个扇区”是哪里呢?网上有讨论说是:16MB的SD卡在倒数第18个扇区,2G以上的在倒数第521个扇区,但我一张2G的SD卡,两个位置都实验了,不行。
后来我直接利用开发板提供的SD_Writer程序将我自己的裸机程序写到SD卡,然后一试,居然成功了。所以简单方法就是:

3、启动裸机程序的简单方法


如上图,将自己写好的裸机程序(bin格式的)直接作为启动代码,按program按钮就可以了。

虽然成功了,但最后我还是不知道该将自己的裸机代码放到SD卡的那个位置。我用winhex在SD卡里搜索自己逻辑代码的二进制,也搜索不到,不知道sd_writer裸机代码写到那个鬼地方去了,有知道的吗?若你知道,希望你告诉我,多谢。
最后,如果你有兴趣一试,祝你成功。

SD_Writer


yulutong 发表于 2012-12-11 08:01:46

楼主分析的很对,现在弄明白了么?

ifree64 发表于 2012-12-11 08:20:24

yulutong 发表于 2012-12-11 08:01 static/image/common/back.gif
楼主分析的很对,现在弄明白了么?

没有去管这个问题了,因为后来发现可以直接使用uboot来在线下载裸机程序。

yulutong 发表于 2012-12-11 10:22:36

你是可以这样的?
ADS的RO BASE配置成UBOOT跳转地址。把裸机程序,UBOOT通过TFTP写到NAND 上去。
那要专门做个有网络的底板了,烧写完后把核心板再拔出来。

ifree64 发表于 2012-12-11 12:02:47

我的方法大致是这样的:
entry设置为0x50000000;编译得到bin二进制文件,通过dnw下载到开发板sram,uboot通过goto 0x50000000运行裸机程序。
当然由于uboot已经做了开发板的初始化,所以严格来说不是裸机运行。

NJ8888 发表于 2012-12-11 12:08:58

我想问下6410裸奔好处在哪里?能使用虚拟内存吗?

ifree64 发表于 2012-12-11 12:26:22

裸奔的目的在于使得初学简单,不一上来就去接触复杂的linux移植、复杂的linux驱动。
如果仅仅是编写别人已经移植好的linux下的任务程序,它和直接在pc机上的linux下的程序没有太大的区别,可以直接在pc机上作实验了。
页: [1]
查看完整版本: OK6410板SD卡启动裸机程序的简单方法。