深入理解openwrt架构(一)--安装准备和目录分析

2023-11-11

openwrt 安装准备和目录分析

.安装准备工作

我选择的是虚拟机上安装ubuntu12.10的linux操作系统,最好是在普通用户下操作。
1 ,安装 linux 上的更新组件
        为了支持 openwrt 的安装编译,在 linux 操作系统上需要安装以下的软件
       $ sudo apt-get install gcc g++ binutilspatch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversionlibncurses5-dev ncurses-term  zlib1g-devsubversion git-core gawk libz-dev asciidoc  -y
2 ,新建 openwrt 目录并进入
   $ mkdir /opt/openwrt
   $ cd    /opt/openwrt
3 ,从官网下载 openwrt 的最新源码 trunk 版本的(这个版本支持的硬件更多)
   $ svn co svn://svn.openwrt.org/openwrt/trunk
   $ svn up  // 更新 openwrt 版本号和源码   
    下载后的的目录如下:
4 ,为 trunk 目录添加如下权限
   $ sudo chmod -R /opt/openwrt/trunk
5 ,在 trunk 目录下,升级所有扩展软件源列表
   $ ./scripts/feeds update -a
    这一步的结果是:产生 $(TOPDIR)/feeds 目录,存放的就是执行
   feeds.conf.default 文件后的结果:从指定 svn 中下载的文件
6 ,安装所有扩展软件
   $ ./scripts/feeds install - a
    这一步的结果是:在 package 目录中多了一个 feeds 目录,里面存放的子目录是到 $(TOPDIR)/feeds 目录的链接
    注意:在 TOPDIR/Makefile 中,有如下定义:
   # update allfeeds, re-create index files, install symlinks
   package/symlinks:
   $(SCRIPT_DIR)/feedsupdate -a
   $(SCRIPT_DIR)/feedsinstall -a
    那么,可以想见,上述两个也可以合并为一步,即 make package/symlinks
7 ,使用默认编译环境,检查是否能进行编译
   $ make defconfig
8 ,配置自定义的镜像配置
   $ make menuconfig
    对于如何进行配置,将在后面的讲解中进行详解
9 ,编译镜像
   $ make V=99
    第一次编译可能需要花费很长的时间,根据你的网络而定,一般情况下大约是 2~3 个小时,最主要的是花费在下载源码的时间上,以后编译一般在半个小时左右就能编译好。
10 ,编译完成之后,将会多出几个目录如下:
增加的目录包括:bin/ , build_dir/, dl/, feeds/,staging_dir/
11 make 步骤分析
      简单来说 , 一旦 OpenWrt buildroot 已正确配置 , 如指定目标平台和体系结构 , 用户空间包已经选择等 , OpenWrt buildroot 会通过以下步骤编译镜像 ( 一旦配置完成 )
    a)  下载交叉编译工具,内核头文件等。
    b) 建立 staging_dir/ 目录,这个目录是交叉编译工具链将被安装的地方,如果你想使用相同的交叉编译工具链用作其他目的,比如编译第三方应用程序,你可以找到在这个目录下找到交叉编译工具,然后使用 arch-linux-gcc  编译你的应用程序。
    c) 创建下载目录 dl/ tar 包将下载到这里。
    d)  创建编译目录 build_dir/ ,用户态的工具和应用程序包将被解压或者复制到这里来进行编译。
    e)  创建目标目录 build_dir/target-<arch>*/root-<arch> 和目标文件系统架构目录,包含最终的根文件系统。
    f)  安装用户态软件包到根文件系统和以适当的格式压缩整个根文件系统。
     最后根文件系统的固件镜像在 /bin/<arch>/ 下生成。
