当前位置: 技术问答>linux和unix
对start.s的一点小疑问~~~
来源: 互联网 发布时间:2016-07-27
本文导语: start.s中有一段搬移代码 将uboot搬进ram 是一小段汇编 relocate: /* relocate U-Boot to RAM */ adr r0, _start ldr r1, _TEXT_BASE cmp r0, r1 beq stack_setup ldr r2, _armboot_start ldr r3, _bss_start sub r2, r3, r2 add r2, ...
start.s中有一段搬移代码 将uboot搬进ram 是一小段汇编
relocate: /* relocate U-Boot to RAM */
adr r0, _start
ldr r1, _TEXT_BASE
cmp r0, r1
beq stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2
add r2, r0, r2
copy_loop:
ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
ble copy_loop
这段一般是从nor flash复制进ram
我想问的就是这个操作有没有涉及到nor flash的读取操作呢????没有的话那我们uboot中的nor flash驱动干嘛用列,有的话怎么没有看到调用呢????疑问
relocate: /* relocate U-Boot to RAM */
adr r0, _start
ldr r1, _TEXT_BASE
cmp r0, r1
beq stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2
add r2, r0, r2
copy_loop:
ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
ble copy_loop
这段一般是从nor flash复制进ram
我想问的就是这个操作有没有涉及到nor flash的读取操作呢????没有的话那我们uboot中的nor flash驱动干嘛用列,有的话怎么没有看到调用呢????疑问
|
NOR的读取是线性的,
而写的时候是由命令按照block的模式写入的。
而写的时候是由命令按照block的模式写入的。
|
ldmia/stmia就是读flash到ram, 正如楼上说的,线性读, block写
ldmia r0!, {r3-r10} ##r0是uboot的地址, 前面的代码有个判断, 如果start是在内存中就不需要搬了
stmia r1!, {r3-r10} ##r1内存地址, 指令有!, r0和r1在不断变化
cmp r0, r2 ##r2是uboot.bin的大小, 前面的代码计算出来的
ldmia r0!, {r3-r10} ##r0是uboot的地址, 前面的代码有个判断, 如果start是在内存中就不需要搬了
stmia r1!, {r3-r10} ##r1内存地址, 指令有!, r0和r1在不断变化
cmp r0, r2 ##r2是uboot.bin的大小, 前面的代码计算出来的
|
就是说读写和内存一样,
不过它的写 只能把1变成0,而已,
因此,写前都搞成1(也就是erase,),再写,哈哈,
不过它的写 只能把1变成0,而已,
因此,写前都搞成1(也就是erase,),再写,哈哈,
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。