前言:接触 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 系统需要的基本命令,以执行常见的系统维护任务以及许多用户和管理任务,因为其仅需很小的空间,所以常常使用在嵌入式硬件中
路由器启动过程分析
软件角度
- 硬件上电, CPU 复位(应该会进行 POST Power On Self Test (上电自检,对硬件进行检测的过程))
- 选择启动的介质(SPI/NAND Flash),是通过硬件实现的,类似采用 bootstrap 电阻
- Bootloader 启动,选择启动位置(SPI/NAND 中的某个镜像,比如 SPI 中刷 DD-WRT,NAND 中刷梅林)
- 系统启动
硬件角度
- 上电,CPU 的简单初始化
- Bootloader 阶段,CPU 再次 init 初始化,外设(如串口、网口、交换机)
- 系统运行,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机制分析
内核态主动通知用户态
- 回调
- 监听(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