目录结构分析
                             
                      图 目录结构图
     1 openwrt 的基本的目录结构,其中白色部分是直接下载源码就有的源目录,蓝色部分则是通过 make 之后产生的目录(其中 feeds 目录则是通过命令 ./scripts/feeds update -a;./scripts/feeds install -a 之后安装的扩展包目录,这个目录将所有的文件链接到 package/feeds/ 中去了)
        a)  tool toolchain 目录: 是编译固件 image ,获取内核头文件,二进制编译器和调试器, c 库文件,需要用到的通用工具。
       b)  include 目录: 编译时的头文件索引,源码包就有。是一些编译用的通用脚本和 include 宏定义。比较重要的包括: package.mk 文件(几乎每个 package 目录中的模块的 makefile 中都提到它)
      c) scripts 目录: openwrt 的包进行管理的 perl 脚本,源码包就有。存放各类脚本的目录,比如: feeds 脚本,使用 .scripts/feeds update -a 或者 .scripts/feeds install -a ,就可以对 feeds.conf.default 中列举的文件进行处理了。
       d)  target 目录: 包含了特定平台的文件,固件镜像和内核构建过程的索引,以及生成编译器个编译工具。其中 linux 目录下为各个平台 <arch> 的相应的内核 patches ,配置文件等, imagebuilder 目录则扫描如何生成这个平台的固件。源码包就有的。用来指导如何编译 firmware 和内核,以及 sdk
      e) package 目录和 feeds 目录 :在 openwrt 中,基础的软件包目录为 package ,扩展的软件包在 feeds 中, feeds 中的软件扩展了 openwrt 的基本功能,它将所有的软件链接到 package/feeds 中。这些软件大多数都是编译成 .ipk 格式的。这里面有内核模块文件。有各种软件的源码,以及 patch 文件和 Makefile 用来下载源码的。源码包就有。里面是随 openwrt 主版本就提供的包。除了用户态的 N 多模块外,还有 kernel 目录,用来定义内核模块( feeds 目录: make 之后的新增目录。里面存放的就是按照 feeds.conf.default 文件中列举的要处理的文件,所展开得到的目录。目录中存放的东西,和 package 目录中大致相似。指导如何下载和编译对应模块的)。
      f) dl 目录: 编译工具,目标, package 所需要的软件包将从网上下载放到 dl 目录中
       g)  build_dir 目录: 一个临时目录,用来将所有需要编译的软件源码放到这个目录中进行编译。它包括一下三个目录:
      build_dir/host:   与编译目标无关的工具的临时文件夹
           build_dir/<arch>*:  作为所有目标, package 编译的临时目录
          build_dir/toolchain-<arch>*:   编译特定体系的交叉编译链的
                                文件夹
            
     h) staging_dir 目录: 用于存放构建目标系统镜像的工具软件,包括:
       staging_dir/host:   宿主系统使用的工具
            staging_dir/<arch>*:   目标系统使用的软件软件包
            staging_dir/<toolchain-<arch>*:  交叉编译工具链
        目录的作用是: build_dir 是编译的地方,那么这里就是把 build_dir 的结果放在了 staging_dir 目录了。
     i) bin 目录: make 之后的新增目录,用来存放 make 的结果。比如我是用来编译 ramips 的,则此目录中会有: ramips 子目录,其中又包含: packages 子目录(里面含有各种 .ipk 文件,以及一个 Packages 文件用来介绍此目录中的每个 ipk 文件)和可以烧入路由器的 ***.bin 固件。
       其他文件:
     j)  Makefile 文件: make 命令的总入口
      k)  rules.mk 文件: 定义了一系列在 make 时使用的规则
       l) .config 隐藏文件 makemenuconfig 后的保存的配置文件。   
   m).config.old 隐藏文件: 老的 .config 文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入理解openwrt架构(一)--安装准备和目录分析 的相关文章

  • windows上删除不了文件

    遇到文件或者文件夹无法删除或者移动 其实本质是因为有应用或者其他软件在打开它 所以会导致我们无法更改他的位置 解决这个的办法就是把相应的软件关闭掉 把文件释放出来 然后我们就可以正常移动或者删除了 方法 步骤 遇到问题的情况 文件被使用无法
  • MySQL数据库总结 之 函数命令总结

    MySQL命令语句中的函数包含四种 字符串函数 数值函数 日期函数 流程函数 前两篇关于MySQL的博客 地址如下 MySQL数据库 SQL语言命令总结 数据类型 运算符和聚合函数汇总 Flying Bulldog的博客 CSDN博客htt

