打印

请教大虾,关于裸奔的问题,

[复制链接]
1975|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
oiu|  楼主 | 2008-1-10 22:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠现在遇到一个问题请教大家:
我现在写了一个小程序就是让led灯闪,通过ads 生成了flash.bin 文件,
开发板上已经下载有了bios,功能如下:
Please select function : 
0 : USB download file
1 : Uart download file
2 : Write Nand flash with download file
3 : Load Pragram from Nand flash and run
4 : Erase Nand flash regions
5 : Write NOR flash with download file
6 : Set boot params
7 : Set AutoBoot parameter,1:linux 2:wince
通过bios,把flash.bin文件下载到开发板上sdram中,并跑起来一切ok,也可以借助bios把flash.bin文件烧写道nand中。现在的问题是,拔掉电源,在上电后,bios执行完了以后flash.bin 文件没有执行,问什么如果下载的是linux那么bios执行完了以后会自动启动linux 而下载的是flash.bin 就不会?那样怎样做才能使执行完bios后自动执行flash.bin?
x谢谢了,很是郁闷啊

相关帖子

沙发
平常人| | 2008-1-10 22:23 | 只看该作者

哈哈,大虾没有问题,是你有问题。

用的是什么开发板,什么软件,你也没有说,谁也不知道你是什么问题~~~~~~

使用特权

评论回复
板凳
s321k| | 2008-1-10 23:13 | 只看该作者

在bios里面添个语句

先把你的程序复制到ram,然后调用它就行了

使用特权

评论回复
地板
oiu|  楼主 | 2008-1-10 23:31 | 只看该作者

忧龙的板子fs2410

刚买回来的时候板子上面nand中烧写了bios,linux.原本上电后(nand启动)dnw看到启动bios,也就是上面的7点功能,在等上几秒钟他就自动进入linux,z这些从dnw上可以看到。我把跳线拔了让他从nor启动,把nand里面的东西全部擦除了(做实验),现在我把bios重新烧写到了nand,nand里面没有了linux,然后把开发板的跳线接上让他从nand 启动,把flash.bin下载到ram中并run,可以看到led 闪。但是reset 后就不闪了,就是把flash.bin烧写的nand中,reset后也不行。
现在的问题是怎么才能reset 后还能闪,也就是说怎样才能使flash.bin 也能够像linux一样,启动bios后果几秒钟就自动run.

使用特权

评论回复
5
农民讲习所| | 2008-1-11 09:44 | 只看该作者
6
oiu|  楼主 | 2008-1-11 15:08 | 只看该作者

还有2个问题,相信初学者和我一样迷茫

谢谢各位指教,
现在我把flash.bin(小于4k)烧写道nand 的0x0000000的起始位置,然后让开发板从nand启动,就可以看到led灯在闪了(裸奔,bios也不要了),不过闪的频率变了,我还要改一下里面的时钟设置才行。
如果flash.bin大于4k就需要bios把flash.bin拷贝到sdram中才能执行了,
现在有2个疑问
1,譬如开发板上跑的是linux系统,也就是nand中烧写了bios和linux系统,设定从nand启动,那么bios里面必须要有把linux系统拷贝到sdram的代码,这段代码也就是通常bios在初始化堆栈,和中断向量表后的所谓copy to ram (与Image$$RO$$Base,Image$$RO$$Limit,相关的代码)??我的理解是好像copy bios自身到sdram,而不是copy linux到sdram中(因为bios 一般都大于4k),何况bios根本不知道nand中linux内核的起始位置和大小,怎么copy?
2,bios启动完成后他要启动linux,bios 是怎么找到linux的启动入口点的?既然nand中的linux内核必须要copy 2 sdram 中才能run,也就是说内核的大小不能超过sdram 的大小?而不像windows 那样把需要执行的才调入内存。

使用特权

评论回复
7
dld2| | 2008-1-11 15:16 | 只看该作者

两级

bios < 4KB,放在NAND的0地址。
    功能:拷贝laoder到SDRAM。

loader > 4KB,放在NAND的某固定位置。
    功能:可以通过通讯通道下载程序到SDRAM,然后去执行。

使用特权

评论回复
8
oiu|  楼主 | 2008-1-11 18:44 | 只看该作者

可不可详细一点

从nand 启动时,内置的NAND Flash 将访问控制接口,并将代码自动
加载到内部SRAM(此时该SRAM 定位于起始地址空间0x00000000,容量为4KB)并且运行。之后,SRAM 中的引导程序将操作系统镜像加载到SDRAM 中,操作系统就能够在SDRAM 中运行。是不是该这样理解:
1,bios 大于4k,bios 也应该放在nand 的0x00000000的起始位置,reset时,bios的前4k被自动加载到了sram中(sram的起始地址空间为0x0000000),bios 4k以后的代码以及linux内核都要被copy 到sdram 中。而实现把部分bios 和内核copy 到sdram的代码,就是在bios初始化完堆栈后的那些代码?

使用特权

评论回复
9
dld2| | 2008-1-12 08:28 | 只看该作者

re:

bios为什么一定要大于4K呢?
我的意思是,写两个程序。
第一个程序小于4K,仅实现将第二个程序copyToRam。
第二个程序可实现较复杂的加载功能,可通过串口下载应用或内核,将其拷贝到RAM去执行,或者写FLASH等等。
这两个程序都是通过仿真器烧写到NAND flash的。

你说的“1,bios 大于4k,bios 也应该放在nand 的0x00000000的起始位置,reset时,bios的前4k被自动加载到了sram中(sram的起始地址空间为0x0000000),bios 4k以后的代码以及linux内核都要被copy 到sdram 中。而实现把部分bios 和内核copy 到sdram的代码,就是在bios初始化完堆栈后的那些代码?”
我认为即时能够实现,也很麻烦。

使用特权

评论回复
10
high| | 2008-1-12 13:10 | 只看该作者

要用分散加载来实现

vivi是一个例子.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

oiu

28

主题

81

帖子

0

粉丝