Kconfig-language翻译
1. 介绍
配置数据库是按树结构组织的配置选项的集合:
1 | +- Code maturity level options |
每个条目都有自己的依赖性。 这些依赖关系用于确定条目的可见性。 任何子条目只有在其父条目也可见的情况下才可见。
配置数据库是按树结构组织的配置选项的集合:
1 | +- Code maturity level options |
每个条目都有自己的依赖性。 这些依赖关系用于确定条目的可见性。 任何子条目只有在其父条目也可见的情况下才可见。
操作系统是控制应用程序执行的程序,是应用程序和计算机硬件间的接口。它有三个目标:
计算机由处理器、存储器和输入/输出部件组成,每类部件都有一个或多个模块。主要是4个结构化部件:
处理器:控制计算机的操作,执行数据处理功能。
内存:存储数据和程序。
链表的基础知识在这里就不在赘述了。Linux 内核提供了一种双链表的实现方式,实际上,通常它都组织成双循环链表。
链表数据结构的定义很简单,在Linux 4.15.0
中,list_head结构体定义在include/linux/types.h
文件中。
1 | struct list_head { |
具体的接口API函数整理如下:
接口函数 | 描述 |
---|---|
atomic_inc | 原子变量的值加一 |
atomic_inc_return | 同上,只不过将变量v的最新值返回 |
atomic_inc_and_test | 递增v指向的原子变量,并测试是否为0。若为0,返回真,否则返回假 |
atomic_dec | 原子变量的值减去一 |
atomic_dec_return | 同上,只不过将变量v的最新值返回 |
atomic_dec_and_test | 递减v指向的原子变量,并测试是否为0。若为0,返回真,否则返回假 |
atomic_add | 给一个原子变量v增加i |
atomic_sub | 给一个原子变量v减去i |
atomic_sub_and_test | 给一个原子变量v减去i,并判断变量v的最新值是否等于0 |
atomic_add_negative | 将v指向的原子变量加上i,并测试结果是否为负。若为负,返回真,否则返回假 |
atomic_read | 读取v指向的原子变量的值 |
atomic_set | 设置v指向的原子变量的值为i |
1 |
|
kref是一个引用计数器,它被嵌套进其它的结构中,记录所嵌套结构的引用计数,并在计数清零时调用相应的清理函数。kref的头文件在include/linux/kref.h。
以下代码摘自Linux 4.15.0
下面是kref的结构定义
删除
1 | struct tty_driver { |
1 | struct tty_operations { |
添加
1 | extern int tty_buffer_request_room(struct tty_struct *tty, size_t size); |
1 | _INLINE_ void tty_insert_flip_char(struct tty_struct *tty, unsigned char ch, char flag) |
添加
1 | #define DEFINE_TIMER(_name, _function, _expires, _data) |
1 | static inline void setup_timer(struct timer_list * timer, |
1 | void init_timer_key(struct timer_list *timer, |
为了提高系统的响应能力和并发能力,Linux将中断处理分了上半部和下半部。当一个中断产生,调用该中断对应的处理程序(上半部),然后告诉系统,对应的后半部可以执行了,中断处理程序立即返回,下半部会在合适的时机由操作系统调用。这样一来就大大的减少了中断处理所需要的时间。
tasklet是中断处理下半部分最常用的一种方法,驱动程序一般先申请中断,在中断处理函数内完成中断上半部分的工作后调用tasklet。