搜索
bottom↓
回复: 7

今天在linux上遇到一个非常神奇的问题。。。

[复制链接]

出0入0汤圆

发表于 2010-10-28 11:08:39 | 显示全部楼层 |阅读模式
呵呵,我一直在搞东芝ARM9的开发和linux移植,遇到了很多问题,也谢谢这里的大哥们以前的帮忙。。。
一般的ARM9启动都支持NAND和NOR,
NOR是直接跑NOR里面的BOOTloader程序,然后进行内核引导
NAND是将NAND里面的的BOOTloader程序拷贝到内存中,然后进行内核引导
内核引导,其实不管是什么启动,只要BOOTloader起来了,都是一样的,至少我这里是一样的,都是直接把内核从nand里面拷贝到一个内存里面,然后BOOTM

两个启动方式中,我的BOOTLOADER ,和内核uImage都是一模一样的,没有做任何的改变

我现在遇到了一个奇怪的问题
当我从NOR启动的时候,
上电
-》启动BOOTLOADER(UBOOT)
-》拷贝内核到内存  (nand read 0x40600000 0x80000 0x280000\ )
-》启动内核;(bootm 0x406000000
-》成功,能够启动内核

当我从NAND启动的时候,
-》拷贝BOOTloader到内存 (成功)
-》启动BOOTLOADER(UBOOT)(成功)
-》拷贝内核到内存  (nand read 0x40600000 0x80000 0x280000\ )(成功)
-》启动内核;(bootm 0x406000000
-》问题出现在这里
console [ttyS0] enabled
Calibrating delay loop... 0.81 BogoMIPS (lpj=4096)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency:
跑到这里就死掉了。。。但是从NOR里面启动和引导的时候
console [ttyS0] enabled
Calibrating delay loop... 95.84 BogoMIPS (lpj=479232)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
这里是正常跑过去的
这像内核的问题,但是我NOR启动和NAND启动的内核,BOOTLOADER都一摸一样,这个问题真是让我无解啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2010-10-28 13:04:32 | 显示全部楼层
前辈你在哪里呀?

出0入0汤圆

发表于 2010-10-28 14:06:17 | 显示全部楼层
可能是SDRAM初始化不对。从nandflash启动时,SDRAM初始化在nandflash boot程序中完成,nandflash boot初始化SDRAM后,把UBoot从nandflash中取出来放到SDRAM中运行。后面的处理和norflash启动一样。

可以查查看nandflash boot程序中初始化SDRAM的部分是否和norflash启动时的一致。

出0入0汤圆

 楼主| 发表于 2010-10-28 15:59:07 | 显示全部楼层
回复【2楼】mcu.runner  
-----------------------------------------------------------------------

MCU,我有点不明白,BOOTLOADER都是同样的代码,我需要在哪里查看呢?

出0入0汤圆

发表于 2010-10-28 16:35:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-28 16:56:54 | 显示全部楼层
这个问题可能和你的读NANDFLASH代码有关,虽然bootloader是一样的,但是CPU运行bootloader代码的过程是不一样的,一个是从NOR拷贝到SDRAM,另一个是从NAND拷贝到SDRAM。NAND的操作比NOR要复杂,有坏块处理,每个page还包含spare信息,你可以查查看。

出0入0汤圆

发表于 2010-10-28 16:57:37 | 显示全部楼层
回复【3楼】 h85968099
----------------------------------------

nandflash boot过程是这样的:

1、ARM9 先把nandflash开始的若干页的内容(一般是4KB)读到片上SRAM中(片上SRAM不用作特别的初始化)。这步由ARM9自动完成。然后,ARM9跳到这段代码的起始位置开始执行。这段代码,一般称为nandflash bootloader。
2、nandflash bootloader完成SDRAM的初始化,并且把 Uboot 从 nandflash 中读出来放到 SDRAM中,然后从 U-Boot 开始执行。

上面初始化SDRAM的过程是在 nandflash bootloader 中完成的。如果选择从norflash启动,U-Boot 可以直接放到norflash中运行。这时候,SDRAM的初始化过程由 U-Boot 完成。

所以,可以比较一下 nandflash bootloader 的SDRAM初始化过程和U-Boot的SDRAM初始化过程是否一致。

你说的"Bootloader都是同样的代码",可能还暗含有:nandflash启动时,U-Boot 重复初始化 SDRAM的嫌疑。U-Boot本身还在SDRAM中,此时重复初始化SDRAM很危险的。

出0入0汤圆

 楼主| 发表于 2010-10-28 17:48:22 | 显示全部楼层
回复【6楼】mcu.runner  
-----------------------------------------------------------------------

哦,这样啊,知道了,在NAND启动的时候,在UBOOT之前是有一个小程序,AUTOBOOT程序,呵呵,我去查阅一下,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 03:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表