精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SMP多核啟動向內核傳遞參數信息

麥辣雞腿堡 ? 來源:TrustZone ? 作者:Hcoco ? 2023-12-05 15:32 ? 次閱讀

spin_table_cpu_release_addr的傳遞

由于在armv8架構下, uboot只能通過devicetree向內核傳遞參數信息 ,因此當其開啟了CONFIG_ARMV8_SPIN_TABLE配置選項后,就需要在適當的時候將該值寫入devicetree中。

我們知道uboot一般通過bootm命令啟動操作系統(aarch64支持的booti命令,其底層實現與bootm相同),因此在bootm中會執行一系列啟動前的準備工作,其中就包括將spin-table地寫入devicetree的工作。以下其執行流程圖:

圖片
spin_table_update_dt的代碼實現如下:

int spin_table_update_dt(void *fdt)
{
	…
	unsigned long rsv_addr = (unsigned long)&spin_table_reserve_begin;   
	unsigned long rsv_size = &spin_table_reserve_end -
						&spin_table_reserve_begin;                 (1)

	cpus_offset = fdt_path_offset(fdt, "/cpus");                                       (2if (cpus_offset < 0)
		return -ENODEV;

	for (offset = fdt_first_subnode(fdt, cpus_offset);                    
	     offset >= 0;
	     offset = fdt_next_subnode(fdt, offset)) {
		prop = fdt_getprop(fdt, offset, "device_type", NULL);
		if (!prop || strcmp(prop, "cpu"))
			continue;
		prop = fdt_getprop(fdt, offset, "enable-method", NULL);                    (3if (!prop || strcmp(prop, "spin-table"))
			return 0;
	}

	for (offset = fdt_first_subnode(fdt, cpus_offset);
	     offset >= 0;
	     offset = fdt_next_subnode(fdt, offset)) {
		prop = fdt_getprop(fdt, offset, "device_type", NULL);
		if (!prop || strcmp(prop, "cpu"))
			continue;

		ret = fdt_setprop_u64(fdt, offset, "cpu-release-addr",
				(unsigned long)&spin_table_cpu_release_addr);              (4if (ret)
			return -ENOSPC;
	}

	ret = fdt_add_mem_rsv(fdt, rsv_addr, rsv_size);                                    (5)
	…
}

(1)獲取其起始地址和長度

(2)從devicetree中獲取cpus節點

(3)遍歷該節點的所有cpu子節點,并校驗其enable-method是否為spin-table。若不是所有cpu的都該類型,則不設置

(4)若所有cpu的enable-method都為spin-table,則將該參數設置到cpu-release-addr屬性中

(5)由于這段地址有特殊用途,內核的內存管理系統不能將其分配給其它模塊。因此,需要將其添加到保留內存中

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1363

    瀏覽量

    40228
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10826

    瀏覽量

    211158
  • 多核
    +關注

    關注

    0

    文章

    43

    瀏覽量

    12323
  • SMP
    SMP
    +關注

    關注

    0

    文章

    71

    瀏覽量

    19631
收藏 人收藏

    評論

    相關推薦

    AliOS Things SMP系統及其在esp32上實現示例

    對應CPU的SMP功能:2.1 核啟動加載目前的啟動順序是,系統默認開始啟動0核,在0核的主任務入口內啟動其他核的加載,使其都進入任務調度,
    發表于 05-15 12:45

    典型的支持多核處理器的RTOS功能解析

    運行中更換或重新啟動幾乎所有的模塊,甚至是設備驅動程序。QNX對多核處理器的支持基于其微內核結構,通信被集成到QNX消息傳遞原語,本地的IPC和遠端節點間的IPC一樣。在單CPU上運行
    發表于 06-29 08:30

    ARM64 SMP多核啟動相關資料推薦(上)

    ddr某個地址,為內核傳遞參數之后,然后bootloader就完成了它的使命,跳轉到內核,就進入了操作系統內核的世界。4)linux
    發表于 06-06 17:05

    ARM64 SMP多核啟動相關資料推薦(下)

    psci。下面我們來揭開他神秘的面紗,其實理解了spin-table的啟動方式,psci并不難(說白了也是需要主處理器給從處理器一個啟動地址,然后從處理器從這個地址執行指令,實際上比這要復雜的多)。下面給出psci方式多核
    發表于 06-06 17:11

    Linux在SMP系統上的移植研究

    基于自主開發以雙核嵌入式CPU EM8301為處理核心的嵌入式應用的目的,針對雙核CPU芯片的系統結構和Linux內核的特性,通過研究嵌入式Linux操作系統在SMP系統上的移植,探討SMP架構
    發表于 11-14 16:09 ?11次下載
    Linux在<b class='flag-5'>SMP</b>系統上的移植研究

    Linux內核源碼分析--內核啟動命令行的傳遞過程

    內核啟動參數其實不僅僅包含在了cmdline中,cmdline不過是bootloader傳遞內核
    發表于 05-05 15:28 ?1677次閱讀

    用戶與內核空間數據交換的方式之一:內核啟動參數

    Linux 提供了一種通過 bootloader 向其傳輸啟動參數的功能,內核開發者可以通過這種方式來向內核傳輸數據,從而控制內核
    發表于 05-14 15:42 ?489次閱讀

    BootLoader與Linux內核參數傳遞

    。5. 參數傳遞的驗證和測試參數傳遞的結果可以通過內核啟動的打印
    發表于 04-02 14:31 ?356次閱讀

    BootLoader與Linux內核參數傳遞詳細資料說明

    在嵌入式系統中, Bootloader是用來初始化硬件,加載內核傳遞參數。因為嵌入式系統的硬件環境各不相同,所以嵌入式系統的 Bootloader也各不相同,其中比較通用的是U-Boot,它支持
    發表于 03-16 10:39 ?13次下載
    BootLoader與Linux<b class='flag-5'>內核</b>的<b class='flag-5'>參數</b><b class='flag-5'>傳遞</b>詳細資料說明

    如何解讀內核的oops

    96000045表示錯誤碼。后面[]內的數值是與頁面有關的oops信息被顯示的次數。之后顯示內核的重要特性SMP和PREEMPT被顯示的配置情況。這條信息所在的
    的頭像 發表于 10-21 12:39 ?1385次閱讀

    Linux內核模塊參數傳遞與sysfs文件系統

    Linux應用開發中,為使應用程序更加靈活地執行用戶的預期功能,我們有時候會通過命令行傳遞一些參數到main函數中,使得代碼邏輯可以依據參數執行不同的任務。同樣,Linux內核也提供了
    發表于 06-07 16:23 ?2079次閱讀

    ARM64 SMP多核啟動(下)—PSCI

    上面說了pin-table的多核啟動方式,看似很繁瑣,實際上并不復雜,無外乎主處理器喚醒從處理器到指定地址上去執行指令
    發表于 06-09 14:31 ?678次閱讀
    ARM64 <b class='flag-5'>SMP</b><b class='flag-5'>多核</b><b class='flag-5'>啟動</b>(下)—PSCI

    SMP是什么?多核芯片(SMP)的啟動方法

    SMP 英文為Symmetric Multi-Processing ,是對稱多處理結構的簡稱,是指在一個計算機上匯集了一組處理器(多CPU),各CPU之間共享內存子系統以及總線結構,一個服務器系統可以同時運行多個處理器,并共享內存和其他的主機資源。
    的頭像 發表于 07-26 09:26 ?1.8w次閱讀
    <b class='flag-5'>SMP</b>是什么?<b class='flag-5'>多核</b>芯片(<b class='flag-5'>SMP</b>)的<b class='flag-5'>啟動</b>方法

    SMP是什么 啟動方式介紹

    ,一個服務器系統可以同時運行多個處理器,并共享內存和其他的主機資源。 CMP 英文為Chip multiprocessors,指的是單芯片多處理器,也指多核心。其思想是將大規模并行處理器中的SMP集成到同一芯片內,各個處理器并行執行不同的進程。 (1)CPU數:獨立的中央
    的頭像 發表于 12-05 15:23 ?1744次閱讀

    SMP多核啟動cpu操作函數

    其中spin-table啟動方式的回調如下: const struct cpu_operations smp_spin_table_ops = {.name= "spin-table
    的頭像 發表于 12-05 16:04 ?710次閱讀
    <b class='flag-5'>SMP</b><b class='flag-5'>多核</b><b class='flag-5'>啟動</b>cpu操作函數