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

其他