因为想要将路由升级为X86_64平台的软路由,并且主机上使用Proxmox VE搭建虚拟环境,同时跑OpenWrt和基于CoreOS的Docker环境,这就需要自己编译一个支持KVM虚拟机的OpenWrt镜像(官方给出的预编译64位镜像不支持KVM,只有32位镜像支持KVM),所以要先为编译OpenWrt准备编译环境。目前的OpenWrt官方教程由于之前和LEDE项目的分分合合,可用性很差,以下为根据对过程的回忆勉强写下的记录。仅供参考。
编译机是租用GCP平台的VPS,4核vCPU,15G内存,30G硬盘,CentOS 7.0系统。按时间收费,不进行编译工作的时候关机,所以实际使用费用并不高。
一、搭建编译环境
由于CentOS使用yum包管理系统,所以不需要像apt-get一样更新源。我们直接运行
sudo yum update
更新已安装的所有软件包。
然后开始安装编译OpenWrt所需的依赖包。
xxxxxxxxxxsudo yum install autoconf binutils bison bzip2 flex gawk gcc gcc-c++ gettext git-core make ncurses-devel patch unzip wget zlib-develxxxxxxxxxxsudo yum group install "Development Tools"至此,依赖包应该都安装完成了,yum包管理系统的"Development Tools"真的很给力,当然我们之后还会进行依赖包检查,如果仍有缺失的依赖包,就按照提示进行安装即可。
二、正式编译前的代码准备工作
首先我们现在github上下载OpenWrt的源代码。
xxxxxxxxxxgit clone https://www.github.com/openwrt/openwrt上述代码为OpenWrt项目主干代码。也可以通过添加-b xxxxx选择某个发行版的代码,例如:
xxxxxxxxxxgit clone https://www.github.com/openwrt/openwrt -b chaos_calmer现在我们已经有了OpenWrt的源代码,cd进入openwrt文件夹,运行如下代码再运行一次代码更新。
xxxxxxxxxxgit pull然后我们运行如下命令,更新OpenWrt源并将更新的软件包安装好。虽然官方说可以只更新不安装,但是如果想在编译时选择Luci,此步不可忽略。
xxxxxxxxxx./scripts/feeds update -a./scripts/feeds install -a至此,我们正式完成了所有的准备工作,即将开始正式编译。
三、配置编译参数、正式编译及编译完成后的清理
配置编译参数
现在我们已经做完了所有准备工作,该开始配置编译镜像的参数了。运行下列命令启动一个基于ncurses的文本配置界面。
xxxxxxxxxxmake kernel_menuconfig该命令运行你自定义内核选项,主要需要启用的有如下选项。
x
64-bit kernel//启用64位内核<*>Virtualization//启用虚拟化支持Virtualization -> <*>Kernel-based Virtual Machine (KVM) support <*>KVM for Intel processors support <*>KVM for AMD processors support//启用对Intel和AMD处理器的KVM支持保存后退出。
然后我们运行如下命令,进行编译镜像的参数配置。
xmake menuconfig其中我们会看到很多选项,大类如下
x
Target System//目标设备芯片类型,AxWRT系统只保留了Ralink RT288x/RT3xxx。教学板MT7620芯片就是RT系列的升级版Subtarget//目标子类型,一般是具体板子类型Target Profile//针对不同路由器的版本再做的一个明确选项参数,一般默认即可Target Images//生成的固件文件采用何种分区格式Global build settings//编译时的一些全局参数,这些参数与Linux内核或GCC编译器相关Advanced configuration options//高级选项参数,用于OpenWrt开发人员,一般用不上Build the OpenWrt Image Builder//除了编译固件,再编译一个固件编译环境,可以分发给团队中的其他人使用。Build the OpenWrt SDK//产生OpenWrt SDK环境,就是另外一个开发环境Build the OpenWrt based Toolchain//单独编译出OpenWrt的交叉编译工具Image configuration//编译好的固件所附带的参数信息Package features//一些软件包特性Base system//基本系统命令软件包Administration//高级管理命令软件包Boot Loaders//引导程序,教学板不用固件附带,所以这里无选项Development//开发用工具包Firmware//不要被名字混淆了,这个的意思是,固件中是否带某些其他外围芯片的固件Kernel modules//内核编译参数,这里的参数都来自芯片厂对内核的预设配置Languages//编程语言软件包Libraries//库软件包LuCI//OpenWrt下顶顶大名的LuCI界面包Mail//电子邮件相关的软件包Multimedia//多媒体软件包Network//网络相关的软件包Sound//声音相关的软件包Utilities//工具软件包Video Streaming//视频流服务软件包可以看到选项非常多,以下说明几个常用的功能所需要启用的选项。
x
//启用 Web 管理界面 LuCI,并启用中文支持LuCI → Collections → 选中 luciLuCI → Modules → Translations → 选中 Chinese(zh-cn)//添加DDNS支持,这里直接添加Luci的DDNS支持,根据依赖包,会安装对应的DDNS功能包LuCI—>Applications —> <*>luci-app-ddns.//添加支持USB自动mount功能//添加USB相关支持Kernel modules —> USB Support —> <*> kmod-usb-coreKernel modules —> USB Support —> <*> kmod-usb-ohciKernel modules —> USB Support —> <*> kmod-usb-uhciKernel modules —> USB Support —> <*> kmod-usb-storageKernel modules —> USB Support —> <*> kmod-usb-storage-extrasKernel modules —> USB Support —> <*> kmod-usb2//添加USB挂载Base system —> <*>block-mount//添加自动挂载工具Utilities —> Filesystem —> <*> badblocks//添加文件系统支持Kernel modules —> Filesystems —> <*> kmod-fs-ext4 (移动硬盘EXT4格式选择)Kernel modules —> Filesystems —> <*> kmod-fs-vfat(FAT16 / FAT32 格式 选择)Kernel modules —> Filesystems —> <*> kmod-NTFS(NTFS选择,具体是什么忘记了,总之有NTFS字样的)//添加UTF8编码,CP437编码,ISO8859-1编码Kernel modules —> Native Language Support —> <> kmod-nls-utf8Utilities ---> disc ---> <> fdisk manipulate disk partition tableUtilities ---> <*> usbutils USB devices listing utilities当然还有很多其他的选项,要耐心进行逐项检查,以免白白浪费时间。选择完毕之后保存退出。
正式编译
现在我们终于可以开始编译了。使用如下指令开始编译。
xxxxxxxxxxmake -j 4 V=s其中-j 4指使用4个处理器核心进行编译,V=s指显示所有编译信息。要注意的是使用多个核心进行编译有可能出现随机错误。
编译会耗费较长时间,编译完成之后生成的镜像会出现在~/openwrt/bin文件夹中,去选取对应的镜像下载即可。
清理工作
最后我们进行编译完成之后的清理工作,可以使用如下三个命令。
x
make clean#删除bin和build_dir目录的内容。make dirclean#删除bin和build_dir目录的内容,并删除staging_dir和交叉编译工具。make distclean#删除编译或配置的所有内容,包括下载的所有feed和软件包。大杀器,如果之后还想进行编译的话,慎用!
评论
发表评论