读书笔记--内核Makefile与链接脚本

 

1、内核Makefile的版本与重要变量:

 

  (1)Makefile中刚开始定义了kernel的内核版本号。这个版本号挺重要(在模块化驱动安装时会需要用到),要注意会查,会改。

 路径:/kernal/Makefile 

1 VERSION = 2
2 PATCHLEVEL = 6
3 SUBLEVEL = 35
4 EXTRAVERSION = .7
5 NAME = Yokohama
6 
7 .....

  (2)kernel的顶层Makefile中定义了2个变量很重要:

      ARCH

      CROSS_COMPILE

    ARCH决定当前配置编译的路径,譬如ARCH = arm的时候,将来在源码目录下去操作的arch/arm目录。

    CROSS_COMPILE用来指定交叉编译工具链的路径和前缀。
  (3)在make编译内核时,也可以通过命令行给内核makefile传参,传给顶层Makefile。如make O=xxx可以指定不在源代码目录下编译,而到另外一个单独文件夹下编译。

      CROSS_COMPILE = xxx

      ARCH = xxx

      O=xxx

   所以有时候你会看到别人编译内核时:make O=/tmp/mykernel ARCH=arm CROSS_COMPILE=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

 

 

2、链接脚本:

(1)kernel的连接脚本并不是直接提供的,而是提供了一个汇编文件vmlinux.lds.S,然后在编译的时候再去编译这个汇编文件得到真正的链接脚本vmlinux.lds
  vmlinux.lds.S在arch/arm/kernel/目录下。

(2)入门在哪里?从vmlinux.lds中ENTRY(stext)可以知道入口符号是stext,发现arch/arm/kernel/目录下的head.Shead-nommu.S中都有。
  head.S是启用了MMU情况下的kernel启动文件,相当于uboot中的start.S。

  head-nommu.S是未使用mmu情况下的kernel启动文件。

 

上一篇:Makefile教程 7-10


下一篇:Mysql字段名与保留字冲突导致的异常解决