日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析

發布時間:2025/5/22 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RTEMS 4.9.4

?

?

進入 boot_card 函數即開始全面的初始化。
boot_card函數是~RTEMS~提供的一個通用初始化框架,不論在何種處理器上,都是使用這個框架為系統做初始化的工作。
它最大程度上復用了代碼,也保證了所有的初始化動作盡可能用~C~語言撰寫。它完成的工作按順序羅列如下:

  • 初始化執行環境,主要是關閉中斷并處理~boot_card~函數的參數;
  • 如果定義宏~BSP_BOOTCARD_HANDLES_RAM_ALLOCATION,則申請工作空間的內存,否則不執行此段代碼;
  • 調用~bsp_start~函數;
  • 調用rtems_initialize_data_structures~函數初始化~RTEMS~內核中的數據結構;
  • 如果定義宏~BSP_BOOTCARD_HANDLES_RAM_ALLOCATION,則完成動態內存、文件系統和庫代碼重入的初始化;
  • 調用~bsp_pretasking_hook~函數。在早期的~RTEMS BSP~中,這個函數可以初始化~C~語言庫,使得設備驅動可以使用~malloc~函數申請內存。現在使用通用初始化框架后,這個函數主要完成~C~運行庫中的堆的初始化、文件系統的初始化和~newlib~庫重入初始化;
  • 如果定義宏~RTEMS_DEBUG,則調用~rtems_debug_enable~函數打開所有~RTEMS~支持的動態調試特性;
  • 調用~rtems_initialize_before_drivers~函數完成一些需要在設備初始化之前完成的初始化動作;
  • 調用~bsp_predriver_hook~函數初始化一些需要先于一般驅動初始化之前的驅動,如總線、空中斷服務程序等;
  • 調用~rtems_initialize_device_drivers~函數初始化所有驅動;
  • 調用~bsp_postdriver_hook~函數打開控制臺文件~stdin、stdout、stderr;
  • 調用~rtems_initialize_start_multitasking~函數啟動多任務,C++~的構造函數在進入第一個任務時被調用,
  • 當用戶調用~rtems_shutdown_executive~函數后,該函數才會返回;
  • 調用~bsp_cleanup~函數執行~BSP~的關閉動作;
  • 函數返回調用處,返回值為~0。


  • 步驟~1~首先關閉中斷。這個操作與處理器高度相關,系統會在切換第一個任務上下文到處理器上時打開中斷。
    接著處理~boot_card~函數的參數。通常,引導程序會將參數傳遞到操作系統中,用以指定與硬件環境相關的參數或其他信息。
    通用的初始化框架只是從這個參數中獲取應用程序的名稱,如果失敗,則指定一個默認的名稱。
    注意:CSB337~的啟動代碼并沒有處理引導程序傳遞給操作系統的參數,更沒有顯式地傳遞參數到~boot_card~中。

    步驟~2~需要定義宏~BSP_BOOTCARD_HANDLES_RAM_ALLOCATION~才能執行。
    但在~rtems_initialize_data_structures~函數中,已完成了對應的工作,為內核的工作空間申請內存并初始化。
    所以沒有必要定義這個宏去執行步驟~2。

    步驟~3~是調用~bsp_start~函數,這個函數主要完成一些與硬件高度相關的初始化操作。
    比如說初始化鎖相環~(Phase-Locked Loop,PLL)、實時時鐘、獲取內存空閑空間起始位置與尺寸等。
    衡量是否將初始化放在這里可參考以下幾個條件:

  • 初始化動作與硬件相關并且不適合作為設備驅動,如處理器的鎖相環初始化;
  • 操作系統初始化內核數據所依賴的初始化操作,如獲取內存空閑空間的起始位置以及尺寸、當前的真實時間等;
  • 給硬件一個初始狀態,防止單板或處理器發生狀態錯誤,直到操作系統初始化相應的設備驅動,能正確的控制硬件設備。如初始化控制一些外部設備的~IO~口,防止默認電平引起外部設備的誤動作;
  • 初始化一些處理器中存在但是整個應用程序中都不會使用的設備,如初始化硬件看門狗。


  • 步驟~4~初始化內核的數據結構,此步驟所做的操作將在后續章節中討論。初始化內核數據結構之后,即可使用~RTEMS~的非阻塞函數。
    因為多任務還沒有開始,當前任務被阻塞后,沒有一個處于就緒態的任務運行。
    使用阻塞調用,只能產生一個嚴重的錯誤。

    步驟~5,由于沒有定義宏~BSP_BOOTCARD_HANDLES_RAM_ALLOCATION,這一步驟是不執行的。
    步驟~6~與步驟~5~完成的工作是相同的,所以也沒有必要定義這個宏。

    步驟~7,如果配置時啟用了~RTEMS~的調試功能,即~configure~時指定~--enable-rtems-debug~參數,則打開所有~RTEMS~支持的動態調試特性。
    否則,生成的~RTEMS BSP~包不包含調試代碼。

    步驟~8~至~11~都是完成與驅動相關的操作,直至步驟~12~系統啟動多任務,多任務啟動成功即標志著操作系統初始化完畢。
    如果在多任務中調用~rtems_shutdown_executive~函數或~POSIX~標準下的~exit~函數,都會使~RTEMS~從多任務返回。

    步驟~13,執行一些關閉~RTEMS BSP~的動作。通常該函數可以什么都不做。

    步驟~14,返回~0~給調用程序,此返回值無任何意義。

    轉載于:https://blog.51cto.com/coolbacon/1280023

    總結

    以上是生活随笔為你收集整理的RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。