linux 源码包编译-Linux内核编译过程

本文已参加“新人创作盛典”活动,共同开启鹈鹕创作之路。

1.内核编译的基本流程,有需要的话改一下;;; 【根据release版本生成对应的源码包】;。

步骤是必需的,[]是可选步骤。 如果不使用release版本的源码包管理系统,则无需执行步骤4。如果想使用源码包管理系统安装,可以使用各版本的源码包创建系统分配。 在这些情况下,步骤 3 和 4 的操作会结合起来。

2. 打算工作 2.1 工具安装源码包名称备注

ncurses-开发

基于控制台(文本界面)设置所需

qt开发

基于窗口(图形界面)设置所需

qt3开发

基于窗口(图形界面)设置所需

gcc-c++

基于窗口(图形界面)设置所需

rpm 构建

生成rpm包需要

源码包名备注

libncurses5-dev

基于控制台(文本界面)设置所需

qt3-开发工具

基于窗口(图形界面)设置所需

克++

基于窗口(图形界面)设置所需

内核

生成deb包时需要

假根

生成deb包时需要

dpkg-dev

生成deb包时需要

2.2 获取源码

别说了。 参考:一篇文章了解Linux系统内核升级并下载当前内核源代码这里假设源代码(linux2.6)已经下载到当前主目录~/linux-2.6/。

3. 配置

源代码树附带了帮助设置的工具。 这个工具包称为 kconfig。 设置工具有两种类型:基于控制台(文本界面)和基于窗口(图形界面)。 这里主要以控制台方式的工具为例进行介绍,前面仅对窗口方式的工具进行简单介绍。

1. 选择目标机器的架构并进行默认配置。 在源码树中,为每个架构准备了一个默认的.config文件,位于arch//configs/*_defconfig,执行以下命令:

$ make defconfig

2. 根据需要更改内核配置 要启动基于控制台的配置工具,请在源代码树的根目录下执行以下命令:

$ make menuconfig

[y]键:完成左侧的选择显示。 这意味着该项目已编译并静态添加到内核中。 [m]键,显示完成。 此时,该项目将被编译为模块。 使用此功能时,模块会根据需要动态添加到内核中。 [n]键,它会被破坏,并且这个函数不会被编译。

大致完成您想要的设置后,您可以在菜单底部选择屏幕上的操作菜单,或者按两次[Esc]键完成设置,并在“是否要保存新的设置”中选择“是”设置?” 出现的对话框 按 键将设置保存到 .config 文件。 至此,内核编译设置完成。

4. 编译 4.1 直线编译

当运行编译内核的目标机是本地时,只需要在源码树的根目录下执行:

$ make

编译时间与机器性能关系较大,少则几分钟,多则几个小时。 那么有什么办法可以节省编译时间呢?

在内核的配置中,将目标环境中不需要的驱动设置为无效,只使用必要的函数或模块作为编译对象。 编译选项上的-j选项用于指定make的并发度。 当机器是多处理器时,可以根据处理器的数量来指定该值,这样就可以实现快速编译。 机器性能方面,采用高性能主机进行内核编译。 4.2 交叉编译变量说明

目标机框架

交叉编译

指定交叉编译器的前缀

$ make ARCH=arm CROSS_COMPILE=armv5tel-linux- uImage
$ make ARCH=arm CROSS_COMPILE=armv5tel-linux- modules

$ make ARCH=arm CROSS_COMPILE=armv5tel-linux- INSTALL_MOD_PATH=~/armroot-2.6.38 modules_install

4.3 自定义模块编译

有时,不仅仅是嵌入式模块,我们更多地需要编译可加载模块,其源代码和内核源代码树并不在同一目录树中,而是单独提供。 在这些情况下,就需要正确编译驱动源代码的Makefilelinux 源码包编译,并按照以下方法编译安装:

$ make –C /lib/modules/$(uname -r)/build M=$PWD
$ make –C /lib/modules/$(uname -r)/build M=$PWD modules_install

-C 选项:到内核源目录的符号链接。 -M 选项:告诉 Linux 内核的构建操作正在源代码树之外执行构建操作。

5. 安装 5.1 本地安装

linux 源码包编译-Linux内核编译过程

