head.S of arch

   arch目录下2410中的head.S.

    首先include了三个头文件:config.h,linkage.h,machine.h. 

    其中config.h内容是调用autoconf.h. autoconf是由配置产生的一个配置结果文件,另外一个是.config,两者的区别是语法不同,.config是用来知道Makefile的,所以语法是按照Makefile中的语句定义的,如果某一项配置成功,那么它的对应名称的赋值是Y,例如:CONFIG_MTD_NAND=y;而autoconf.h中则是为了指导C文件,所以它的内容是符合标准C头文件的格式:#define CONFIG_MTD_NAND 1。可见调用config.h是为了接下来根据具体配置使用#ifdef来选择性编译。

    linkage.h中主要定义了ENTRY(name),使得接下来可以使用这个宏定义来定义一些全局变量,符合固定的适合,比如字对齐。

    machine.h主要是根据配置结果来选择相应的设置值的定义的头文件,比如它#include "platform/smdk2410.h",这个头文件定义的是各寄存器的值,其中它也include了寄存器地址宏定义的头文件s3c2440.h,这个头文件里面主要定义的是s3c2440中的寄存器的地址。所以调用machine.h的主要目的是使用寄存器的相关地址和相应的设置值。这里从machine这个名字上也可以看出是具体芯片的一些特性。

    大概的过程就是:1进入特权模式,避免访问的资源受限制产生异常,2关闭看门狗,3关闭中断,4初始化时钟,否则使用外部时钟将很慢,5初始化SDRAM为代码搬移做准备,(可以点亮LED做个标记),6初始化UART,为后面的调试打印信息,7检测SDRAM,方法是写入读出进行比较,8代码搬移,因为是从NAND搬移到SDRAM中,所以先要初始化NAND CONTROL使得可以读,然后要设置好堆栈,为了使用用C语言写的NAND READ的函数,然后从NAND中读出数据到SDRAM中,将4K代码进行比较,正确则返回,9用LDR指令跳转到SDRAM上执行后续程序,10初始化堆栈,传递参数,跳转到MAIN函数。

你可能感兴趣的:(c,语言,include,makefile)