0-OpenWrt前菜

2023-11-18

前言:接触 op 已达四年,今年开始梳理整体所学,具体还参考了佐大的视频,对 op 缺乏系统知识的可以尝试,总体而言官方文档和源码是最好的教程

OpenWrt Study

本文是学习了解使用 OpenWrt 前的一些基本知识点

uboot下升级固件

BCM:CFE
QCA:uboot
MTK:uboot

QCA升级的固件为 kernel/rootfs 单独分开的,而MTK直接上传 bin 或者 img 就可

进入uboot

安装串口工具

dmesg查看USB使用情况,基本都是ttyUSB0

sudo apt-get install micicom
sudo micicom -s #进入设置界面,

进入uboot,cat /proc/cpuinfo

安装tftpd

sudo apt-get install tftpd-hpa

BuildRoot: 主要用于创建交叉编译工具链,并编译 kernel
BusyBox: 它包含了所有 POSIX 系统需要的基本命令,以执行常见的系统维护任务以及许多用户和管理任务,因为其仅需很小的空间,所以常常使用在嵌入式硬件中

路由器启动过程分析

软件角度

  1. 硬件上电, CPU 复位(应该会进行 POST Power On Self Test (上电自检,对硬件进行检测的过程))
    1. 选择启动的介质(SPI/NAND Flash),是通过硬件实现的,类似采用 bootstrap 电阻
  2. Bootloader 启动,选择启动位置(SPI/NAND 中的某个镜像,比如 SPI 中刷 DD-WRT,NAND 中刷梅林)
  3. 系统启动

硬件角度

  1. 上电,CPU 的简单初始化
  2. Bootloader 阶段,CPU 再次 init 初始化,外设(如串口、网口、交换机)
  3. 系统运行,CPU 再次 init,外设初始化
    • 每个阶段的外设功能可能不一样

OpenWrt文件系统目录结构分析

遵循 FileSystem Hierarchy Standard(FHS)

admin@Router:/# ls
bin      dev      init     overlay  root     tmp      vendor
cfg      etc      lib      proc     sbin     usr      www
data     ini      mnt      rom      sys      var
  • bin(binary): 主要存放程序
  • sbin(system binary): 主要存放系统程序
    • 重要性: bin > sbin > xx/bin > xx/sbin (xx例如 usr)
  • etc: 各种配置文件(例如 dhcp network)
  • mnt/opt: 挂载点
  • proc/sys: 都是由Kernel创建的,系统文件
  • usr: 用户目录
  • www: luci
  • dev: 系统创建的所有设备
  • lib: library库
  • rom: 静态文件
  • tmp: 临时文件(但是是系统级别的)
  • var: 例如某些日志产生的文件

OpenWrt ubus框架分析

进程间通信
原来使用的是信号+

OpenWrt hotplug机制分析

内核态主动通知用户态

  1. 回调
  2. 监听(netlink)

OpenWrt 常见文件系统

按照 Flash布局

  • bootleader 固件 JffS2(overlay分区,一般由 Readonly+JffS2构成)
  • 固件:头 kernel rootfs(squash fs, 压缩过但是只读的)

按照系统层面

  • squashfs根文件挂载到 /rom系统目录
  • Jffs2分区挂载到 /overlay目录
  • overlayfs让 /overlay目录成为根目录
  • tmpfs 临时文件,放在内存中,如log日志
file eva.dummy.squashfs
eva.dummy.squashfs: Squashfs filesystem, big endian, version 3.1, uncompressed, 171 bytes, 1 inodes, blocksize: 131072 bytes, created: Sat Mar 17 17:22:26 2012
❯ unsquashfs eva.dummy.squashfs
Reading a different endian SQUASHFS filesystem on eva.dummy.squashfs
Parallel unsquashfs: Using 12 processors
0 inodes (0 blocks) to write


created 0 files
created 1 directories
created 0 symlinks
created 0 devices
created 0 fifos
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

0-OpenWrt前菜 的相关文章

  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了

随机推荐