LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

Ubuntu下OpenWRT环境配置、下载、配置、运行记录

简单记录Ubuntu下OpenWRT开发环境配置,版本下载和编译,以及通过QEMU运行OpenWRT并和Host进行ssh通信。

1. 环境安装和版本下载

编译环境设置:

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

 下载openwrt 22.03版本:

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
├── 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
├── README.md
├── rules.mk
├── scripts
├── staging_dir--生成最终文件系统之前的临时安装目录。
├── target
├── tmp
├── toolchain
└── tools

第一行是原始目录,第二行是编译过程中生成的目录。

2. 编译OpenWRT QEMU CA15版本

通过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:

qemu-system-aarch64 -m 1024 -smp 2 -cpu cortex-a57 -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-a57 -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

ARM平台使用qemu运行OpenWrt虚拟机 | SDNLAB | 专注网络创新技术

基于Openwrt + Qemu进行内核源码级调试

posted on 2023-05-25 23:59  ArnoldLu  阅读(2628)  评论(0编辑  收藏  举报

导航