0%

本文转载自 https://www.ibm.com/developerworks/cn/linux/l-acpi/part2/index.html

六. 例子:事件通告/响应型

a.Linux关于Hot-Plug有关的SCI中断以及通用事件(GPE)的处理:
下面介绍GPE相关的事件,底层硬件的处理过程:
通用事件寄存器(见重要名字解释部分)的逻辑位于南桥芯片之内,通常而言,所有的ACPI相关的寄存器和电源管理的IO以及寄存器都位于南桥。例如ICH4;保存在BIOS的FADT中,在Linux内核中通常以fadt_descriptor_rev2的数据格式表示,以下是和ACPI通用事件寄存器相关的一些字段,acpi_gbl_FADT数据结构的各个字段的值通常在初始化的时候从BIOS中的RSDT表中获得:


通过FADT获得当前的事件寄存器描述之后,就知道当前ACPI系统中事件寄存器的硬件地址,长度,各个状态位的情况,这里就有一个更加高级的数据结构介入来对每个事件(状态位)的响应调动对应的句柄,这个数据结构就是GPE Block结构:struct acpi_gpe_block_info *gpe_block,它是GPE的响应核心,在初始化ACPI驱动的阶段将会由acpi_ev_create_gpe_block这个函数创建这个数据结构,扫描名字空间(Namespace);在名字空间中通常会有专门的全局对象节点针对GPEx_STS寄存器的各个位具体执行操作节点进行描述,如下例:_GPE用来表示GPE寄存器,以及相应的需要通知OSPM处理动作,例如:

Read more »

本文转载自 https://www.ibm.com/developerworks/cn/linux/l-acpi/part1/index.html

一.ACPI 热拔插的简介

由 INTEL,MICROSOFT 及 TOSHIBA 所共同开发而成的 ACPI(Advanced Configuration & Power Interface,先进架构电源配置标准)能使软、硬件、操作系统(OS),主机板和外围设备,依照一定的方式管理用电情况,系统硬件产生的 Hot-Plug 事件,让操作系统从用户的角度上直接支配即插即用设备,不同于以往直接通过基于 BIOS 的方式的管理。
这种技术对系统平台、外插板卡硬件上都有特定的要求:系统集成热插拔控制集成电路(PHP ASIC)和 PCI 插槽的逆电流控制器,这样在系统启动过程中可以自动监测 PCI 插槽上是否有设备,当探测到 PCI 插槽上无设备时,能够自动将该插槽断电,在系统的 ACPI BIOS 中包含一系列硬件存储空 PCI 插槽的资源信息如地址段、中断号等以便提供给 Hot Plug 的插卡所用的资源列表 ACPI Table,这些资源列表在上电之后用于进行 PCI 设备的枚举和配置,目前南桥芯片上都集成了 ACPI 协议,例如在 Intel 82801DB I/O Controller Hub 4(ICH4)。
ACPI 基本的体系结构如图 1 所指示:
ACPI 系统由主板总线系统的电气特性支持、主板 BIOS 支持、ACPI 层、操作系统热插拔功能的总线驱动构成。


随着 Intel 64 位 PCI 技术的成熟,Microsoft、Novell 和 SCO 开发的操作系统都开始全面支持 PCI设备 ACPI 热插拔技术(PCI Hot Plug)。
Linux 内核从 2.4 开始支持 ACPI 技术,而到了 2.6.0 以上版本的内核全面支持 ACPI 下的 Hot-plug 规范;根据这个基础,在下面,我们将要从底层的角度和应用的角度上详细介绍基于”传统的”x86 体系下 ACPI PCI 热插拔设备 Linux kernel 下的驱动构成和 ACPI 层上工作模式和流程(在上半部分将介绍基本原理和命令形模式),向非 x86 平台移植的注意事项,以及一些 Linux ACPI 热拔插设备驱动程序开发的注意事项。

Read more »

前言

前两天看到新闻说阿里开放语雀的团队使用权,通过搜索发现可以使用插件,将语雀作为博客的在线编辑器。

安装yuque-hexo

参考https://github.com/x-cold/yuque-hexo,不再详诉。

插件官方网站对如下几个参数没有仔细介绍,说明如下:

参数名 含义
baseUrl 语雀 API 地址,应该为https://www.yuque.com/api/v2
login 语雀 login (group), 也称为个人路径。例:我的个人语雀个人专栏为https://www.yuque.com/lambert.wang/me,这里就要填lambert.wang
repo 语雀仓库短名称,也称为语雀知识库路径
我的个人语雀个人专栏为
https://www.yuque.com/lambert.wang/me,这里就要填me
Read more »

