OpenWrt介绍及编译基础教程_openwrt编译-程序员宅基地

技术标签: 网络  linux  智能路由器  杂项  

关于OpenWrt

OpenWRT是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。 同时,它还提供了100多个已编译好的软件,而且数量还在不断增加,而OpenWrt SDK 更简化了开发软件的工序。

OpenWRT不同于其他许多用于路由器的发行版,它是一个从零开始编写的、功能齐全的、容易修改的路由器操作系统。实际上,这意味着您能够使用您想要的功能而不加进其他的累赘,而支持这些功能工作的linux kernel又远比绝大多数发行版来得新。

OpenWrt的优势

如果对Linux系统有一定的认识, 并想学习或接触嵌入式 Linux 的话, OpenWRT很适合。 而且OpenWRT支持各种处理器架构,无论是对ARM,X86,PowerPC或者MIPS都有很好的支持。 其多达3000多种软件包,囊括从工具链(toolchain),到内核(linux kernel),到软件包(packages),再到根文件系统(rootfs)整个体系,使得用户只需简单的一个make命令即可方便快速地定制一个具有特定功能的嵌入式系统来制作固件。

一般嵌入式 Linux 的开发过程, 无论是 ARM, PowerPC 或 MIPS 的处理器, 都必需经过以下的开发过程:

  1. 创建 Linux 交叉编译环境;
  2. 建立 Bootloader;
  3. 移植 Linux 内核;
  4. 建立 Rootfs (根文件系统);
  5. 安装驱动程序;
  6. 安装软件;

熟悉这些嵌入式 Linux 的基本开发流程后,不再局限于[ MIPS] 处理器和无线路由器, 可以尝试在其它处理器, 或者非无线路由器的系统移植嵌入式 Linux, 定制合适自己的应用软件, 并建立一个完整的嵌入式产品。

编译OpenWrt前言

编译 Open­Wrt 的过程就像是复读机,除了选择系统组件外,几乎每次编译都是复制粘贴相同的命令。而理解每一条命令的作用、什么时候该去执行,这样才能更好的去解决编译中遇到的问题,更顺利的编译出固件。

编译OpenWrt基础教程

1.准备编译环境

首先装好 Ubuntu 64bit系统,推荐 Ubuntu 20.04 LTS x64。
不要使用 root 用户!

adduser openwrt
usermod -a -G sudo openwrt
su openwrt

2.安装编译依赖

终端命令行输入 sudo apt-get update,然后输入

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

3.拉取源码

1:lede 源码 git clone https://github.com/coolsnowwolf/lede

2:官方源码 git clone https://git.openwrt.org/openwrt/openwrt.git

3:天灵源码 git clone -b 你想要拉的分支 --single-branch https://github.com/immortalwrt/immortalwrt

git clone (代表克隆拉取的意思) 后面的才是源码的开源地址

4.更新下载feeds (这里以lede源码为例)

添加第三方feeds源

feeds里添加:

src-git kenzok https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small

找到文件 lede/feeds.conf.default

把上面的两段复制进去保存

feeds 是扩展的软件包,独立于 Open­Wrt 源码之外,所以需要单独进行拉取和更新。

终端 cd lede 进入源码目录:

./scripts/feeds update -a (更新feeds源)
./scripts/feeds install -a (安装feeds源)
# 为了保险建议打两遍和一样就没问题了

5.配置文件的设置

make menuconfig

在这里插入图片描述

图形配置界面

OpenWrt Configuration【OpenWrt配置】

Target System (x86)> 目标系统(x86)

Subtarget (x86_64)> 子目标(x86_64)

Target Profile (Generic)>目标配置文件(通用)

Target Images —> 保存目标镜像的格式

Enable experimental features by default —> 默认情况下启用实验功能

Global build settings —> 全局构建设置

Advanced configuration options (for developers) ---- 高级配置选项(适用于开发人员)

Build the OpenWrt Image Builder 构建OpenWrt图像生成器

Build the OpenWrt SDK构建OpenWrt SDK

Package the OpenWrt-based Toolchain打包基于OpenWrt的工具链

Image configuration —>图像配置

Base system —> 基本系统

Administration —> 管理

Boot Loaders —>引导加载程序

Development —> 开发

Extra packages —> 额外包

Firmware —>固件

Fonts —>字体

Kernel modules —> 内核模块

Languages —>语言

