[Full]
完整版
[Rss]
订阅
[Xml]
无图版
[Xhtml]
无图版
Rss
& SiteMap
曙海教育集团论坛
http://www.bjzhda.cn
曙海教育集团论坛
◎
曙海教育集团论坛
→
Linux系统开发
→
LINUX 内核配置及编译
共1 条记录, 每页显示 10 条, 页签:
[1]
[浏览完整版]
标题:LINUX 内核配置及编译
1楼
wangxinxin
发表于:2010-11-25 10:43:36
以下内容含脚本,或可能导致页面不正常的代码
<strong><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%86%85%E6%A0%B8">内核</span>配置<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%B3%BB%E7%BB%9F">系统</span>: </strong>1. Linux 采用了模块化的内核配置系统,保证了内核的扩展性。 Linux 内核的配置系统由三个部分组成: Makefile 配置<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%96%87%E4%BB%B6">文件</span> (config.in) 配置工具 用户通过 <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=make">make</span> config 配置后,产生了 .config 。顶层 Makefile 读入 .config 中的配置选择,再递归的进入到内核的 各个子目录中,分别调用位于这些子目录中的 Makefile 。 Makefile 根据配置文件 .config 形成<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%BC%96%E8%AF%91">编译</span>的源文件列表, 2. GNU 编译工具对源文件进行编译,并把目标代码链接到一起形成 Linux 内核二进制文件。主 makefile 在内核源代 码的根目录上,它支持的 make <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%91%BD%E4%BB%A4">命令</span>的操作描述如下: make mrproper // 确保源代码目录下没有不正确的 .o 文件,以及文件的依赖关系 配置内核并生成配置文件 make config // 读取配置文件,创建对应于配置的依赖关系树 make dep // 编译并用 gzip 压缩成 1MB 以下的内核,未压缩的文件是 make zImage //vmlinux make modules // 编译模块将模块安装到<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%BF%90%E8%A1%8C">运行</span>目录下 make modules_install // 生成模块间的依赖关系 depmod ?a // 生成模块间的依赖关系 <strong>主 makefile 分析: </strong>主 makefile 定义许多<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%8E%AF%E5%A2%83">环境</span>变量,向各个子目录下的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 。 它们分别代表了最先链入的文件、核心文件、<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%BD%91%E7%BB%9C">网络</span>系统、<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E9%A9%B1%E5%8A%A8">驱动</span><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%A8%8B%E5%BA%8F">程序</span>、库文件。它们编译链接后形成了二进制文件 vmlinux 。 主 makefile 常用变量: 编译: CPP,CC,AS,LD,AR,CFLAGS,LINKFLAGS 。这些变量明确地定义了编译环境。如果是<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E4%BA%A4%E5%8F%89">交叉</span>编译,还定义了 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/<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=arm">arm</span>.*/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 <strong>Linux 内核编译具体步骤: </strong>1. 首先<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E4%B8%8B%E8%BD%BD">下载</span>内核,拷贝到 /usr/src/ 下 (2.6内核下载网址:[size=+0][size=+0]<font color="#000000">http://www.kernel.org/pub/linux/kernel/v2.6/)</font></font></font> 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; <strong>4.</strong> <strong>修改主 Makefile</strong> 在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目录,用来编译内核。注意后面不要有空格。 <strong>5. 安装libncurses5-dev等软件包。</strong> 6. 执行内核配置命令(下面任选一条,运行时如出现某软件包未安装,安装该软件包即可) make config (基于文本的最为传统的配置<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%95%8C%E9%9D%A2">界面</span>,不推荐使用) <strong>make menuconfig (基于文本选单的配置界面,<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%AD%97%E7%AC%A6">字符</span>终端下推荐使用) //本文用这条命令</strong> make xconfig (基于图形<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%AA%97%E5%8F%A3">窗口</span>模式的配置界面,X<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=window">window</span> 下推荐使用) make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦) 配置时,有三种选择,它们分别代表的含义如下: Y - - 将该<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%8A%9F%E8%83%BD">功能</span>编译进内核 N - - 不将该功能编译进内核 M - - 将该功能编译成可以在需要时<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%8A%A8%E6%80%81">动态</span>插入到内核中的模块 7. 执行相关编译命令: <strong>make dep //</strong><strong>正确<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%AE%BE%E7%BD%AE">设置</span>关联文件</strong> <strong>makeUimage </strong> 或 make zImage 或 make bzImage
说明:
上面显示的是代码内容。您可以先检查过代码没问题,或修改之后再运行.
共1 条记录, 每页显示 10 条, 页签:
[1]
Copyright © 2000 - 2009
曙海
教育集团
Powered By
曙海教育集团
Version 2.2
Processed in .01563 s, 2 queries.
[Full]
完整版
[Rss]
订阅
[Xml]
无图版
[Xhtml]
无图版