簡體   English   中英

U-boot可在單獨的核心上加載兩個映像

[英]U-boot to load two images on separate cores

我有恩智浦/自由規模的Imx6 saber lite開發板。 我的任務是以這樣的方式刷新兩個OS內核(Linux和RTOS),以便linux在core0上運行,而在core1上運行RTOS。 我有1GB DDR3,我必須先為RTOS分配128MB,然后為LINUX映像分配。

  1. 在這種情況下如何配置U-boot?
  2. core-0應該在> 128MB DDR3區域加載Linux內核,同時core1處於空閑狀態。
  3. core-0應該加載RTOS並將控制轉移到core-1。

如何使用u-boot實現這種情況?

如果有人解決了這個問題,請告訴我!

提前致謝!

嗯,這是可能的,但我不認為uboot允許這有一些例外。 一些供應商提供修改后的uboot二進制文件及其支持此類功能的主板。 例如,Xilinx為ZCU102提供了u-boot,允許從同一SOC中存在的cortex-a53核心加載和提取皮質-R核心。

其中一個着名的開源框架OpenAMP可以完成這項工作。 它允許遠程的生命周期管理,並在不同核心上運行的多個OS之間建立通信。 但據我記得,目前不支持saber-lite。

在您的情況下很重要:在您的情況下,您只需按照以下步驟完成工作即可。

步驟1:確保提供給RTOS的內存不可訪問Linux。 為此,您需要修改dts文件,確切地說是內存節點。

步驟2:從要從RTOS訪問的dts中刪除設備。 不要刪除重要的像GIC。 即使知道,RTOS也會與linux共享它。 這是我知道在無人監督的環境中使用GIC的唯一方法。 這也回答了@AndrejsCainikovs在評論中提出的問題。

第3步:修改dts的bootargs。 在dts的bootargs中添加nosmp標志。

步驟4:構建dts並將已放置的dts替換為SD卡的啟動分區。

Step5:在你的GIC代碼中注釋我們的reset和init代碼。 讓GIC處於它所處的狀態。啟用cpu接口和將要使用的外圍中斷,並僅將它們的CPU親和性設置為RTOS內核。 現在修改鏈接器文件,構建並鏈接剛從linux內存區域中刪除的內存區域的RTOS代碼。

步驟6:將RTOS二進制文件復制到SD卡的啟動分區。

步驟7:運行電路板並在自動啟動時停止u-boot。 運行以下命令以在內存中加載RTOS映像。

    fatload mmc 0:1 0x10000000 rtos.bin;

顯然,您需要根據RTOS地址更改加載地址,並且可能是mmc分區號。

Step8:使用boot命令運行linux內核,在linux內核中你需要使用一些寄存器。 我會選擇通過編寫內核驅動程序並使用ioremap映射這些寄存器並訪問它們來實現。 但是你如何做到這一點,我在這里解釋需要做些什么。

將核心1的SRC_GPR3寄存器中的RTOS起始地址寫入核心2的SRC_GPR5或核心3的SRC_GPR7中寫入RTOS起始地址。

現在使用SRC_SCR寄存器分別為core1 core2和core3的第22和第23位啟用內核,這是您打算運行RTOS的。 請注意,無法禁用或啟用core0。

現在,使用SRC_SCR寄存器的core1 core1 core2和core3的第13個第14位和第16位將內核從復位中移出。 您的RTOS將開始運行。

這種整體配置正式稱為無監督系統,與運行管理程序進行嚴格資源分區的監督系統相反。 這里每個操作系統都謹慎運行,以免觸及分配給其他操作系統的任何資源。

您可以在i.MX 6Dual / 6Quad Applications處理器參考手冊中找到這些寄存器的存儲器地址。 文件編號:IMX6DQRM

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM