这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 下载专区 » [原创]4510 bootloader的实现与分析 (附源代码)

共108条 3/11 1 2 3 4 5 6 ›| 跳转至
菜鸟
2004-07-15 05:38:00     打赏
21楼
hap!!

菜鸟
2004-07-25 01:23:00     打赏
22楼
刚看完你的文章和源码,很受启发,非常感谢! 现在有个问题想请教.在你的文章上说UCLINUX 编译完后会生成image.rom的内核映像文件其中包括了一个bootloader,那么是不是在uclinux的内核文件中已经包括了一个bootloader(也就是你说的一个bios程序),它有在内核的那一部分呢? 还有对于s3c451b的所有系统资源内核是通过什么来得到它们的地址的,是在内核的文件中已经有定义了吗?那么在设计板子的时候是不是要按照这些设置打尖外围设备! 初学者,见笑!

菜鸟
2004-08-06 11:43:00     打赏
23楼
非常感谢楼主! 学习中。。。

菜鸟
2004-08-06 23:16:00     打赏
24楼
求助!求助!求助!求助!求助!求助! 各位DX: 下面是我的S3C4510B板子启动运行后的状态: ------------------------------------------------------------------------------------------------ Compex BIOS for SAMSUNG S3C4510B v1.20-lt74

Press Enter for Menu, Esc for Safe Mode

Initializing system .... Done
Found W29C040P at 0x00000000
Found SST39VF160 at 0x00080000

Password: ***


Main Menu

1 - BIOS Setup
2 - Run Fdisk
3 - Load Image
4 - Update Image
5 - Reboot

Please Select

-----------------------------------------------------------------------------------------------------
这是我找的BOOTLOADER,有修改,选取: 4 - Update Image 进行TFTP 下载IMAGE.ROM,发现总是超时,但后来下一个不到250个字节的文件就可以下载成功,不知是什么原因,还请各位DX指点一二,我已被这个问题搞“江郎才尽”了。。。。。。。

菜鸟
2004-08-09 18:17:00     打赏
25楼
感谢twentyone给我们提供了这么好的资料,使我们少走了很多弯路,在此谢谢了。 不过我对你写的程序还是有两点疑问,如果你有空,还望你解答一下: ;Part 5
;***************************************************************
;Self copy from FLASH to SDRAM LDR r0, =|Image$$RO$$Base|
LDR r1, =|Image$$RO$$Limit|
LDR r2, =|Image$$RW$$Base|
LDR r3, =|Image$$RW$$Limit| SUB r1, r1, r0
SUB r3, r3, r2
ADD r1, r1, r3

