内核配置系统:
1.  Linux 采用了模块化的内核配置系统,保证了内核的扩展性。 Linux 内核的配置系统由三个部分组成:
     Makefile
     配置文件 (config.in)
     配置工具
   用户通过 make config 配置后,产生了 .config 。顶层 Makefile 读入 .config 中的配置选择,再递归的进入到内核的   各个子目录中,分别调用位于这些子目录中的 Makefile 。 Makefile 根据配置文件 .config 形成编译的源文件列表,
  2. GNU 编译工具对源文件进行编译,并把目标代码链接到一起形成 Linux 内核二进制文件。主 makefile 在内核源代     码的根目录上,它支持的 make 命令的操作描述如下:
     make mrproper // 确保源代码目录下没有不正确的 .o 文件,以及文件的依赖关系 配置内核并生成配置文件
     make config     // 读取配置文件,创建对应于配置的依赖关系树
     make dep          // 编译并用 gzip 压缩成 1MB 以下的内核,未压缩的文件是
     make zImage    //vmlinux
     make modules // 编译模块将模块安装到运行目录下
     make modules_install         // 生成模块间的依赖关系
     depmod ?a                        // 生成模块间的依赖关系
 主 makefile 分析:
  主 makefile 定义许多环境变量,向各个子目录下的makefile 使用了这些变量,常用的变量有以下几类:
    版本: VERSION,PATCHLEVEL,SUBLEVL 等。定义了当前内核的版本。CPU 体系结构: ARCH 。定义目标 CPU 的体系     结构。
    路径: TOPDIR,SUBDIRS 。 TOPDIR 是 Linux 内核源代码的根目录, Makefile 通过 $(TOPDIR)/Rules.make 可以找到       Rules.make 的位置。 SUBDIRS 是目录列表,根据它来判断进入哪些子目录编译。内核的配置文件决定了 SUBDIRS 的值。
    内核组成: HEAD,CORE_FILES,NETWORKS,DRIVERS,LIBS 。 它们分别代表了最先链入的文件、核心文件、网络系统、驱动程序、库文件。它们编译链接后形成了二进制文件 vmlinux 。
主 makefile 常用变量:
        编译: CPP,CC,AS,LD,AR,CFLAGS,LINKFLAGS 。这些变量明确地定义了编译环境。如果是交叉编译,还定义了            CROSS_COMPILE 。
        配置变量: CONFIG_*
  下面是主 makefile 的部分代码:
       VERSION = 2
       PATCHLEVEL = 6
       SUBLEVEL = 11
       TOPDIR    := $(srctree)
       SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e
      s/s390x/s390/ -e s/parisc64/parisc/ )
      CROSS_COMPILE   ?=
      AS      = $(CROSS_COMPILE)as
      LD      = $(CROSS_COMPILE)ld
      CC     = $(CROSS_COMPILE)gcc
      CPP    = $(CC) -E
      AR      = $(CROSS_COMPILE)ar
      NM      = $(CROSS_COMPILE)nm
      STRIP       = $(CROSS_COMPILE)strip
      OBJCOPY     = $(CROSS_COMPILE)objcopy
      OBJDUMP     = $(CROSS_COMPILE)objdump
Linux 内核编译具体步骤:
  1.  首先下载内核,拷贝到 /usr/src/ 下  (2.6内核下载网址:http://www.kernel.org/pub/linux/kernel/v2.6/)
             cp linux-2.6.11.tar.gz /usr/src
  2. 删除原有链接并解压缩源代码
            cd /usr/src
            rm -f linux    //如果没有软链接可不删
            tar -xzvf linux-2.6.11.tar.gz
  3. 重新建立 Linux 链接
            ln -s linux-2.6.11 linux
            cd /usr/src/linux;  
  4. 修改主 Makefile
            在Makefile中的:
            ARCH         :=arm                                                                                                                        CROSS_COMPILE:=/home/gdlc/makecrosstool/armgcc-setup/gcc-3.3.4-glibc-2.3.3/arm-S3C2410-linux-gnu/bin/arm-S3C2410-linux-g   nu-               //交叉工具链中的gcc目录,用来编译内核。注意后面不要有空格。
  5. 安装libncurses5-dev等软件包。
  6. 执行内核配置命令(下面任选一条,运行时如出现某软件包未安装,安装该软件包即可)
            make config (基于文本的最为传统的配置界面,不推荐使用)
           make menuconfig (基于文本选单的配置界面,字符终端下推荐使用)   //本文用这条命令
           make xconfig (基于图形窗口模式的配置界面,Xwindow 下推荐使用)
           make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
  配置时,有三种选择,它们分别代表的含义如下:
     Y - - 将该功能编译进内核
     N - - 不将该功能编译进内核
     M - - 将该功能编译成可以在需要时动态插入到内核中的模块
 7.  执行相关编译命令:
          make dep    //正确设置关联文件 
          makeUimage    或 make zImage     或  make bzImage
没有评论:
发表评论