烧写eboot.nb0后系统仍从之前的xip.nb0启动
最近发现一个很奇怪的问题:在使用DNW烧写系统时,先将xip.nb0烧写进去,然后烧写eboot.nb0.但此时系统会自动重启并且加载的还是之前的xip.nb0
初步分析发现eboot下的BootloaderMain();函数根本就没被执行
如下是异常时和成功时的串口信息:
1.异常情况
###### Select Menu ######
[0] Download & Run
[1] Download Only
[2] Test SDRAM
[3] Change The Console UART Ch.
[4] Clear unused area in SDRAM
Download Only is selected.
Enter temporary download address,if not input,Defualt=0x32001000
Enter temporary download address:
The temporary download address is 0x32001000.
USB host is connected. Waiting a download.
Now, Downloading [ADDRESS:32001000h,TOTAL:30408714]
RECEIVED FILE SIZE:30408714
(919.8KB/S,33.1S)
Download O.K.
###### Select Menu ######
[0] Download & Run
[1] Download Only
[2] Test SDRAM
[3] Change The Console UART Ch.
[4] Clear unused area in SDRAM
Download&Run is selected.
USB host is connected. Waiting a download.
Now, Downloading [ADDRESS:30038000h,TOTAL:262154]
RECEIVED FILE SIZE: 262154
(879.9KB/S,0.3S)
Download O.K.
2.正常情况
###### Select Menu ######
[0] Download & Run
[1] Download Only
[2] Test SDRAM
[3] Change The Console UART Ch.
[4] Clear unused area in SDRAM
Download Only is selected.
Enter temporary download address,if not input,Defualt=0x32001000
Enter temporary download address:
The temporary download address is 0x32001000.
USB host is connected. Waiting a download.
Now, Downloading [ADDRESS:32001000h,TOTAL:30408714]
RECEIVED FILE SIZE:30408714
(926.3KB/S,32.8S)
Download O.K.
###### Select Menu ######
[0] Download & Run
[1] Download Only
[2] Test SDRAM
[3] Change The Console UART Ch.
[4] Clear unused area in SDRAM
Download&Run is selected.
USB host is connected. Waiting a download.
Now, Downloading [ADDRESS:30038000h,TOTAL:262154]
RECEIVED FILE SIZE: 262154
(884.0KB/S,0.3S)
Download O.K.
Microsoft Windows CE Ethernet Bootloader Common Library Version 1.1 Built Sep 30 2007 16:01:20
Microsoft Windows CE Bootloader for the QT2440 Version 2.4 Built Sep 3 seconds.
Ethernet Boot Loader Configuration:
0) IP address: 0.0.0.0
1) Subnet mask: 255.255.255.0
2) DHCP: Disabled
3) Boot delay: 5 seconds
4) Reset to factory default configuration
5) Startup image: LAUNCH EXISTING
6) Program disk image into SmartMedia card: Enabled
7) Program CS8900 MAC address (00:00:00:00:00:00)
8) Kernel Debugger: ENABLED
9) Format Boot Media for BinFS
A) Mark bootloader sectors as reserved
F) Low-level format the Smart Media card
D) Download image now
L) LAUNCH existing Boot Media image
R) Read Configuration
W) Write Configuration Right Now
X) FS1610 PMIC Menu
Enter your selection: X
EBOOT和XIP分别是两样东西,一个是bootloader,一个是os,你只更新了eboot,OS当然还是之前的了,所以肯定还是以前的XIP。
sorry,是我没表达清楚,我是先down的xip.nb0,然后再down的eboot.nb0
然后手动让其断电重启呢?还是以前的xip?是否没烧录成功?还是在down之前就已经将OS数据读到内存了,所以启动的时候是用的内存的OS?
两个问题:1 确定是在烧写而不是用2440MON下载到内存运行?
2 开发板的启动方式?NOR ? NAND ?
我看的还不是很懂!呵呵~~
见谅哈~~~
1.LZ到底想要什么效果呢?
2.正如韦伯所说,xip.nb0是OS,而eboot.nb0是bootloader,就好像你操作系统起来了,然后再更新BIOS一样。
OS并没有改变啊!
以上仅是个人费解之处!
引用: 引用 3 楼 veabol 的回复:
然后手动让其断电重启呢?还是以前的xip?是否没烧录成功?还是在down之前就已经将OS数据读到内存了,所以启动的时候是用的内存的OS?
1.进行手动断电重启时,就只有第一次是加载了新的内核,之后的几次都还是之前旧的内核
2.先使用DNW将新的xip.nb0烧进去,然后烧之前ok的eboot.nb0.这样机器重启后加载的就是新的内核
我有在eboot下的BootloaderMain()函数代码中加相关的打印信息,结果显示该函数未被执行
现在对eboot下的其他代码进行其他的动作以确定其执行的具体位置
引用: 引用 5 楼 xilidecai 的回复:
我看的还不是很懂!呵呵~~
见谅哈~~~
1.LZ到底想要什么效果呢?
2.正如韦伯所说,xip.nb0是OS,而eboot.nb0是bootloader,就好像你操作系统起来了,然后再更新BIOS一样。
OS并没有改变啊!
以上仅是个人费解之处!
其实我的理解也是像你这样的,只是我现在遇到的现实是当我down新的内核和eboot.nb0时,机器上的系统并不是我刚刚down的新内核,而是之前的内核
而如果我将新的内核和之前原始的eboot.nb0结合一起烧录时机器上的系统就是新的内核
费解的很~~
引用: 引用 4 楼 linux_lee 的回复:
两个问题:1 确定是在烧写而不是用2440MON下载到内存运行?
2 开发板的启动方式?NOR ? NAND ?
1.我是使用的dnw工具下载内核的,没用过2440MON(2440MON是不是将内核直接加载进内存中的??)
2.启动方式是NandFlash
按你的意思还是解决了的嘛
至于原因,你这里是XIP,是不是实现的MULTIBIN呢?XIP本来就是在本地执行的意思。也就是说你已经下载到flash里面了。
这里面还有几点疑问:
1.你说的“如果我将新的内核和之前原始的eboot.nb0结合一起烧录时机器上的系统就是新的内核”这句话应该怎么理解?先烧写eboot.nb0再烧写xip.nb0嘛?还是什么顺序或者组合呢?
2..nb0是raw型数据,也就是原始型二进制数据快照,只能烧写进RAM不能下载到flash的。这个你要看看DownloadImage函数吧。你有没有生成.bin的文件呢?或许可以尝试一下eboot.bin烧写xip.bin,个人意见!呵呵~~
感谢托兄的建议,我最近把eboot的这个流程大概的理解了一下,稍微有了一点眉目
“1.你说的“如果我将新的内核和之前原始的eboot.nb0结合一起烧录时机器上的系统就是新的内核”这句话应该怎么理解?先烧写eboot.nb0再烧写xip.nb0嘛?还是什么顺序或者组合呢?”
针对此问题,我还是按照之前的烧写方法和步骤进行的,也就是先烧写xip.nb0,再烧写eboot.nb0,只是此时的xip.nb0是新生成的,而eboot.nb0是之前旧的,不是和这个xip.nb0同时生成的
“2..nb0是raw型数据,也就是原始型二进制数据快照,只能烧写进RAM不能下载到flash的。这个你要看看DownloadImage函数吧。你有没有生成.bin的文件呢?或许可以尝试一下eboot.bin烧写xip.bin,个人意见!呵呵~~”
感谢托兄的赐教,我才晓得.nb0是raw型数据,看来我看的还是很表面,要深入进去了解才是啊。
另外我的问题已经解决了,可以结贴了,同时也非常感谢各位的指教,谢谢!!!