Linux学习笔记(四)

1.韦东山第13课代码重定位第一节
Linux学习笔记(四)
CPU可以直接控制SRAM,SDRAM,Nor,Nand Flash控制器,但是不能直接控制Nand。

1.那么问题来了,既然不能直接控制Nand,为什么可以直接Nand启动?
因为nand启动时,它先把里面前4K的内容复制给SRAM,CPU从SRAM中的o行开始读取。

2.那么问题又来,如果程序代码大于4K怎么办?
这里就引出新的定义,如果程序代码大于4K,那么就把所有程序给SDRAM,这就需要对地址进行重定位,简称代码重定位。

3.nor flash的基地址是0x4000 0000
nand flash的基地址是0

nand flash的特点是什么?
它可以像内存一样读程序,但是不能像内存一样写程序。

引申:局部变量放在栈中,栈指向SRAM,而全局或静态变量是放在bin文件中,烧在nor flash文件上面,代码里写全局变量无效(就是在main函数之外定义的代码),需要放到SDRAM中,也就是重定位。
综上可以看出,无论nor还是nand启动都需要重定位。

4.在Linux上查看反汇编:vi sdram.dis
修改makefile:1) vi makefile
2)把arm-linux-ld-Ttext 0 start.o led.o uart.o init.o main.o-o sdram.elfM它改为arm-linux-ld-Ttext 0 -Tdata 0x800 start.o led.o uart.o init.o main.o-o sdram.elfM
也就是代码段从0开始到0x800(十进制2048)

5.可以一次性既下载到nand,又下载到nor。
6.无初值的全局变量和注释不保存在bin文件中。