当前位置: 首页 > news >正文

【调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件】

调试笔记-系列文章目录

调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件


文章目录

  • 调试笔记-系列文章目录
    • 调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件
  • 前言
  • 一、调试环境
    • 操作系统:Ubuntu 22.04.4 LTS
    • 编译环境
    • 调试目标
  • 二、调试步骤
    • 预置条件
    • 安装 OpenWrt 编译工具
      • 打开 PuTTY 终端连接开发主机
      • 安装编译工具
    • 准备 openwrt 构建系统
      • 下载 openwrt 构建系统
      • 配置 openwrt 编译选项
    • 构建 openwrt 发行版本 qkd-base
    • 使用 QEMU 运行 OpenWrt x86_64 固件
  • 三、应用场景
    • 免硬件开发软路由功能模块
  • 四、参考资料
  • 总结


前言

本文记录在 Linux 环境下编译运行 QEMU/x86_64 虚拟机系统可运行的 OpenWrt 固件。

实验使用的电脑如下:

CPU:

Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz

操作系统:

Ubuntu 22.04.4 LTS

一、调试环境


操作系统:Ubuntu 22.04.4 LTS

操作系统详细信息如下:

Kernel                : Linux 6.5.0-35-generic (x86_64)
Version                : #35~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue May  7 09:00:52 UTC 2
C Library                : GNU C Library / (Ubuntu GLIBC 2.35-0ubuntu3.7) 2.35
Distribution                : Ubuntu 22.04.4 LTS

编译环境

  • Windows 工作主机通过 PuTTY 远程连接 Linux 开发主机,Linux 开发主机安装 Ubuntu 22.04 LTS 发行版本

参考【安装笔记-20240519-Windows-安装测试 PuTTY】


调试目标

编译生成能在 Windows / QEMU 8.2 软件上运行的 OpenWrt 固件。


二、调试步骤

预置条件

1、参考【安装笔记-20240519-Windows-安装测试 PuTTY】准备好 Ubuntu 22.04 LTS 工作环境

2、下载 OpenWrt 构建系统
下载链接:https://gitee.com/david921518/openwrt

安装 OpenWrt 编译工具

参考 Build system setup

打开 PuTTY 终端连接开发主机

  • 在 Windows 点击 PuTTY 图标,连接开发主机,输入用户名和密码

在这里插入图片描述

安装编译工具

  • 在 PuTTY 窗口执行以下命令:
sudo apt updatesudo apt install build-essential clang flex bison g++ gawksudo apt install gettext git libncurses-dev libssl-devsudo apt install sudo apt install python3-distutils rsync unzip zlib1g-dev file wget

准备 openwrt 构建系统

下载 openwrt 构建系统

  • 进入工作目标并下载 openwrt 构建系统,执行以下命令:
cd wks/giteegit clone -b openwrt-23.05 https://gitee.com/david921518/openwrt.gitgit clone -b openwrt-23.05 https://gitee.com/david921518/openwrt_qkd.git

配置 openwrt 编译选项

  • 复制 base 发行版本配置文件到 openwrt 构建系统目录,执行以下命令:
cp openwrt_qkd/conf/feeds.conf.base openwrt/feeds.conf
  • 进入 openwrt 构建系统目录并配置编译选项,执行以下命令:
cd openwrt./scripts/feeds update -a./scripts/feeds install -amake menuconfig
  • 选择目标系统 x86,目标子系统 x86_64

在这里插入图片描述

  • 选择 “Exit” 退出并保存配置

在这里插入图片描述

构建 openwrt 发行版本 qkd-base

  • 选择 “Exit” 退出并保存配置
make V=s

成功编译后信息如下:

在这里插入图片描述

在 /bin/target/ 目录中保存构建的目标镜像文件。


使用 QEMU 运行 OpenWrt x86_64 固件

  • 将生成的固件镜像文件复制到 Windows 主机上,运行以下命令:
qemu-system-x86_64 -m 256M -bios "data\ovmf.fd" -debugcon "file:debug.log" -global "isa-debugcon.iobase=0x402" -hda openwrt-x86-64-generic-ext4-combined-efi.img
  • OpenWrt 系统成功启动,启动后信息如下:

在这里插入图片描述

需要注意,系统内存需要设置不少于 192M,默认 128M 内存在启动时会报 “out of memory” 错误。

在这里插入图片描述


三、应用场景

免硬件开发软路由功能模块

利用 QEMU 仿真目标机器,在本机开发、编译并在本机仿真运行,节省了传统嵌入式开发固件烧录的时间。


四、参考资料

1、Build system setup
2、OpenWrt in QEMU


总结

本文介绍了在 Ubuntu 22.04 中编译 QEMU 可运行的 OpenWrt 固件的步骤,并指出过程中遇到的问题及解决方法。

相关文章:

  • Jeecg | 如何解决 ERR Client sent AUTH, but no password is set 问题
  • 前端应用开发实验:表单控件绑定
  • 什么叫USDT(泰达币)的前世今生!
  • JavaScript tab选项卡切换
  • 分享一个思路,使用插桩技术解决慢查询测试问题
  • 16:00面试,16:08就出来了,问的问题有点变态。。。
  • 【网络版本计算器的实现】
  • Scikit-Learn随机森林回归
  • Java设计模式:享元模式实现高效对象共享与内存优化(十一)
  • 音乐传奇告别之作:《杰作》未解之谜❗❗
  • YOLOv7添加注意力机制和各种改进模块
  • 微信聊天内容怎么监控? | 三款可以监控电脑微信聊天记录的软件大盘点
  • 每日两题 / 131. 分割回文串 42. 接雨水(LeetCode热题100)
  • HCIP的学习(24)
  • 数字化学校渠道的建造内容
  • 网络传输文件的问题
  • @angular/forms 源码解析之双向绑定
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • android图片蒙层
  • codis proxy处理流程
  • CSS 三角实现
  • Git 使用集
  • java中具有继承关系的类及其对象初始化顺序
  • mysql常用命令汇总
  • Puppeteer:浏览器控制器
  • Spring Boot MyBatis配置多种数据库
  • SQL 难点解决:记录的引用
  • vue-cli3搭建项目
  • windows下如何用phpstorm同步测试服务器
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零开始在ubuntu上搭建node开发环境
  • 电商搜索引擎的架构设计和性能优化
  • 记一次用 NodeJs 实现模拟登录的思路
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 主流的CSS水平和垂直居中技术大全
  • ​插件化DPI在商用WIFI中的价值
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (力扣)1314.矩阵区域和
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)JPA - JQPL 实现增删改查
  • (转载)Linux 多线程条件变量同步
  • .bat文件调用java类的main方法
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @NestedConfigurationProperty 注解用法