linux用户编译openwrt
Note
我是linux用户, 系统是nixos; 但是编译openwrt推荐使用Ubuntu22.04版本环境, 使用需要模拟一个Ubuntu22.04, 可以选择:
docker pull ubuntu:22.04
qemu-system-x86_64 -cdrom ubuntu-22.04-x86_64.iso
chroot
实质都是模拟一个ubuntu22.04的系统环境
推荐使用docker, 这里使用chroot来实现,因为下载的镜像是最小的.
git 国内加速前缀: https://ghproxy.com/
Note
通常只生成.config文件这一步就可以了, 拿到这个文件就可以使用github action进行编译了, 比如 https://github.com/jcleng/gl-ar300m-ext-nand
chroot来实现
下载chroot使用的ubuntu22.04 fs系统文件
wget https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-amd64.tar.gz
sha256sum ubuntu-base-22.04-base-amd64.tar.gz
# df6fe77cee11bd216ac532f0ee082bdc4da3c0cc1f1d9cb20f3f743196bc4b07 ubuntu-base-22.04-base-amd64.tar.gz
chroot环境搭建
mkdir ubuntu22.04
mv ubuntu-base-22.04-base-amd64.tar.gz ubuntu22.04
cd ubuntu22.04
# 得到对应的环境
tar xvf ubuntu-base-22.04-base-amd64.tar.gz
Ubuntu换国内源和编译所需依赖安装
# 直接可以在ubuntu22.04目录进行编辑文件,我用的vscode
code ./etc/apt/sources.list
# 批量替换
http://archive.ubuntu.com/ubuntu/
# 为
http://mirrors.aliyun.com/ubuntu/
# 网络
code ./etc/network/interfaces
auto eth0
iface eth0 inet dhcp
# dns, 也可以复制宿主机的
code ./etc/resolv.conf
nameserver 114.114.114.114
# 进入chroot之前绑定系统目录
sudo mount -o bind /proc ./proc
sudo mount -o bind /sys ./sys
sudo mount -o bind /dev ./dev
# 绑定一个用户目录
mount --bind ~/work ./work
# 进入chroot
sudo chroot . /bin/bash
# nixos需要自定义path环境
sudo chroot . /usr/bin/env -i \
HOME=/root TERM="$TERM" \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin \
/bin/bash
# 进入chroot执行
cat /etc/os-release|grep PRETTY_NAME
# PRETTY_NAME="Ubuntu 22.04 LTS"
apt update
apt upgrade -y
apt install -y sudo iputils-ping time git file subversion build-essential gcc-multilib libncurses5-dev zlib1g-dev gawk flex gettext wget unzip grep rsync python3 tree python3-distutils
openwrt源码准备, 找到支持自己设备的源码仓库, 这里使用immortalwrt
cd ~
# 只使用openwrt-23.05分支
git clone -b openwrt-23.05 --single-branch --depth=1 https://github.com/immortalwrt/immortalwrt ./root/openwrt
# 配置插件仓库和地址, 这个位置也可以把下载慢的进行国内源修改
code ./root/openwrt/feeds.conf.default
# 增加这个, 有很多luci-app, 比如luci-app-adguardhome
src-git kenzo https://github.com/kenzok8/openwrt-packages
下载和编译
sudo chroot . /bin/bash
# 编译前下载插件
cd /root/openwrt
./scripts/feeds update -a
./scripts/feeds install -a
# 生成配置文件 .config
make menuconfig
# 编译前下载内核等工具资源, 基本上国内都无法下载, 自行下载 https://github.com/jcleng/gl-ar300m-ext-nand/releases 里面的 dl.tar.gz 文件覆盖到dl文件夹,大差不差
make download -j8
# 开始编译并报错编译日志
make -j12 V=99 2>&1 | tee build.log
# 会生成产物到bin目录
重新构建
rm -rf .config
rm -rf ./bin ./build_dir ./tmp
make clean
make dirclean
其他