UBOOT SD卡搬运到DDR中

来源:互联网 发布:java调用dll JNI 编辑:程序博客网 时间:2024/05/16 10:36

UBOOT SD卡搬运到DDR中

去;;;;代码实现::

typedef unsigned int u32;
typedef unsigned long ulong;

typedef unsigned int (*copy_sd_mmc_to_mem)
(u32 channel, u32 start_block, unsigned char block_size, u32 *trg, u32 init);

void copy_code_to_dram(void)
{
ulong ch;
ulong dest = 0x34800000;
unsigned int uImage_dest = 30008000;
unsigned int uImage_sec_nu = 1000(我们自己定义的地方,之前的给uboot留出够了);//从sd卡的第1000个扇区开始去搬运uImage ,当然前提你烧录时候就要
时候把uImage 烧录到sd 卡的第1000个扇区。。。烧录脚本很简单。。。dd iflag=dysnc oflag=dysnc if=uImage of=/dev/sdb (uImage 的生成步骤其实很简单的 :写一下吧:::
在 tools找到mkimage ;;;;mkimage -n “wdh_kernel” -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage ;;;;;;;查看信息:::ll *Image

)
u32 ret;

    ch = *(volatile u32 *)(0xD0037488);    copy_sd_mmc_to_mem copy_bl2 =        (copy_sd_mmc_to_mem) (*(u32 *) (0xD0037F98));unsigned int uImage_dest = 0x30008000;    unsigned int uImage_sec_nu = 1000; ulong dest = 0x34800000;    unsigned int sec_nu = 49;    if (ch == 0xEB000000) {            ret = copy_bl2(0, sec_nu,       128,(u32 *)dest , 0);            ret = copy_bl2(0, sec_nu+128,   128,(u32 *)(dest+0x10000) , 0);            ret = copy_bl2(0, sec_nu+256,   128,(u32 *)(dest+0x20000) , 0);            //ret = copy_b12(0, sec_nu+384, 128,(u32 *)(dest+0x30000) , 0);            for(i = 0;i < 5*1024(5M大小,其实是4.6M这是smart210的官方zImage 的大小,可以看出的吧);i++)            {                    copy_b12(0,uImage_sec_nu + i*2(自动加1K,,,懂了吧),2(一次搬动2个扇区1K 1K 的搬到ddr中去), (unsigned int *)(uImage_dest + i*1024(当然要自动加1K了  你懂的)),0);            }    }

serctor 扇区这样的算法会耗时但是比较好写和理解 所以你需要去弄得有效率的话,就可以自己去计算,,,256serctor 去搬运也可以,,,,,这里简化了

0 0
原创粉丝点击