內(nèi)核中的psci架構(gòu)
內(nèi)核psci軟件架構(gòu)包含psci驅(qū)動和每個cpu的cpu_ops回調(diào)函數(shù)實現(xiàn)兩部分。
其中psci驅(qū)動實現(xiàn)了驅(qū)動初始化和psci相關(guān)接口實現(xiàn)功能,而cpu_ops回調(diào)函數(shù)最終也會調(diào)用psci驅(qū)動的接口。
psci驅(qū)動
首先我們看一下devicetree中的配置:
psci {
compatible = "arm,psci-0.2"; (1)
method = "smc"; (2)
}
(1)用于指定psci版本
(2)根據(jù)該psci由bl31處理還是hypervisor處理,可以指定其對應(yīng)的陷入方式。若由bl31處理為smc,若由hypervisor處理則為hvc
驅(qū)動流程主要是與bl31通信,以確認(rèn)其是否支持給定的psci版本,以及相關(guān)psci操作函數(shù)的實現(xiàn),其流程如下:
其主要工作即為psci設(shè)置相關(guān)的回調(diào)函數(shù),該函數(shù)定義如下:
static void __init psci_0_2_set_functions(void)
{
…
psci_ops = (struct psci_operations){
.get_version = psci_0_2_get_version,
.cpu_suspend = psci_0_2_cpu_suspend,
.cpu_off = psci_0_2_cpu_off,
.cpu_on = psci_0_2_cpu_on,
.migrate = psci_0_2_migrate,
.affinity_info = psci_affinity_info,
.migrate_info_type = psci_migrate_info_type,
}; (1)
register_restart_handler(&psci_sys_reset_nb); (2)
pm_power_off = psci_sys_poweroff; (3)
}
(1)為psci_ops設(shè)置相應(yīng)的回調(diào)函數(shù)
(2)為psci模塊設(shè)置系統(tǒng)重啟時的通知函數(shù)
(3)將系統(tǒng)的power_off函數(shù)指向相應(yīng)的psci接口
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1435瀏覽量
42464 -
cpu
+關(guān)注
關(guān)注
68文章
11213瀏覽量
222715 -
驅(qū)動
+關(guān)注
關(guān)注
12文章
1927瀏覽量
88166 -
SMP
+關(guān)注
關(guān)注
0文章
80瀏覽量
20677
發(fā)布評論請先 登錄
Linux內(nèi)核中container_of原理詳解
在Linux內(nèi)核中添加wifi驅(qū)動
ARM電源管理中的PSCI是什么意思呢
Android的Linux內(nèi)核與驅(qū)動程序開發(fā)教程
內(nèi)核驅(qū)動架構(gòu)圖及程序
linux內(nèi)核中的driver_register介紹
psci電源管理接口可以用于什么場景
psci接口規(guī)范介紹
內(nèi)核中的psci架構(gòu)cpu_ops接口
bl31中的psci架構(gòu)介紹
SMP多核啟動PSCI代碼示例
PSCI處理函數(shù)代碼分析
linux驅(qū)動程序如何加載進(jìn)內(nèi)核
linux內(nèi)核中通用HID觸摸驅(qū)動

內(nèi)核中的psci驅(qū)動是什么
評論