随机推荐

  • (附源码)计算机毕业设计SSM疫情隔离便民系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 字符串中找出连续最长数字串(两种题型)--C++

    题目描述一 读入一个字符串str 输出字符串str中的连续最长的数字串 输入描述 个测试输入包含1个测试用例 一个字符串str 长度不超过255 输出描述 在一行内输出str中里连续最长的数字串 输入 abcd12345ed125ss123
  • 安装xposed(解决xposed问题)

    科学上网可轻松解决本文的问题 经过测试leidian mumu yeshen三个模拟器的最新版本只有leidian安装完成后可以重启 其他两个均会卡99 模拟器再起不能 MuMu模拟器win版 版本 2 1 3 可以 安装xposed前需关
  • 面试必备—MySQL中数据查询语句

    一 基本概念 查询语句 基本语句 1 select from 表名 可查询表中全部数据 2 select 字段名 from 表名 可查询表中指定字段的数据 3 select distinct 字段名 from 表名 可对表中数据进行去重查询
  • 使用XStream实现Java对象与XML互相转换(不断更新中)

    添加pom依赖
  • 学习周报-2023-0210

    文章目录 一 在SUSE11sp3系统中将openssh从6升级到8 一 需求 二 系统环境 三 部署流程 1 上传编译安装的软件包 2 安装 gcc编译软件 3 安装依赖zlib 4 安装依赖openssl 5 安装openssh 二 在
  • 华为OD机试真题- 战场索敌-2023年OD统一考试(B卷)

    题目描述 有一个大小是NxM的战场地图 被墙壁 分隔成大小不同的区域 上下左右四个方向相邻的空地 属于同一个区域 只有空地上可能存在敌人 E 请求出地图上总共有多少区域里的敌人数小于K 输入描述 第一行输入为N M K N表示地图的行数 M
  • 8-js高级-2

    JavaScript 进阶 2 了解面向对象编程的基础概念及构造函数的作用 体会 JavaScript 一切皆对象的语言特征 掌握常见的对象属性和方法的使用 深入对象 内置构造函数 综合案例 深入对象 了解面向对象的基础概念 能够利用构造函
  • TesseractEngine

    URL http download csdn net download fuxuan928 4068683 GOOGLE https code google com p tesseractdotnet 下面识别OCR验证码用 NET来实现
  • 使用Python爬虫定制化开发自己需要的数据集

    在数据驱动的时代 获取准确 丰富的数据对于许多项目和业务至关重要 本文将介绍如何使用Python爬虫进行定制化开发 以满足个性化的数据需求 帮助你构建自己需要的数据集 为数据分析和应用提供有力支持 1 确定数据需求和采集目标 在开始定制化开
  • QT学习—五种直接连接信号槽的连接方式

    一 信号与槽机制 特别鸣谢B站大轮明王讲Qt的讲解 大轮明王讲Qt的个人空间 哔哩哔哩 bilibili 信号与槽机制 Signal and Slot 是一种在软件开发中广泛使用的通信机制 主要用于处理事件驱动的程序设计 它是Qt框架中的一
  • 使用 Spot 低成本运行 Job 任务

    作者 代志锋 云果 阿里云技术专家 导读 本节课程有三部分内容 首先阐述 ECI 支持成本优化的几种方式 然后重点介绍 Spot 实例是什么以及如何采用 Spot 实例进行成本优化 最后总结 Spot 实例支持的场景以及注意事项 成本优化
  • 基于JWT token认证机制和基于session认证机制

    基于session认证机制 http协议本身是一种无状态的协议 而这就意味着如果用户通过应用向服务器提供了用户名和密码进行认证 下一次请求时 用户还要再一次进行用户认证 因为根据http协议 服务器并不知道是哪个用户发出的请求 所以 为了识
  • 易语言服务器客户端网络验证,超强网络验证系统附远程服务支持库

    这套网络验证我自己用了好几年 也是在几年前开发的 并且完整开源的源码 如果真 超级列表框 取表项数 0 信息框 先读取要导出的充值卡信息 48 提示 返回 如果真结束 如果真 信息框 是否要导出选列表框中 到文本 超级列表框 取表项数 条数
  • openwrt运行linux软件,OpenWrt运行go程序(交叉编译)-Go语言中文社区

    OpenWrt运行go程序 交叉编译 引言 因项目要求 需要在openwrt系统上运行http服务 由于对openwrt自带的uhttpd服务器及luci不熟悉 所以决定采用go语言来实现http服务 以下是配置go的过程以及踩过的一些坑
  • 【AI人工智能】 iTab浏览器标签页中最强大的AI功能莫过于此了, 你不用真的太可惜了! 最后一步就这样干(3)

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 集成使用AI功能 接着我们打开Chrome浏览器 你就会发现标签页变成了iTab专属
  • Koa-router异步返回ctx.body失效的问题

    情景复现 router put category id ctx next gt const data ctx request body db updateCategoryById ctx params id data then doc gt
  • var' used instead of 'let' or 'const' 解决方案

    点击右下角的Apply 就可以啦
  • Unity2019.3API教程(三)GameObject类

    GameObject类 1 官方定义 class in UnityEngine Inherits from Object Implemented in UnityEngine CoreModule 属于 UnityEngine命名空间下的类
  • 深入理解openwrt架构(一)--安装准备和目录分析

    openwrt 安装准备和目录分析 一 安装准备工作 我选择的是虚拟机上安装ubuntu12 10的linux操作系统 最好是在普通用户下操作 1 安装 linux 上的更新组件 为了支持 openwrt 的安装编译 在 linux 操作系