最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

簡(jiǎn)單講解Linux PSCI框架

2022-12-09 15:22 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

說明:

  1. Kernel版本:4.14

  2. ARM64處理器

  3. 使用工具:Source Insight 3.5, Visio

1. 介紹

PSCI, Power State Coordination Interface,由ARM定義的電源管理接口規(guī)范,通常由Firmware來(lái)實(shí)現(xiàn),而Linux系統(tǒng)可以通過smc/hvc指令來(lái)進(jìn)入不同的Exception Level,進(jìn)而調(diào)用對(duì)應(yīng)的實(shí)現(xiàn)。

那問題來(lái)了?為什么要把這個(gè)放到Firmware中去實(shí)現(xiàn)呢?原因是ARMv8架構(gòu),引入了Virtualization,Security等概念,CPU boot、shutdown、suspend/resumen等操作不再如傳統(tǒng)那樣單純了。我們不再是我們,我們依然是我們。

2. 分析

代碼路徑:arch/arm64/kernel/psci.c drivers/firmware/psci.c

2.1 總體框架

Linux對(duì)CPU core的操作抽象出了結(jié)構(gòu)struct cpu_operations,開放給上層軟件調(diào)用,struct cpu_operations統(tǒng)一對(duì)底層的CPU及power等資源進(jìn)行統(tǒng)一操作,完美。今天我們的故事就從struct cpu_operations開始。

話不多說,直接上圖分析

圖片
  • CPU Operation有兩種方式:spin-tablepsci,這個(gè)由Device Tree來(lái)指定,顯然我們今天說的是psci,以cpu_psci_ops為核心;

  • cpu_psci_ops中的函數(shù)指針在arch/arm64/kernel/psci.c中進(jìn)行賦值,而實(shí)際的實(shí)現(xiàn)中去調(diào)用了psci_ops中的實(shí)現(xiàn);

  • psci_ops中會(huì)根據(jù)實(shí)際的Function ID找到對(duì)應(yīng)的函數(shù),從而通過hvc/smc指令調(diào)用Firmware接口;說一個(gè)實(shí)際的用例吧:比如你現(xiàn)在需要把系統(tǒng)Suspend,在用戶輸入echo mem > /sys/power/state時(shí),最終會(huì)調(diào)用到cpu_suspend函數(shù),由上圖可知,最終也能調(diào)用到底層的Firmware,當(dāng)然,前提是Firmware中已經(jīng)實(shí)現(xiàn)了該接口。

所以,現(xiàn)在看起來(lái)PSCI其實(shí)就是去實(shí)現(xiàn)調(diào)用底層Firmware的接口,并且填充到對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)中就行了。

目前在內(nèi)核中有三個(gè)版本的PSCI,分別是:PSCI V0.1/, PSCI V0.2/, PSCI V1.0,對(duì)應(yīng)的psci_of_match[]一目了然:


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?

2.1 PSCI v0.1分析

下邊分析下PSCI v0.1吧

我們從哪里來(lái)?要到哪里去?老規(guī)矩,直接上圖

圖片
  • setup_arch開始跟蹤,能看到入口為psci_dt_init(),從而跳轉(zhuǎn)到driver/firmware/psci.c中的函數(shù)中;

  • psci_dt_init()會(huì)去讀取并解析Device Tree中的內(nèi)容,從而選擇版本(psci_0_1_init/psci_0_2_init),選擇指令(hvc/smc)等;

  • psci_0_1_init()函數(shù)完成的主要內(nèi)容其實(shí)是填充對(duì)應(yīng)的函數(shù)指針,以及psci_function_id[]數(shù)組;

那么如何從Device Tree到實(shí)際的解析和配置中來(lái)的呢?下面以arch/arm/boot/dts/xenvm-4.2.dts為例:

  • 設(shè)備樹是這樣子的

圖片

解析的框架是這樣子的

圖片

2.2 PSCI v0.2及以上與PSCI v0.1的區(qū)別

  • 代碼區(qū)別:PSCI v0.2支持 CPU Suspend,CPU Migrate等操作,也就是功能更全,顯然我說的這個(gè)是廢話,代碼說明一切;

  • DeviceTree的區(qū)別:


原文作者:LoyenWang



簡(jiǎn)單講解Linux PSCI框架的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
潮安县| 邛崃市| 抚顺县| 玛多县| 西藏| 武冈市| 巨鹿县| 鹤庆县| 洛浦县| 永济市| 遂川县| 游戏| 浠水县| 黎城县| 调兵山市| 元谋县| 龙川县| 辽阳市| 济源市| 剑川县| 宁晋县| 乌鲁木齐县| 乌拉特中旗| 股票| 交城县| 开鲁县| 板桥市| 五原县| 漠河县| 文成县| 桃园市| 肇庆市| 洛阳市| 淮滨县| 江城| 金塔县| 浦江县| 景东| 崇文区| 田林县| 龙泉市|