Libraries —> 图书馆

LuCI —> LuCI 软件包

Mail —>邮件

Multimedia —>多媒体

Network —>网络

Sound —> 声音

Utilities —>实用程序

Xorg —>Xorg

选择你路由器CPU的架构
首次编译建议只选择架构,其它都不要动,这样编译成功率会更高。如果不打算调整组件则输入make defconfig,它会检测编译环境并生成默认的编译配置文件。

6.下载dl(依赖)库

#下载dl库(国内请尽量全局科学上网)
make -j8 download V=s 

j8代表你的CPU线程数 8=8线程

但似乎有个上限,实测5线程以上其实速度相差不了多少,在 (科学) 网络好的情况下,基本在5分钟以内能下载完。

find dl -size -1024c -exec ls -l {
    } ;

此命令可以列出下载不完整的文件(根据我多次编译的经验得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用find dl -size -1024c -exec rm -f {} ;命令将它们删除,然后重新执行make download下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。(这段可以不执行)

7.编译固件

make -j1 V=s

-j1:使用单线程编译。新手推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志。
V=s:输出详细日志,用于编译失败时找出错误。而且满屏代码在跑能装逼,一跑就是几个小时,装逼更持久。(上面也说了)

编译完成后输出路径:bin/targets

8.如果需要重新配置

rm -rf ./tmp && rm -rf .config
make menuconfig
make -j(((((nproc) + 1)) V=s   #(多线程编译失败后自动进入单线程编译,失败则输出详细日志)

9.编译更换其它CPU架构的固件(建议操作)

清除旧的编译产物

make clean

在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。

清除旧的编译产物、交叉编译工具及工具链等目录

make dirclean

更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。

清除 Open­Wrt 源码以外的文件(可选)

make distclean

除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。

还原 Open­Wrt 源码到初始状态(可选)

git clean -xdf

如果把源码改坏了,或者长时间没有进行编译时使用。

清除临时文件

rm -rf tmp

删除执行make menuconfig后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载package目录下的软件包。若不删除会导致一些新加入的软件包不显示。

删除编译配置文件

rm -f .config

在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消,所以对于需要调整组件的情况下建议删除。

所有操作不要root用户

今天的教程就到这里,后面再讲个性化定制的教程。

网盘编译好的有提供,可直接使用,下载地址:https://pan.wwang.pw

信息,删除后会重新加载package目录下的软件包。若不删除会导致一些新加入的软件包不显示。

删除编译配置文件

rm -f .config

在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消,所以对于需要调整组件的情况下建议删除。

所有操作不要root用户

今天的教程就到这里,后面再讲个性化定制的教程。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010674953/article/details/129280724

智能推荐

力扣——快乐数(JavaScript)_js实现快乐数-程序员宅基地

文章浏览阅读45次。力扣编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true;不是,则返回 false。_js实现快乐数

[技美]反编竞品shader过程_unity shader反编译-程序员宅基地

文章浏览阅读5.9k次,点赞6次,收藏41次。Renderdoc下载地址:https://renderdoc.org/Renderdoc截帧教程:https://zhuanlan.zhihu.com/p/80704313GPA下载地址:https://software.intel.com/content/www/us/en/develop/tools/graphics-performance-analyzers.htmlGPA截帧教程:https://zhuanlan.zhihu.com/p/68741433竞品游戏模型破解流程:htt_unity shader反编译

python asp.net requests_无法使用Python的requests模块登录到ASP.NET网站-程序员宅基地

文章浏览阅读203次。我试图使用Python中的requests模块登录到ASP.NET网站。手动登录网站时,我可以看到以下标题以及cookies。请求头:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding:gzip,deflateAccept-Language:en-US,en..._python的request娶不到asp.netsession

2024——剑之所至,所向披靡-程序员宅基地

文章浏览阅读1.4k次,点赞34次,收藏22次。回顾2023年,这一年,从平凡到不平凡。回头看,如释重负,轻舟已过万重山。我本寒门子弟,却有着一刻不平凡的心;从参加工作开始,已有三年多了,一直保持着一个信念;学无止境,学习才能让我不迷茫;才会让那无处安放的心灵得到沉淀,那些抑郁不得志的日子,都是在图书馆扎根。回望待在上海浦东图书馆的日子,从早到晚,早到五点的闹钟,响了又响,晚到图书馆大爷拿着喇叭,驱赶着我们。图书馆的每一本书籍,都有我们记忆的碎片。前路漫漫,但终究我们还是一路向前!路虽远,行则将至;事虽难,做则必成!

Unity 室外光照-程序员宅基地

文章浏览阅读1.1k次,点赞13次,收藏20次。Unity 光照文档:目的:提升游戏体验和视觉效果Unity 使用详细的光线工作模型来获得更逼真的结果,并使用简化模型来获得更具风格化的结果。

制作优美的库文件_如何制作库文件-程序员宅基地

文章浏览阅读826次,点赞8次,收藏8次。目录前言一、项目工程二、制作过程1.编译选项2.符号处理总结前言本文讲的是如何制作库文件,你可能会问了,制作库文件不就是一个编译命令吗?没错,生成一个库文件就是用一条编译命令即可达到目的,但是如果制作一个接口完美封装、安全、高效的库文件,还是需要查阅很多资料,了解很多编译原理才能做到的,本文就是我查阅了很多资料,花了几天时间,做了很多次实验而实现的,下面就是我对这个功能的总结。一、项目工程设计一个数组元素的加减乘除作为库对外的接口INT32 ARRAY_ADD(_如何制作库文件

随便推点

yarn 8088 页面无法打开:拒绝连接请求_8088网页-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏24次。前言:namenode, datanode, resourcemanager, nodemanager全部正常启动,但是无法打开web页面:http:// 本机IP :8088/cluster。这个问题的解决,有两个思考方向:1.本机与虚拟机网络连接问题:查看本机与虚拟机能否ping通,如果不通那就是虚拟机无法与外界通讯,常见的是虚拟机防火墙未关闭的原因。(如果是没有设置过虚拟机网络的,得去搜配置教程。。这个应该是在配置yarn之前早就解决的问题啦)<我的50070端口的web页面可以正常打开_8088网页

反思:安全需要新体系_安全服务反思:把渗透测试做成服务-程序员宅基地

文章浏览阅读1k次。转载于:http://news.csdn.net/a/20111228/309819.html 这几天互联网爆出用户帐户泄密事件,先是CSDN,然后是其他互联网巨头,然后又是天涯,似乎没完没了。事实上,远远不止这些,这仅仅是开头而不是结束,以后会爆出更多、更广、更有害的泄密,比如通信公司用户帐号泄密、银行系统用户帐号泄密,事情只会越来越严重。除非出现新的安全体系模型。大型互联网公_安全服务反思:把渗透测试做成服务

【通信原理| OFDM技术的最简讲解(上)】窄带、宽带与频分复用、多载波调制的讲解-程序员宅基地

文章浏览阅读1.4w次,点赞145次,收藏410次。文章目录前言一. 窄带与宽带二. 频分复用和多载波调制前言OFDM (Orthogonal frequency-division multiplexing, 正交频分复用) 技术,是4G LTE系统中的最核心技术之一, 其最核心的优势是可以很好地应对多径干扰。 随着5G时代的到来, 6G也被提上议程。 通信系统在未来势必往着速率更快, 带宽更高的方向发展, 而OFDM技术作为应对宽带场景的最有效手段, 必定不会缺席。 看了下目前网络上没有太好的OFDM的讲解, 许多博主把这本应浅显的技术, 用一堆生涩的_ofdm技术

hook API 详解_hook api需要hook那种类型的-程序员宅基地

文章浏览阅读1.4k次。来源:http://cisco.chinaitlab.com/safety/366596.html详谈HOOK API的技术HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现。这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API、中断服务、IFS和NDIS过滤等。比如大家熟悉的即时翻译软件,就是靠HOOK TextOut()或Ex_hook api需要hook那种类型的

电商API:淘宝/天猫获取sku详细信息_可以看 淘宝sku的z网站-程序员宅基地

文章浏览阅读2.5k次。item_sku-获取sku详细信息[查看演示]onebound.taobao.item_sku请求参数:num_iid=572050066584&sku_id=3880971359554&is_promotion=0参数说明:sku_id:SKU IDnum_iid:商品IDis_promotion:是否获取取促销价返回值说明名称 类型 是否隐私 示例值 描述nu..._可以看 淘宝sku的z网站

数字图像处理-相关知识-程序员宅基地

文章浏览阅读226次。数字图像处理(内含算法链接)

推荐文章

热门文章

相关标签