i2c tools

###1. i2c tools 在进行i2c总线设备的开发过程中, 经常需要探测i2c总线上是否存在设备, 读/写设备寄存器, dump设备的寄存器, i2c tools可以帮助我们完成这些任务 i2c-tools 工具包由4个tool组成 i2cdetect : 用于探测i2c总线及总线上的设备 i2cdump : 用于dump i2c设备的寄存器 i2cget : 用于读取i2c设备的寄存器 i2cset : 用于写i2c设备的寄存器 ###2. i2c设备的安装 ubuntu 等linux桌面系统上, 可以直接从软件仓库中安装 android上,可以从 i2c tools 下载地址 来下载i2c tools 源码 然后在andrroid源码中建立 external/i2c-tools 目录 external/i2c-tools...

iptables

###1. iptables iptables是linux中的L3防火墙(linux中还有L2的 arptables, ebtables), iptables 由 “ipfirewall -> ipchain -> iptables” 发展而来 iptable由userspace的iptables command 和 kernel 中的 iptables模块构成, iptables的内核模块基于netfilter框架开发, userspace中的iptables命令用于定义规则, 而kernel中的iptables模块则利用netfilter框架注册hook点, 根据定义的规则来过滤流经过滤点的数据包 ###2. iptables的过滤点类型 iptables 基于netfilter框架来注册hook点, 在netfilter的相关章节中, 已经讲解过, netfilter中定义了5种类型的hook点 : “NF_INET_PRE_ROUTING, NF_INET_LOCAL_IN, NF_INET_FORWARD, NF_INET_LOCAL_OUT, NF_INET_POST_ROUTING”, 在iptables中, 为这5种类型hook点定义了别名 NF_IP_PRE_ROUTING :...

netfilter 框架

###1. netfilter netfilter是linux中的一个网络子系统, 它提供了一套框架用于注册钩子函数, 用于实现诸如数据包过滤、网络地址转换(NAT)以及网络连接跟踪等功能 ###2. netfilter 支持的协议类型 在 “uapi/netfilter.h” 中定义了netfilter支持的网络协议 enum { NFPROTO_UNSPEC = 0, NFPROTO_IPV4 = 2, NFPROTO_ARP = 3, NFPROTO_BRIDGE = 7, NFPROTO_IPV6 = 10, NFPROTO_DECNET = 12, NFPROTO_NUMPROTO, }; 可见, netfilter 支持 ipv4, arp, bridge, ipv6,...

linux内核模块入/出口函数

###1. linux 内核模块入口 在编写linux内核模块时(无论是built-in, 还是built module), 通常使用“module_init()”宏来指定模块的入口函数,使用“module_exit()”宏来指定模块的出口函数, 例如 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> static int __init hello_init(void) { printk(KERN_INFO "sven : init\n"); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO "sven : exit\n"); } module_init(hello_init); module_exit(hello_exit); 使用module_init(hello_init)指明了模块的入口函数为 hello_init(),...

linux per-cpu 变量

###1. per-cpu 变量 per-cpu data 是内核为smp系统中不同CPU之间的数据保护方式,系统为每个CPU维护一段私有的空间用于存放per-cpu data,在这段空间中的数据只有这个CPU能访问, 即per-cpu data 在每一个cpu上都有一份副本, 每一个cpu只会访问自己的副本, 因此, 对per-cpu data的访问几乎不需要锁 可以看出, per-cpu data基本上只能在特殊情况下, 也就是当它确定在系统的各cpu上的逻辑上独立的时候才适合使用 per-cpu data常用于计数, 队列, tasklet、timer_list等机制都使用了per-CPU技术 虽然对per-cpu data的访问不许要加锁, 但是避免它被切换到另一个CPU上被处理, 因此, 在访问时, 还需要禁止抢占 ###2. 静态定义per-cpu data 相关的API定义在 “linux/percpu-defs.h” 中 // 没有特殊要求的 per-cpu data 的定义接口 DECLARE_PER_CPU(type,...