OpenWRT(1):Ubuntu下OpenWRT(A53)环境配置、下载、配置、运行(on QEMU)记录
简单记录Ubuntu下OpenWRT开发环境配置,版本下载和编译,以及通过QEMU(aarch64)运行OpenWRT(ARM A53)并和Host进行ssh通信。
1. 环境安装和版本下载
编译环境设置(参考:[OpenWrt Wiki] Build system setup):
对应Ubuntu 22.04:
sudo apt update sudo apt install build-essential ccache ecj fastjar file g++ gawk \ gettext git java-propose-classpath libelf-dev libncurses5-dev \ libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \ python3-distutils python3-setuptools python3-dev rsync subversion \ swig time xsltproc zlib1g-dev
对应Ubuntu 24.04:
sudo apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python3 unzip wget \
python3-distutils-extra python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev
下载openwrt 22.03版本(参考:[OpenWrt Wiki] The OpenWrt source code):
git clone https://git.openwrt.org/openwrt/openwrt.git -b openwrt-22.03
更新并安装软件包:
./scripts/feeds update -a
./scripts/feeds install -a
OpenWRT目录结构:
├── bin--编译完成后ipk和image文件存放在此。 ├── BSDmakefile ├── build_dir--下载的软件包解压到此,然后进行编译。 ├── config--menuconfig配置文件。 ├── Config.in ├── COPYING ├── dl--下载的软件包存放在此目录。 ├── feeds ├── feeds.conf.default ├── include--存放mk文件。 ├── key-build ├── key-build.pub ├── key-build.ucert ├── key-build.ucert.revoke ├── LICENSES ├── Makefile ├── package--package的makefile文件和menuconfig配置文件。 ├── README.md ├── rules.mk ├── scripts--编译过程中使用的脚本文件。 ├── staging_dir--生成最终文件系统之前的临时安装目录。 ├── target--imagebuilder、linux、sdk、toolchain的makefile和配置文件。 ├── tmp ├── toolchain--编译gcc/binutils/gdb/glibc/mold/must/nasm等工具的makefile文件和配置文件。 └── tools--编译过程中所使用到的工具。
第一行是原始目录,第二行是编译过程中生成的目录。
2. 编译OpenWRT QEMU CA53版本
通过make menuconfig配置OpenWRT:
具体如下:
Target System (QEMU ARM Virtual Machine) ---> │ │ 目标系统配置,和下面Subtarget组合选择硬件配置。 Subtarget (QEMU ARMv8 Virtual Machine (cortex-a53)) ---> │ │ Target Profile (Default) ---> │ │ Target Images ---> │ │ 目标镜像格式配置。 Enable experimental features by default │ │ Global build settings ---> │ │ 关于编译的一些配置,比如是否加调试信息,是否裁剪未使用函数等。 Advanced configuration options (for developers) ---- │ │ 增加一些高级配置选项,比如工具链选项配置、Kernel CFLAGS等。 Build the OpenWrt Image Builder │ │ Build the OpenWrt SDK │ │ Package the OpenWrt-based Toolchain │ │ 将工具链重新打包。 Image configuration ---> │ │ Base system ---> │ │ OpenWRT基本组件配置。 Administration ---> │ │ OpenWRT管理工具配置。 Boot Loaders ---- │ │ Development ---> │ │ OpenWRT开发工具配置。 Extra packages ---> │ │ Firmware ---> │ │ OpenWRT所需固件配置。 Fonts ---> │ │ OpenWRT字体选择。 Kernel modules ---> │ │ Linux kernel相关模块功能配置。 Languages ---> │ │ OpenWRT中所需要支持的脚本语言。 Libraries ---> │ │ 各种功能库文件。 LuCI ---> │ │ Lua配置接口。 Mail ---> │ │ 邮件功能相关配置。 Multimedia ---> │ │ 多媒体功能相关配置。 Network ---> │ │ 网络功能相关配置。 Sound ---> │ │ 声音相关功能配置。 Utilities ---> │ │ 除了以上功能之外的各种小工具。 Xorg ---> Xorg相关配置,仅有字体相关内容。
编译:
make V=s -j8
3 使用OpenWRT
创建disk.img文件:
qemu-img create -f raw disk.img 512M
mkfs -t ext4 disk.img
3.1 HostForward网络设置
qemu启动OpenWRT(参考:[OpenWrt Wiki] OpenWrt in QEMU aarch64):
qemu-system-aarch64 -m 1024 -smp 2 -cpu cortex-a53 -M virt -nographic -kernel openwrt-armvirt-64-Image-initramfs \
-drive if=none,file=disk.img,id=hd0 -device virtio-blk-device,drive=hd0 \ -device virtio-net,netdev=net0 -netdev user,id=net0,net=192.168.1.0/24,hostfwd=tcp:127.0.0.1:1122-192.168.1.1:22 \ -device virtio-net,netdev=net1 -netdev user,id=net1,net=192.0.2.0/24
此处创建了两个网络接口:
- eth0(LAN):在使用qemu时,客户机(虚拟机)与主机之间通讯可通过hostfwd参数指定转发端口来实现,-netdev user,id=n0,hostfwd=[tcp|udp]:[主机ip]:主机端口-[客户机ip]:客户机端口。这里将主机对127.0.0.1::1122的访问转到对OpenWRT的192.168.1.1:22的访问。
- eth1(WAN):qemu的dhcp-server会给OpenWRT分配192.0.2.15,并提供IPv4的网络访问。
登录结果如下,查看网络接口信息:
输入ssh -p1122 root@127.0.0.1,可以从host登录OpenWRT:
从OpenWRT访问Host,可以通过:
ssh al@192.168.1.2--通过eht0。 ssh al@192.0.2.2--通过eth1。
3.2 tap网络设置
主机配置:
sudo ip tuntap add dev tap0 mode tap sudo ip link set dev tap0 up sudo ip address add dev tap0 192.168.2.1/24
qemu启动命令:
qemu-system-aarch64 -m 1024 -smp 2 -cpu cortex-a53 -M virt -nographic -kernel openwrt-armvirt-64-Image-initramfs \ -drive if=none,file=disk.img,id=hd0 -device virtio-blk-device,drive=hd0 \ -net nic -net tap,ifname=tap0,script=no,downscript=no
虚拟机配置:
brctl delif br-lan eth0
ip addr add 192.168.2.2/24 dev eth0 ip link set eth0 up
参考文档:
[OpenWrt Wiki] OpenWrt in QEMU
联系方式:arnoldlu@qq.com