准备编译环境
一台用来编译的PC,一台多网卡的PC
这里我使用的QOTOM迷你电脑Q300P(Ubuntu编译openwrt镜像)和Q500G6(安装openwrt)
安装编译依赖库,重复包不会安装
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
更新最新的包定义
1 | ./scripts/feeds update -a |
安装所有的包
1 | ./scripts/feeds install -a |
feeds命令将安装扩展代码包编译选项,如果不运行该命令,在menuconfig配置将没有选择这些扩展包的选项
安装更新之后,输入 make defconfig ,这个命令会检查所需的编译工具是否齐全,并生成默认的编译配置文件”.config”
开始配置编译固件, 输入
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
其他功能看自己需要
添加EXT4硬盘格式支持,Kernel modules > Filesystem > kmod-fs-ext4
添加USB支持,如不添加可能会不响应键盘,Kernel modules > USB Support
下载所有已选择的软件代码压缩包(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 | ulimit -s 10240 这个命令是防止爆栈 |
生成的文件在bin/x86/ 下
准备安装
接下来将镜像写入硬盘,我使用USB转MSATA,非常方便
1 | fdisk -l |
找到要写入的盘,我的磁盘是/dev/sdb
然后使用dd命令将写好的硬盘安装到PC,启动电脑
1 | dd if=openwrt-x86-generic-combined-ext4.img of=/dev/sdb |
问题解决
安装后,无法识别到网卡,这种情况应该是没有网卡驱动,只能找到对应的网卡驱动编译进内核了
make clean, 重新配置make menuconfig
经查找网卡使用的是Intel IG211-AT,走的是PCIE通道,这里要选用e1000e
Kernel modules > Network Devices将kmod-e1000e,kmod-igb驱动选中
本人手上有4个无线模块,在内核中添加无线网卡驱动
内核中的无线驱动只找到RTL8821AE的驱动
Kernel modules > Wireless Drivers
保存配置文件
因为之前已经编译过了,这次可以使用多线程,编译时间会快很多
1 | make clean |
重新编译OK,写入镜像后有线,无线网卡(RTL8821AE)均正常使用,其他无线网卡不识别,需要找到对应的驱动代码进行编译,加载到内核,以后有时间再研究