jjzjj

OpenWrt介绍及编译基础教程

J.P.August 2024-01-01 原文

关于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用户

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

有关OpenWrt介绍及编译基础教程的更多相关文章

  1. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  5. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  6. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  7. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  8. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  9. .net - 是否有 Ruby .NET 编译器? - 2

    是否有适用于Ruby语言的.NETFramework编译器?我听说过DLR(动态语言运行时),这是否将使Ruby能够用于.NET开发? 最佳答案 IronRuby是Microsoft支持的项目,建立在动态语言运行时之上。 关于.net-是否有Ruby.NET编译器?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/199638/

  10. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

随机推荐