生如夏花

专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等

内核数据结构之container_of

container_of宏用于根据结构体某个成员的地址来获取结构体自身的地址,获得结构体自身地址之后可以访问该结构其他字段,定义在<linux/kernel.h>中。

offsetof宏用于计算结构体成员到结构体自身地址之间的偏移,定义在<linux/stddef.h>中。

pragma pack预定义指令用于限制结构体成员的最大对齐数,结构体的对齐数取决于结构体成员的最大对齐数,结构体成员的对齐数取决于其自身大小和编译器设置的参数。

__attribute__((packed))__attribute__((aligned(n)))分别用于GCC不设置对齐和设置以n字节对齐。

iptables四表五链

在iptables中,”4表5链“是指iptables的四个表和五个链,它们共同作用于数据包的过滤和处理。

iptables 的四表五链(filter 表、nat 表、mangle 表、raw 表,以及 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING 链)都属于三层协议(网络层)处理。

如果数据包在二层(数据链路层)进行转发,例如通过网桥(bridge)或交换机进行转发,这些数据包不会经过 iptables 的这些链。

OpenWrt之shell脚本处理UCI配置

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)的方式包含该文件。

Linux内核编译

基于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 system

UCI,Unified Configuration Interface,统一配置接口,是一个集中配置OpenWrt服务的系统。

UCI是OpenWrt中基于NVRAM配置的继承者,是OpenWrt主要系统功能配置的用户接口,包括网络、无线、日志以及远程访问等等。

Linux路由表

主机和网关(路由器)的本质区别在于主机从不把数据报从一个接口转发到另一个接口,而网关(路由器)则要转发数据报

当今大多数用户系统,IP层既可以配置为网关(路由器)的功能,也可以配置为主机的功能。