在Ubuntu中编译openwrt过程

server/2025/3/26 5:43:29/

我只是老小白了,第一次编译自己需要用的openwrt。

一、编译条件:

虚拟机VM17

Ubuntu22.04

硬件:R5S amv8 4+32G

二、关于虚拟机VM和Ubuntu的安装,网上教程很多,请自行搜索安装。

1、不要用 root 用户进行编译
2、默认登陆IP 192.168.1.1 密码 password

三、编译过程:

1、安装完Ubuntu后,打开终端输入安装依赖命令:

sudo apt update -ysudo apt full-upgrade -ysudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \vim wget xmlto xxd zlib1g-dev

上述命令总共三条,第三条要注意复制全面,避免出现错误。

命令运行完,出现如上界面,通过方向键选择 是 ,继续。

2、下载源代码(施展魔法保安全)

git clone https://github.com/coolsnowwolf/openwrt  #Github 野火大佬
#B站 实用技能大佬
git clone https://github.com/openwrt/openwrt                #官方版本
git clone https://github.com/coolsnowwolf/lede              #lede版本
git clone -b 22.03 --single-branch https://github.com/Lienol/openwrt      #lienol版本

源代码只选择一个就可以,我选择的是野火大佬提供的源。

3、cd   openwrt 命令  切换到文件目录openwrt内

git tag                                              查看稳定版,回车键拉到最低,按Q结束!
git checkout v24.10.0                      指定版本,红色部分位版本号(其他版本不支持R5S)

3.1打开openwrt文件夹下的feeds.conf.default文件,将下列源添加到最后。

src-git kenzo https://github.com/kenzok8/openwrt-packages     
src-git small https://github.com/kenzok8/small
src-git fancontrol https://github.com/JiaY-shi/fancontrol.git

4、更新feeds(更新源码)

./scripts/feeds update -a                更新源码
./scripts/feeds install -a                  拷贝源码

5、添加常用插件(此处不用)

有两种方式添加插件,第一种是在feeds.conf.default文件中添加形如src-git-full luci https://github.com/openwrt/luci的源,一种是在源码目录的package下直接克隆源码,因为有时会出现意想不到的问题,且编译好后这个源会被添加进opkg的默认源中。

cd package/
git clone https://github.com/lisaac/luci-app-diskman.git # 磁盘管理
git clone https://github.com/jerrykuku/luci-theme-argon.git # 主题
git clone https://github.com/davinyue/luci-theme-edge.git # 还是主题
git clone https://github.com/rufengsuixing/luci-app-adguardhome.git # 去广告
git clone https://github.com/cokebar/openwrt-vlmcsd.git # kms服务器
git clone https://github.com/cokebar/luci-app-vlmcsd.git # kms服务器的luci
git clone https://github.com/sirpdboy/luci-app-netdata.git # netdata监控(项目中汉化版本的netdata支持持x86)
git clone https://github.com/sirpdboy/luci-app-advanced.git # 一些插件的高级设置(直接编辑cfg)和文件管理

6、编辑配置,定制openwrt

6.1 make menuconfig打开openwrt配置面板
make menuconfig

6.2 R5S的cpu架构选择

