uloop源码剖析
uloop是OpenWrt基础库libubox的核心模块,提供事件驱动功能。
其主体框架由uloop_init、uloop_run_timeout和uloop_done三个函数构成,分别完成初始化、事件处理循环和清理工作。
uloop支持五大核心功能:
- 文件描述符监控基于epoll实现,通过epoll_wait处理就绪事件;
- 定时器事件在循环中检测超时;
- 子进程管理响应SIGCHLD信号;
- 信号处理通过管道实现;
- 间隔定时器依赖文件描述符机制。
生如夏花
专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等
uloop是OpenWrt基础库libubox的核心模块,提供事件驱动功能。
其主体框架由uloop_init、uloop_run_timeout和uloop_done三个函数构成,分别完成初始化、事件处理循环和清理工作。
uloop支持五大核心功能:
container_of
宏用于根据结构体某个成员的地址来获取结构体自身的地址,获得结构体自身地址之后可以访问该结构其他字段,定义在<linux/kernel.h>
中。
offsetof
宏用于计算结构体成员到结构体自身地址之间的偏移,定义在<linux/stddef.h>
中。
pragma pack预定义指令用于限制结构体成员的最大对齐数,结构体的对齐数取决于结构体成员的最大对齐数,结构体成员的对齐数取决于其自身大小和编译器设置的参数。
__attribute__((packed))
和__attribute__((aligned(n)))
分别用于GCC不设置对齐和设置以n
字节对齐。
在iptables中,”4表5链“是指iptables的四个表和五个链,它们共同作用于数据包的过滤和处理。
iptables 的四表五链(filter 表、nat 表、mangle 表、raw 表,以及 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING 链)都属于三层协议(网络层)处理。
如果数据包在二层(数据链路层)进行转发,例如通过网桥(bridge)或交换机进行转发,这些数据包不会经过 iptables 的这些链。
在多网卡的Windows系统中,可以通过配置路由表(永久路由和跃点数)来选择上网方式。
在Windows路由表中,跃点数(Metric)是一个整数值,用于确定路由的优先级。跃点数越小,优先级越高。它主要用于在多个路由中选择最优的路径。
OpenWRT提供了一些列shell标准接口(config_load, config_get, config_get_bool, config_cb, option_cb, list_cb, config_foreach, config_list_foreach
,以便在shell脚本中高效地读取和处理uci配置。
这主要用于在/etc/init.d
中写启动脚本。
OpenWRT在/lib/functions.sh
文件中提供了访问uci配置的shell接口,因此在使用这些接口之间需要直接或间接(包含rc.common
)的方式包含该文件。
OpenWrt在/lib/functions.sh
和/lib/config/uci.sh
提供了一组标准的shell接口来操作UCI配置,这样可以在Shell脚本中处理UCI配置。尤其是在/etc/init.d
目录下的配置文件中。
本文主要探索/lib/config/uci.sh
脚本中的uci_load
接口是如何将UCI配置加载到内存中的。
本文记录以下OpenWrt的入门知识,包括源码编译,make menuconfig
配置,feeds
包下载以及生成可以运行在VMWare上的镜像。
然后在VMWare上运行,并配置静态IP,然后可以使用SSH工具远程连接到OpenWrt系统中。
Feeds在OpenWrt中扮演着至关重要的角色,它们允许用户根据自己的需求定制和扩展路由器的功能。通过安装不同的Feed,用户可以添加新的软件包、更新现有软件包或删除不再需要的软件包。
基于Ubuntu23.04编译最新版Linux内核(6.8.9),并解决编译过程中的相关问题。
根据出现的问题,需要安装一下软件:sudo apt install flex bc libelf-dev
,并禁用系统相关证书:
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
UCI,Unified Configuration Interface,统一配置接口,是一个集中配置OpenWrt服务的系统。
UCI是OpenWrt中基于NVRAM配置的继承者,是OpenWrt主要系统功能配置的用户接口,包括网络、无线、日志以及远程访问等等。