OpenWrt X86 编译教程

准备编译环境

一台用来编译的PC,一台多网卡的PC

这里我使用的QOTOM迷你电脑Q300P(Ubuntu编译openwrt镜像)和Q500G6(安装openwrt)

q500g6

1547699165702

安装编译依赖库,重复包不会安装

1
sudo apt-get install build-essential asciidoc binutils bzip2 gawk gettext git subversion libssl-dev libncurses5-dev  patch unzip zlib1g-dev

如果是64位系统的话还需要安装32位兼容包(否则编译报错)

1
sudo apt-get install libc6:i386 libgcc1:i386 libstdc++5:i386 libstdc++6:i386

编译源代码

wopenwrt源:git clone https://github.com/openwrt/openwrt.git

1547694573500

更新最新的包定义

1
./scripts/feeds update -a

1547694646260

安装所有的包

1
./scripts/feeds install -a

1547694735931

feeds命令将安装扩展代码包编译选项,如果不运行该命令,在menuconfig配置将没有选择这些扩展包的选项

安装更新之后,输入 make defconfig ,这个命令会检查所需的编译工具是否齐全,并生成默认的编译配置文件”.config”

1547694748892

开始配置编译固件, 输入

1
make menuconfig

targetsystem选择x86,target img我保持默认,

添加LuCI web配置

LuCI > 1. Collections>luci

LuCI > 2. Modules > Translations———————–(zh-cn)

LuCI > 3. Applications>luci-app-uhttpd

其他功能看自己需要

1547694769814

1563430948912

添加EXT4硬盘格式支持,Kernel modules > Filesystem > kmod-fs-ext4

添加USB支持,如不添加可能会不响应键盘,Kernel modules > USB Support

1550026449413

下载所有已选择的软件代码压缩包(dl库),openwrt仅有编译及配置指令,各种依赖的代码包在上游网站及代码仓库里,编译会下载大量源代码

1
make download V=s

根据下载速度和选择的软件包数量,大约要3小时以上,翻墙会快很多…

注意使用root编译会报错,可以在/etc/profile 最后添加export FORCE_UNSAFE_CONFIGURE=1,然后执行

1
source /etc/profile

V=s 可以输出编译过程中每一步的执行动作,出错后显示详细错误信息,-j2使用两个线程并行编译,第一次不要用多线程编译,不好排错

1
make V=s -j2

编译产生的中间文件会占用十几G,可以用make dirclean清除(会删除编译目录和编译工具目录)

1
2
ulimit -s 10240 这个命令是防止爆栈
make V=s -j线程数 速度比单线程快N倍

生成的文件在bin/x86/ 下

1547694869736

准备安装

接下来将镜像写入硬盘,我使用USB转MSATA,非常方便

1547694915106

1
fdisk -l

找到要写入的盘,我的磁盘是/dev/sdb
然后使用dd命令将写好的硬盘安装到PC,启动电脑

1
dd if=openwrt-x86-generic-combined-ext4.img of=/dev/sdb

1547699008465

问题解决

安装后,无法识别到网卡,这种情况应该是没有网卡驱动,只能找到对应的网卡驱动编译进内核了

1547695638734

make clean, 重新配置make menuconfig

经查找网卡使用的是Intel IG211-AT,走的是PCIE通道,这里要选用e1000e

Kernel modules > Network Devices将kmod-e1000e,kmod-igb驱动选中

1550026173854

本人手上有4个无线模块,在内核中添加无线网卡驱动

1547695669827

内核中的无线驱动只找到RTL8821AE的驱动

Kernel modules > Wireless Drivers

1547695683570

1547695691266

保存配置文件
因为之前已经编译过了,这次可以使用多线程,编译时间会快很多

1
2
make clean
make V=s -j4

重新编译OK,写入镜像后有线,无线网卡(RTL8821AE)均正常使用,其他无线网卡不识别,需要找到对应的驱动代码进行编译,加载到内核,以后有时间再研究

1563437186923

1563437075749

------ 本文结束------