LDR r2, =0x200000 ;@2M (ADD R2,R2,R0 ;应该加上这一句。 LDR
COPY
LDR r3, [r0], #4
STR r3, [r2], #4
SUBS r1, r1, #4
BNE COPY
第一个问题就是上面这短从FLASH拷贝RO,RW到SDRAM,从你写的程序中可以看到,在FLASH中,你开始搬移的地址是|Image$$RO$$Base| ,结束的地址是 |Image$$RO$$Base| +R1,(这里的R1就是上面算出的RO加RW的容量),但是你搬到SDRAM的起始地址是0x200000 (也就是SDRAM的起始地址0X0),结束地址是0x200000 +R1。很明显|Image$$RO$$Base| 并不总是恒等于OX0的!!!!这跟ARMLINK里的RO设置有关。所以你上面这样写我觉得不是很妥。应该加上如上的一句。 另外一个问题是:我因为没有具体写过BOOTLOADER,不知道中断向量表是怎么处理的。如果我们把RO设为0X0,那岂不是把中断向量表给覆盖了。那又怎么移植?还是OS能自动处理,在BOOTLOAD不用管这一步的?/

菜鸟
2004-08-12 03:50:00     打赏
26楼
以下是引用tianwen在2004-8-9 10:17:00的发言:
感谢twentyone给我们提供了这么好的资料,使我们少走了很多弯路,在此谢谢了。 不过我对你写的程序还是有两点疑问,如果你有空,还望你解答一下: ;Part 5
;***************************************************************
;Self copy from FLASH to SDRAM LDR r0, =|Image$$RO$$Base|
LDR r1, =|Image$$RO$$Limit|
LDR r2, =|Image$$RW$$Base|
LDR r3, =|Image$$RW$$Limit| SUB r1, r1, r0
SUB r3, r3, r2
ADD r1, r1, r3

LDR r2, =0x200000 ;@2M (ADD R2,R2,R0 ;应该加上这一句。
COPY
LDR r3, [r0], #4
STR r3, [r2], #4
SUBS r1, r1, #4
BNE COPY
第一个问题就是上面这短从FLASH拷贝RO,RW到SDRAM,从你写的程序中可以看到,在FLASH中,你开始搬移的地址是|Image$$RO$$Base| ,结束的地址是 |Image$$RO$$Base| +R1,(这里的R1就是上面算出的RO加RW的容量),但是你搬到SDRAM的起始地址是0x200000 (也就是SDRAM的起始地址0X0),结束地址是0x200000 +R1。很明显|Image$$RO$$Base| 并不总是恒等于OX0的!!!!这跟ARMLINK里的RO设置有关。所以你上面这样写我觉得不是很妥。应该加上如上的一句。 另外一个问题是:我因为没有具体写过BOOTLOADER,不知道中断向量表是怎么处理的。如果我们把RO设为0X0,那岂不是把中断向量表给覆盖了。那又怎么移植?还是OS能自动处理,在BOOTLOAD不用管这一步的?/
你说的第一个问题确实如你所说,如果RO_BASE != 0的情况下拷贝完后会出现问题。
一般情况下,bootloader肯定是运行在地址0x0处的,所以对bootloader来说RO_BASE 必须等于0。不过我个人觉得还是加上一句:ADD R2,R2,R0 ,谢谢提醒! 第二个问题:一般情况下,在bootloader里面是不管中断的,bootloader低第一个动作一般是关中断,所以不用考虑中断向量的问题。

菜鸟
2004-08-12 21:09:00     打赏
27楼
以下是引用CityWander在2004-8-12 11:05:00的发言:
感谢TwentyOne写的这些东西,对我们这些初学者有极大的帮助,谢谢 在此请教一个小小的问题: 对于普通的不需要操作系统的嵌入式软件,就是只有一个main函数的控制环的情况,是不是也需要一个bootloader?我在ADS下试着调试了其附带的例程(目标板是ATMEL的eb55,调试的时候板上有一个程序负责下载程序到RAM,然后从RAM中运行),都能通过且运行正常,但我在他的启动代码中并未发现类似bootloader的代码,请问我们如果要讲程序烧写到flash中运行的话,是否也需要一个bootloader? 望指点,谢谢
其实不一定都需要bootloader。 因为板子上电后,一般来说SDRAM都不可用,无论用什么方法,都需要把SDRAM配置好。这可以通过单独的bootloader来完成,为后面程序的运行准备好运行环境; 你也可以在自己写的程序中包括些简单的代码用来配置FLASH和SDRAM。功能比较全面的bootloader,象bios,个人感觉是在开发和调试的过程应用的比较多,在开发完成以后,可以在自己的代码中添加相应的FLASH&SDRAM的配置代码,把bootloader给抛弃掉,: ) 至于FLASH的烧写,有很多种办法:功能比较全的bootloader可以支持flash烧写,好的仿真器也支持flash烧写,用其他的软件也可以(flash program)。


菜鸟
2004-09-03 19:50:00     打赏
28楼
谢谢,我会努力的

菜鸟
2004-09-10 03:45:00     打赏
29楼
问一下twentyone ,你说的那个比较全的bootloader (BIOS)不知哪里有的下,我想看看

菜鸟
2004-09-15 19:16:00     打赏
30楼

共108条 3/11 1 2 3 4 5 6 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]