国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
阿坝| 古丈县| 盐山县| 汶上县| 保山市| 凯里市| 正阳县| 林甸县| 长顺县| 甘肃省| 界首市| 辽阳县| 祁门县| 临猗县| 建平县| 辽宁省| 曲沃县| 吴江市| 景宁| 黄冈市| 巨鹿县| 怀仁县| 清河县| 新源县| 上饶市| 天气| 察隅县| 休宁县| 莲花县| 个旧市| 安国市| 武安市| 昭通市| 万荣县| 壶关县| 临汾市| 潼关县| 宁夏| 丽江市| 朝阳区| 临湘市|