闲言

想写点什么,都不知道标题该怎么写。
疫情已经持续将近两个月了,每天都有增长的数字,好在现在增长率有了下降的趋势。
依然无法出门,多想旅游,春暖花开,呼吸新鲜空气。

碎语

远程办公两周了。昨天和台湾同事远程开会说到下周回去办公室上班,同事讲让我小心点,他不太放心我们的Dang。
一时间很难受,很想反驳又不知道怎么说。只好说了一句,还好还好。
这次疫情国家做了很大的努力,大家也做了很多的牺牲,但依然能看到个中不少的问题。
外边可能已经把我们国家黑成Xiang了,可是又能怎么办呢?话语权掌握在别人手里。
努力,过好自己就好

今天是20200202,难得的日期对称日,有必要记上一篇。

四川省最后还是刚起,仅仅发了一个不痛不痒的通知说企业可自行安排复工时间,成为遵守国务院命令2月3日准时上班的唯一一个省份。

全国开复工时间表

看着最新的疫情地图,加上查到的1600多万的成都人口,心理慌得不要不要的。料医学博士的省长也没办法抑制得了新病毒的传播,希望成都不要学武汉的各种神操作。幸好公司人性化,允许在家办公。

Read more »

人类自以为是世界的主宰,实则不然。2020新年伊始,新冠状病毒从武汉开始蔓延。

强大的传染力,加上春节的人口流动速率,病毒感染的人口可能远非官方所报道那么多。

想起2013年的SARS,我高三,生活在小县城也能深切感受到这传染病的威力。
每天早读几个温度计班里传递量体温,诊所里板蓝根早早卖断货。
晚上自习新闻时间打开电视随时关心病情进展,看到又是几个全身防护的医务人员感染甚至病逝的消息。

Read more »

一直想入手一个智能手表,可惜Apple Watch需要连接苹果手机,遂未能如愿。最近小米终于发布一款智能手表,支持ESIM,使用Wear OS,果断入手。

实际使用发现Bug不少,软件不多。Bug可以等系统更新来解决。不过软件不多是生态链的问题,等生态链慢慢建起来实在太慢。Wear OS是Android的一个分支,理论上应该支持安装安卓应用才对。翻了下小米手表的设置,也是有看到可以做ADB调试,因此理应可以用ADB安装Android应用。

Read more »

本文介绍和Zephyr线程的数据结构,及相应的API。

数据结构

Zephyr数据结构使用k_thread定义,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
struct k_thread {
struct _thread_base base;
struct _callee_saved callee_saved;
void *init_data;
void (*fn_abort)(void);

#if defined(CONFIG_THREAD_MONITOR)
struct __thread_entry entry;
struct k_thread *next_thread;
#endif
#if defined(CONFIG_THREAD_NAME)
char name[CONFIG_THREAD_MAX_NAME_LEN];
#endif
#ifdef CONFIG_THREAD_CUSTOM_DATA
void *custom_data;
#endif
#ifdef CONFIG_THREAD_USERSPACE_LOCAL_DATA
struct _thread_userspace_local_data *userspace_local_data;
#endif
#ifdef CONFIG_ERRNO
#ifndef CONFIG_USERSPACE
int errno_var;
#endif
#endif

#if defined(CONFIG_THREAD_STACK_INFO)
struct _thread_stack_info stack_info;
#endif /* CONFIG_THREAD_STACK_INFO */
#if defined(CONFIG_USERSPACE)
struct _mem_domain_info mem_domain_info;
k_thread_stack_t *stack_obj;
#endif /* CONFIG_USERSPACE */
#if defined(CONFIG_USE_SWITCH)
int swap_retval;
void *switch_handle;
#endif
struct k_mem_pool *resource_pool;
struct _thread_arch arch;
};
Read more »

前言

一直想写一些RTOS的技术资料,算作对自己之前一些相关技术调研的总结。无奈懒癌发作,一拖再拖。然今日灌上鸡血,笃定主意,从最基本的调度相关内容开始。

简单讲,Zephyr是一个开源实时操作系统。相较Linux,其对系统资源的使用量更小,当然也牺牲了许多复杂且完善的功能(如,系统Debug易用性,线程的堆栈保护)。与此同时,因其是开源社区开发,也多少继承和保留了许多Linux系统的优秀思想和功能(例如,Workqueue、设备树等)。其定位为万物互联时代各种各样的嵌入式设备,目光长远。

Read more »