Target System -> 选择 Rockchip(而不是 Arm SystemReady (EFI) compliant

Subtarget ->RK33xx/RK35xx

6.3 Target Profile:
  • 选择 FriendlyARM NanoPi R5S
6.4 推荐的 Target Images 选项
  1. [ ] ramdisk (不勾选)

    • NanoPi R5S 通常使用 ext4squashfs,不需要 ramdisk。
  2. [ ] cpio.gz / [ ] tar.gz (不勾选)

    • 这些是 initramfs 相关的格式,不适用于标准 OpenWrt 运行方式。
  3. [✔] ext4 (建议勾选)

    • 适用于 SD 卡和 eMMC 存储设备,便于写入和扩展存储。
  4. [✔] squashfs (建议勾选)

    • squashfs 是 OpenWrt 默认的只读文件系统,可以节省空间。
  5. [✔] GZip images (建议勾选)

    • GZip 压缩可以减少固件大小,提高存储效率。
  6. Kernel partition size (16 MiB)

    • 保持默认或增加至 32MiB,以防止内核升级空间不足。
  7. Root filesystem partition size (104 MiB)

    • 建议增加到 256MiB 或更大,以适应后续安装软件包。
  8. [ ] Make /var persistent (可选)

    • 默认 /var 是临时存储(重启丢失),如果需要持久存储日志,可以勾选。

6.4、Wifi基础包

  打出的包可支持博通SDIO无线模块,Firmware不用选,因为打包源码中已经包含了来自Armbian的firmware,会自动覆盖openwrt rootfs中已有的firmware

   我的WiFi:MT7921 是 联发科 (MediaTek) 无线网卡,在 OpenWrt 里对应的驱动是 kmod-mt7921ekmod-mt76。需要在 Wireless Drivers 里找到以下选项并启用:

Kernel modules -> Wireless Drivers ->

6.4.1必选驱动
  1. kmod-mt76
    • 这是 MediaTek 的通用驱动,包含对 MT7921 的支持。
  2. kmod-mt7921e
    • 这是专门针对 MT7921 (PCIe) 无线网卡的驱动,如果你用的是 PCIe 版本的 MT7921,必须选这个。

可选驱动

  • kmod-mt7921u(如果你的 MT7921 是 USB 版本)
  • kmod-mt76-core(一般会自动选上)

如何选择

  1. Wireless Drivers 选项里找到 kmod-mt76kmod-mt7921e,用 <M> 选中(模块化编译)。
  2. 如果你的 MT7921 是 USB 版,再选 kmod-mt7921u
  3. 退出.

7、USB 驱动的选择取决于你的 设备用途,一般情况下可以选择以下模块:

Kernel modules -> -> USB Support -> 

7.1 必选 USB 驱动

  1. kmod-usb-core(已经被自动选中)

    • USB 基础支持,必须启用。
  2. kmod-usb-ohci

    • 支持 USB 1.1 控制器,如果你的设备有老旧 USB 端口(比如某些路由器)。
  3. kmod-usb-ehci

    • 支持 USB 2.0,如果你的设备有 USB 2.0 端口,必须启用。
  4. kmod-usb-xhci-hcdkmod-usb-xhci-pci

    • 支持 USB 3.0,如果你的设备有 USB 3.0 端口,就要选上这两个。

7.2 如果你要连接 USB 无线网卡

  • kmod-usb2(一般 USB 网卡都需要)
  • kmod-usb3(如果你是 USB 3.0 设备)

7.3 如果你要连接 USB 存储设备(U 盘、硬盘)

  • kmod-usb-storage(支持 U 盘、移动硬盘)
  • kmod-usb-storage-extras(支持一些特殊 USB 存储设备)
  • kmod-usb-storage-uas(USB Attached SCSI 支持,推荐选上)

7.4 如果你要连接 USB 4G/5G 网卡

  • kmod-usb-net(USB 网卡基础支持)
  • kmod-usb-net-cdc-ether(大部分 USB 4G/5G 网卡需要)
  • kmod-usb-net-rndis(部分 USB 共享网络设备需要)
  • kmod-usb-serial(USB 串口设备支持)
  • kmod-usb-serial-option(大部分 4G/5G 网卡用这个)
  • kmod-usb-serial-wwan(用于某些 4G 模块)

7.5 如果你要连接 USB 打印机

  • kmod-usb-printer

7.6 如果你要连接 USB 键盘/鼠标

  • kmod-hid
  • kmod-usb-hid

7.7我的R5S选择的安装

必须启用的 USB 相关驱动
  1. kmod-usb-core(已默认启用)

    • 作用:USB 子系统核心驱动,所有 USB 设备的基础支持。
  2. kmod-usb-dwc3

    • 作用:RK3568 采用 DWC3 控制器,此模块提供 USB 3.0 支持。
  3. kmod-usb-dwc2(可选)

    • 作用:部分设备可能仍需要 DWC2 控制器支持,但 RK3568 主要使用 DWC3。
  4. kmod-usb-dwc2-pci(可选)

    • 作用:PCI 设备上的 DWC2 控制器支持,通常不需要。
根据需求选择的驱动
  • 存储设备(U 盘、移动硬盘)

    • kmod-usb-storage(USB 存储支持)
    • kmod-usb-storage-extras(支持额外存储设备)
    • kmod-usb-storage-uas(启用 USB 3.0 UASP 加速)
  • 无线网卡(USB WiFi 适配器)

    • kmod-cfg80211
    • kmod-mac80211
    • 具体型号驱动(如 kmod-rtl8821cukmod-mt7921u
  • 键盘/鼠标(HID 设备)

    • kmod-usb-hid
  • 串口转 USB(TTL 转 USB 调试)

    • kmod-usb-serial
    • kmod-usb-serial-ch341(CH340/CH341 USB 转串口)
    • kmod-usb-serial-ftdi(FTDI USB 转串口)
    • kmod-usb-serial-pl2303(PL2303 USB 转串口)
  • USB 网络(USB 转网卡)

    • kmod-usb-net
    • kmod-usb-net-rndis(RNDIS 设备支持)
    • kmod-usb-net-asix(ASIX 芯片网卡)
    • kmod-usb-net-cdc-ether(CDC-Ethernet 设备支持)

不建议选的驱动

  • kmod-chaoskey:用于 Chaoskey 硬件 RNG,与 USB 3.0 无关,无需选中。
  • kmod-usb-atm:用于 USB ATM 设备,一般不需要。
  • kmod-usb-cdns / kmod-usb-cdns3:主要是 Cadence USB 控制器,RK3568 用不到。

8、WirelessAPD(无线 AP 守护进程)


Network -> WirelessAPD ->.

           -> hostapd-common
                                        -> wpa-cli
                                        -> wpad-basic
                     -> iw

9、插件和主题,语言设置选项,根据需求设置,为了减少编译失败的概率,其他都不要安装,主题也是。可以编译成功后单独编译插件在安装。

LUCI -> 2.Modules -> Translations -> Chinese simplified                简体中文 自选!

保存退出。

10、下载 dl 库,编译固件 (-j 后面是线程数)

make -j8 download V=s                     下载dl库,V=s 显示任务详细情况
make V=s -j4                                      4代表线程,根据个人实际情况调整        

或者:make -j$(nproc) V=s  :

  • -j$(nproc):根据 CPU 核心数进行并行编译,加快速度。
  • V=s:显示详细日志,方便调试。

11、下载编译压缩包

编译完成后输出路径:home/用户名/openwrt/bin/targets,下载到本地电脑,需要通过SSH远程登录进行下载。ubuntu默认是没开通SSH登录,所以需要进行开通。

开通SSH登录方法:

1,必须切换成为root用户
sudo -i
2,先更新软件列表和更新软件
sudo apt-get update
3,先更新软件列表和更新软件
sudo apt-get upgrade
4,安装ssh
apt-get install ssh
5,启动ssh服务
sudo /etc/init.d/ssh start
6,检查是否有ssh环境
ps -e | grep ssh

ubuntu开通root登录SSH权限

1, 使用普通用户登录后切换root
sudo -i
2,创建root管理员密码
passwd root
3,开启root登录
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
4,开启密码验证
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config
5,重启ssh服务
service sshd restart
6,检查是否有ssh环境
ps -e | grep ssh

12、问题处理(一)

12.1、重新配置

12.1、方法:使用命令

rm -rf ./tmp && rm -rf .config
make menuconfig
make V=s -j$(nproc)

12.2 如果编译失败,可以执行以下命令:

make clean               删除编译目录/bin和/build_dir目录中的文件
make dirclean          除了删除编译目录之外还删除编译工具目录,删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件,一般在更换CPU架构的情况下才操作。

感谢实用技能、WangONC、JiaY-shi等大拿的技术资料。


http://www.ppmy.cn/server/178505.html

相关文章

Sql Server数据库远程连接访问配置

这篇文章主要介绍了SqlServer数据库远程连接访问应该如何配置&#xff0c;有需要的小伙伴可以参考一下 前期的准备工作(这里只给出了官方的下载地址&#xff0c;安装步骤不作介绍了) SQL Server 下载 | Microsoft 下载 SQL Server Management Studio (SSMS) - SQL Server Ma…

STM32定时器-01定时器概述

内容概述 定时器是STM32中功能最强大、结构最复杂的一个外设&#xff0c;分为四部分&#xff1a; 一部分&#xff1a;定时中断功能 二部分&#xff1a;定时器输出比较&#xff0c;常见的用途&#xff1a;产生PWM波形&#xff0c;驱动电机&#xff08;如驱动舵机和直流电机&…

LeetCode 21Merge Two Sorted Lists 合并两个排序链表 Java

题目&#xff1a;将两个已排序的链表合并在一起。 举例1&#xff1a; 输入&#xff1a;list1 [1,2,4], list2 [1,3,4]; 输出&#xff1a;[1,1,2,3,4,4]; 举例2&#xff1a; 输入&#xff1a;list1 [] , list2 []; 输出&#xff1a;[] 举例3&#xff1a; 输入&#xff…

更改 docker0 IP

docker0 介绍 基本概念&#xff1a;docker0 是 Docker 安装时自动创建的一个 Linux 桥接网络接口。桥接网络就像是一个虚拟的交换机&#xff0c;它能把多个网络设备连接在一起&#xff0c;让它们能相互通信。在 Docker 里&#xff0c;docker0 充当了容器与宿主机以及容器之间通…

CAD模型导入Geant4

CADMesh是一个开源项目&#xff0c;专门用于将STL格式的CAD模型导入Geant4。以下是使用CADMesh操作STL模型的步骤&#xff1a; 准备工作 下载CADMesh开源代码&#xff1a;可以从GitHub或Gitee下载CADMesh的开源代码。 将CAD模型转换为STL格式&#xff1a;在CAD软件中创建几何…

DeepSeek进阶应用(二):结合Kimi制作PPT(双AI协作教程)

🌟引言: DeepSeek作为国产AI大模型,以强大的逻辑推理和结构化内容生成能力著称,擅长根据用户需求生成PPT大纲或Markdown文本;Kimi的PPT助手则能解析结构化内容并套用模板快速生成美观的PPT,两者结合实现“内容+设计”全流程自动化 名人说:苔花如米小,也学牡丹开。——…

C++Primer学习(13.2 拷贝控制和资源管理)

13.2 拷贝控制和资源管理 通常&#xff0c;管理类外资源的类必须定义拷贝控制成员。如我们在13.1.4节(第447页)中所见&#xff0c;这种类需要通过析构函数来释放对象所分配的资源。一旦一个类需要析构函数&#xff0c;那么它几乎肯定也需要一个拷贝构造函数和一个拷贝赋值运算符…

软考教材重点内容 信息安全工程师 第20章 数据库系统安全

20.1.2 数据库安全威胁 数据库安全威胁如下: (1)授权的误用(Misuses of Authority)。合法用户越权获得他们不应该获得的资源&#xff0c;窃取程序或存储介质&#xff0c;修改或破坏数据。授权用户将自身的访问特权不适当地授予其他用户&#xff0c;导致系统安全策略受到威胁&a…