4. 编译镜像

您所在的位置:网站首页 openwrt镜像生成器 4. 编译镜像

4. 编译镜像

2023-08-15 06:39| 来源: 网络整理| 查看: 265

4.4. 编译流程分析¶ 4.4.1. 更新并安装软件包列表¶

在我们拿到OpenWrt的源码之后,要做的第一件事就是安装软件包列表。只有安装软件包列表, 我们才能在menuconfig中选择选择正确的设备类型,才能选择添加软件包。

1 2./scripts/feeds update -a ./scripts/feeds install -a

这两条命令实际执行的是源码根目录scripts路径下名为feeds的脚本文件。 传入的参数update表示升级软件包列表,实际是从git拉取软件包列表的仓库,此时拉取的数据还在临时目录中。 install则用于安装软件包列表,实质上是将临时目录中的列表替换到实际使用的软件包列表位置。 -a参数则表示选择所有软件包。他还有很多不常用的参数,具体可以使用下面命令查看。

1./scripts/feeds help

实际情况是,只要输入了错误的参数,都会出现命令的使用说明。

4.4.2. 使用默认配置文件¶

如果使用OpenWrt官方仓库拉取的源代码是没有这一步的,那是因为OpenWrt自带一个通用的配置文件。 我们只需要简单的进行配置就能编译出固件,但是其内容只包含了OpenWrt运行所需的最基本的配置。 为了可重复的复现我们对DoorNet的定制配置,这里就需要多一步生成配置文件的工作。

1 2cat ./config/doornet1_defconfig > .config make defconfig

首先,将位于源码根目录config路径下的doornet1_defconfig配置文件写入根目录的.config中, .config是实际在编译过程中使用的配置文件。然后,使用make defconfig命令, 根据我们之前拉取的软件包列表,将.config补充完整,以便于之后的过程中使用menuconfig这样的工具来修改配置文件。

4.4.3. make menuconfig¶

在完成默认配置文件的添加之后,我们可以根据自己的需求来添加或删除软件包及修改功能设置。

4.4.4. make download¶

下载配置文件中选择的软件包、依赖库、内核等文件的源码压缩包。下载以后的文件保存在dl目录下。

4.4.5. make V=s -jn¶

使用make命令进行源码的编译。参数V表示输出log的等级,V=s为输出所有的信息,等同于V=99,V=0为不输出,不使用V参数时默认为0。 -j表示同时进行指定数量的任务进行编译,也就是指定编译的线程数,n为线程数大小,不指定-jn参数时自动判断编译所需的线程数。

由于OpenWrt部分软件包不支持多线程编译,当我们指定n大于1时,会有极大的可能导致编译失败, 所以推荐大家使用 make V=s命令来减少不必要的麻烦。

由于我们在实际的开发过程中使用服务器进行编译,服务器具有核心多但单核频率低的特点, 如果仅使用单线程编译,效率甚至不如普通PC。所以,我们往往会先进行多线程编译, 直到工程编译失败,再使用单线程编译,具体过程如下:

1 2 3 4 5 6 7 8 9 10 11 12#首先进行多线程编译 make V=s -j56 #遇到编译错误,尝试单线程编译 make V=s -j1 #如果单线程编译不通过,检查详细报错信息并解决错误 #单线程编译报错软件包通过之后,Ctrl+C打断编译,继续使用多线程编译 make V=s -j56 #重复上述过程,直到编译完成

注解

以上开发编译流程仅针对DoorNet镜像构建环境具有较高效率

直接使用make命令可以编译整个工程,当然我们也可以构建单个软件包。具体操作详见 编译软件包 章节

4.4.6. ./scripts/diffconfig.sh > defconfig¶

在我们对OpenWrt的配置做了修改以后,为了能重复多次的编译出相同的镜像,我们要对配置文件进行保存。

defconfig为文件名,我们可以任意设置,保存路径也可以任意指定。

4.4.7. 清除编译文件¶ 1 2 3 4 5 6 7 8make clean #清除bin目录和build_dir/target-xxx目录 make dirclean #清除[make clean] + 清除交叉编译工具及工具链目录 make distclean #清除所有编译和下载的文件,使当前内容恢复到拉取时的状态


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3