极速cpsj 该用户已被删除
楼主
 
提示: 作者被禁止或删除 内容自动屏蔽
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
nk.bin的前7bytes是标志位,从第八个开始就是nk.nb0对应的起始地址,大小,校验和。存储的地址不是在nk.bin里面,而是下载完后,准备烧录到flash里去的时候确定的,因为nand可能有坏块,所以block0是不确定的。
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢!
那怎样去读取NK.bin呢?也就是说该怎样去找到nk.bin?
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
下载的时候按字节接收nk.bin,就可以分析了。

下载后就会将nk.bin的有效内容提取出来,形成标准二进制,其实就是nk.nb0的内容了。烧录到flash就会产生存储地址。
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

5
 
问题是我现在是在DNW环境下用USB端口下载,先下载NBoot,然后下载EBoot,再下载NK.bin。其中NBoot和EBoot不用每次都下载,主要是更新不同的NK.bin文件
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

6
 
以下是已经用VIVI下载NBoot和EBoot后,输入W,用usb端口下载NK.bin的调试输出消息:
##### FriendlyARM BIOS for 2440 #####
[x] bon part 0 320k 2368k
[v] Download vivi
[k] Download linux kernel
[y] Download root_yaffs image
[c] Download root_cramfs image
[a] Absolute User Application
[n] Download Nboot
[e] Download Eboot
Download WinCE NK.nb0
[w] Download WinCE NK.bin
[d] Download & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the nand flash
[p] Partition for Linux
Boot the system
Set the boot parameters
[t] Print the TOC struct of wince
Backup NAND Flash to HOST through USB(upload)
[r] Restore NAND Flash from HOST through USB
[q] Goto shell of vivi
Enter your selection: w
Clear the free memory .............................................................
Read eboot image from flash ......
ReadImageFromNand: TOC is invalidate: 0x1, use default toc to load eboot
Sector addr on NAND: 0x100
TotalSector: 0x100
LoadAddress: 0x30038000
JumpAddr: 0x30038000

Now, to download the wince image(nk.bin) ......
USB host is connected. Waiting a download.

Now, Downloading [ADDRESS:30058000h,TOTAL:28481921]
Downloaded file at 0x30000000, size = 28481911 bytes
Mark bad blocks as unused ......
Extract wince image throught USB ......

OEMMultiBINNotify: Download BIN file information:
-----------------------------------------------------
[0]: Base Address=0x8c200000  Length=0x1b90310
-----------------------------------------------------
OEMVerifyMemory: StartAddr: 0x8c200000, Length:0x1b90310
*** Downloading UNKNOWN image type ***
...........................
dwImageStart : 0x8c200000
dwImageLength: 0x1b90310
LaunchAddr   : 0x8c201000

rom_offset=0x0.
Run eboot, JumpAddr = 0x30038000
..
从这里开始是EBoot启动了,这里出现了NK.bin镜像起始地址(dwImageStart)和大小(dwImageLength)以及启动地址(dwLaunchAddr),但是再eboot中能直接使用这个数据么?一边下载的NK.bin是先暂存在ram中的,那这个暂存的RAM地址是怎样确定的?如果知道这个暂存的RAM地址,那就可以去读取NK.bin的参数了!
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

7
 
eboot中有详细的代码啊,
下载后会解析的。

找到nk.bin文件的标志,以及offset等,然后开始确定,这个地址在代码中计算出来的。

eboot功能比较完善了,万一发现坏快就会寻找下一块的。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用楼主 iwillbeback008 的帖子:
在DNW环境下用VIVI下载NBoot和EBoot以及NK.bin,那如何在Eboot中读取出NK.bin的镜像存储的起始地址(dwImageStart)和大小(dwImageLength)以及启动地址(dwLaunchAddr)?


dwLaunchAddr也是计算出来的。并不固定。有汇编代码的。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
up
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
up
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
OEMMultiBINNotify: Download BIN file information:
-----------------------------------------------------
[0]: Base Address=0x8c200000  Length=0x1b90310
-----------------------------------------------------
OEMVerifyMemory: StartAddr: 0x8c200000, Length:0x1b90310  <----------你用UltraEdit打开nk.bin,16进制形式查看,第8个字节开始就能看到这两个数值了
*** Downloading UNKNOWN image type ***         <-------------很奇怪,为什么会有这样的信息?当然实际上结果没出问题。
...........................
dwImageStart : 0x8c200000
dwImageLength: 0x1b90310
LaunchAddr  : 0x8c201000   <---------wince在dwImageStart开始后都会jump到0x1000,你换其他平台看也会发现这个值就是前面那个Start+0x1000。

rom_offset=0x0.
Run eboot, JumpAddr = 0x30038000
..
从这里开始是EBoot启动了,  <---------这里怎么会是eboot启动呢?你的eboot是不是改过了?下载完nk,烧录到flash后,一般是直接跳转了执行nk启动系统了。

“一边下载的NK.bin是先暂存在ram中的,那这个暂存的RAM地址是怎样确定的?”
存在sdram的这个地址是确定的,就是dwImageStart : 0x8c200000。而且每次重新启动,eboot加载nk时,也是防在这同一个位置的。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
对,我的EBoot就是要修改的。目的是,能在DNW环境下,用USB下载NK.bin镜像,然后由NBoot遇到eboo去把镜像烧录到Flash或是由NBoot直接启动已有的镜像。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
(*^__^*) 嘻嘻……
shuiyan前辈这么厉害,咋就不回答我的问题呢?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
(*^__^*) 嘻嘻……
shuiyan前辈这么厉害,咋就不回答我的问题呢?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
那在EBOOT中如何读写SDRAM,有相关现出的函数可以调用么?
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

16
 
怎懑没有人回答了?

在EBOOT中如何读写SDRAM,有相关现出的函数可以调用么?还是要自己写函数?
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

17
 
eboot读写sdram就是直接对地址进行操作即可。比如
x = addr; //addr是一个地址,这样就是从sdram读
addr = x+1; //addr是一个地址,这样就是向sdram写
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 shuiyan 的回复:
eboot读写sdram就是直接对地址进行操作即可。比如
x = addr; //addr是一个地址,这样就是从sdram读
addr = x+1; //addr是一个地址,这样就是向sdram写


我的Eboot启动时已经开启了MMU,那这个地址addr也就是虚拟地址咯?
比如我要读取物理地址为0x30000000(对应虚拟地址为0x8C000000)开始的SDRAM的数据,那就要写成:
x = 0x8C00 0000;
对不?这个格式我觉得很别扭啊
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

19
 
是的,就是虚拟地址。

上面描述错了,应该是将地址当成指针
x = (unsigned int) *(addr);
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

20
 
那如果这样,我利用memcpy()函数,把读取SDRAM的写成如下形式可以吧?

DWORD Address;         
DWORD Buffer;       

Address = 0x8c200000;
memcpy(&Buffer,(LPBYTE)(Address+7),4);        //镜像起始地址
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表