安装分三个阶段进行。 第一阶段是模块的安装。 在编译后的源码树根目录下执行命令:

$ sudo make modules_install

此时编译好的模块安装在/lib/modules下。 第二阶段是安装内核的双补码镜像文件,生成并安装引导初始化文件系统镜像文件。 同样在源码树的根目录下执行以下命令:

$ sudo make install

此时,内核镜像文件安装在/boot下。

下表是内核安装生成的文件和目录列表:

文件名或目录名内容

/lib/modules/<内核版本>

模块安装目录

/boot/vmlinuz-<内核版本>

内核映像文件

/boot/initramfs-<内核版本> 或 /boot/initrd.img-<内核版本>

引导初始化文件系统映像

/boot/Systemmap-<内核版本>

地址信息文件

第三阶段更改启动文件。 在某些系统设置下,可能需要自动配置 GRUB 以便能够从当前安装的内核引导。 在这些情况下,请适当编辑 /boot/grub/menu.lst 或执行 update-grub 命令。 此时请重新启动机器,确认新内核是否仍能正常运行。

注意:内核镜像的文件名和模块目录名是根据内核版本命名的。 因此,当重新编​​译安装已安装版本的内核时,之前安装的内核和模块将被覆盖。 为了避免这些情况,可以在内核配置选项CONFIG_LOCALVERSION中添加字符,该字符将成为内核版本的一部分,从而避免被覆盖。

进行对象描述

干净的

将源树恢复到编译前状态。 obj文件被删除,.config或者编译时手动生成的一些文件不会被删除

正确先生

将源码树完全恢复到发布时的状态。发布时源码树中不存在的所有文件都将被删除,包括.config文件

帮助

显示可用的 make 对象

标签

生成标签文件。有了标签文件linux 源码包编译,就可以使用Emacs等编辑器的tagjump功能跳转到函数定义,可以高效浏览源码

范围

生成与 cscope 一起使用的索引文件。 cscope是一个基于控制台(文本界面)的源代码浏览器

盟友配置

生成一个 .config 文件,其中所有设置项均设置为有效并静态添加到内核

全部无配置

生成使允许范围内的设置项无效的.config文件

全部修改配置

生成一个 .config 文件,启用所有可设置为模块的项目并将其设置为模块

/.o

仅执行生成指定目标文件所需的编译。仅指定时,目录中的所有目标文件均从 .config 文件生成

/.ko

只生成指定的模块

进行选项描述

V=0|1|2

设置编译时控制台显示的详细程度。 默认只显示摘要,设置为0。设置为1时,显示更详细的信息。 设置为2时,不仅会显示摘要,还会显示编译原因(大部分原因是“因为没有对象”)

奥=

将编译生成的所有文件输出到. 它在严格禁止写入源代码树的情况下非常有用。

5.2 借助包管理工具安装

要将内核镜像纳入包管理范围,需要生成相应的源码包。

$ make rpm-pkg

执行该命令后,将创建源代码包(SRPM)和补码代码包(RPM)。 两者的补码代码包存放在~/rpmbuild/rpms下,源代码包存放在~/rpmbuild/SRPMS下。 如果您有 SRPM 提取的发行版内核的源代码,请使用 rpmbuild 创建源代码包。 如果内核的SRPM解压到~/rpmbuild,则执行以下命令创建源码包:

$ rpmbuild –ba ~/rpmbuild/SPECS/kernel.spec

创建的源码包存放目录与之前相同。 该源码包与普通源码包相同,可以使用rpm命令进行安装和卸载。

$ make deb-pkg

创建的源码包存放在源码树的根目录下。 将生成多个源包,包括包含内核映像和模块的 linux-image-<kernel version>.deb 文件。 该源码包的操作与常见的deb源码包文件的操作相同,使用dpkg即可安装。

据悉,Ubuntu还在kernel-package包中包含了makekpkg命令来辅助创建内核包。 该工具可以通过命令选项来设置创建操作,您也可以根据自己的需要使用该工具。

6. 卸载

注意:卸载内核时请慎重考虑。 另外,请务必做好修改GRUB设置等工作。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 linux 源码包编译-Linux内核编译过程 https://www.wkzy.net/game/172321.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务