女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

u-boot對系統(tǒng)寄存器進(jìn)行初始化代碼

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:內(nèi)核新視界 ? 2023-12-07 11:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在完成地址無關(guān)fixup后,u-boot開始對一些系統(tǒng)寄存器進(jìn)行初始化。

第一段代碼如下:

pie_fixup_done:
#endif

#ifdef CONFIG_SYS_RESET_SCTRL
    bl reset_sctrl --------------------------------------------------------------------- (1)
#endif

#if defined(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD) ---------- (2)
.macro set_vbar, regname, reg
    msr regname, reg
.endm
    adr x0, vectors
#else
.macro set_vbar, regname, reg
.endm
#endif
    /*
     * Could be EL3/EL2/EL1, Initial State:
     * Little Endian, MMU Disabled, i/dCache Disabled
     */
    switch_el x1, 3f, 2f, 1f ---------------------------------------------------------- (3)
3: set_vbar vbar_el3, x0
    mrs x0, scr_el3
    orr x0, x0, #0xf   /* SCR_EL3.NS|IRQ|FIQ|EA */
    msr scr_el3, x0
    msr cptr_el3, xzr   /* Enable FP/SIMD */
    b 0f
2: mrs x1, hcr_el2
    tbnz x1, #34, 1f   /* HCR_EL2.E2H */
    set_vbar vbar_el2, x0
    mov x0, #0x33ff
    msr cptr_el2, x0   /* Enable FP/SIMD */
    b 0f
1: set_vbar vbar_el1, x0
    mov x0, #3 < < 20
    msr cpacr_el1, x0   /* Enable FP/SIMD */
0:

#ifdef COUNTER_FREQUENCY -------------------------------------------------------------- (4)
    branch_if_not_highest_el x0, 4f
    ldr x0, =COUNTER_FREQUENCY
    msr cntfrq_el0, x0   /* Initialize CNTFRQ */
#endif

4: isb ------------------------------------------------------------------------------- (5)

...
...
#ifdef CONFIG_SYS_RESET_SCTRL
reset_sctrl:
    switch_el x1, 3f, 2f, 1f
3:
    mrs x0, sctlr_el3
    b 0f
2:
    mrs x0, sctlr_el2
    b 0f
1:
    mrs x0, sctlr_el1

0:
    ldr x1, =0xfdfffffa
    and x0, x0, x1

    switch_el x1, 6f, 5f, 4f
6:
    msr sctlr_el3, x0
    b 7f
5:
    msr sctlr_el2, x0
    b 7f
4:
    msr sctlr_el1, x0

7:
    dsb sy
    isb
    b __asm_invalidate_tlb_all ----------------------------------------------------- (6)
    ret
#endif
  • ? (1)一般情況下此功能不需要使用,但是一些由其他固件引導(dǎo)啟動的u-boot,board希望系統(tǒng)行為能按照自己預(yù)期行為執(zhí)行而不受上一級加載器的影響,所以使用CONFIG_SYS_RESET_SCTRL來決定是否重置系統(tǒng)控制寄存器,包括保證處理器處于小端,關(guān)閉data cache,關(guān)閉mmu。 其中switch_el是一個宏,用于讀取當(dāng)前所處的異常級別,根據(jù)所處異常級別調(diào)用對應(yīng)的系統(tǒng)控制寄存器。某些時候u-boot的加載并不是一定在el3級別,當(dāng)存在atf等時,el3由atf控制,atf會將u-boot的運(yùn)行級別切換到el2,以便保證自己的控制級別,所以u-boot通過switch_el來選擇自己能夠控制的系統(tǒng)寄存器。
  • ? (2)定義設(shè)置異常向量表的宏,將異常向量表的地址寫入/reg設(shè)置的系統(tǒng)寄存器即可完成異常向量表的設(shè)置,這里u-boot是需要設(shè)置異常向量表的,而spl默認(rèn)是不需要設(shè)置異常向量表的,畢竟spl只是一個加載器只會運(yùn)行一次,不過當(dāng)定義了CONFIG_ARMV8_SPL_EXCEPTION_VECTORS時可以為spl也設(shè)置一個異常向量表。
  • ? (3)同樣的使用switch_el來跳轉(zhuǎn)到對應(yīng)級別的路徑上去執(zhí)行,在進(jìn)行系統(tǒng)寄存器設(shè)置時,因為在這之前已經(jīng)由SYS_RESET_SCTRL或者board自己保證處理器處于小端,mmu關(guān),i-cache和d-cache處于關(guān)閉狀態(tài)了,所以這里直接進(jìn)行對應(yīng)級別系統(tǒng)寄存器設(shè)置,首先是跳轉(zhuǎn)到對應(yīng)表設(shè)置對應(yīng)級別的異常向量表。接著會有如下三種情況: 當(dāng)處于EL3時,會設(shè)置安全配置系統(tǒng)寄存器(scr_el3),會將低四位bit設(shè)置為0xf,表示設(shè)置處理器處于非安全模式,任何級別的物理irq中斷,物理fiq,異常abort中斷,異常SError中斷都將被路由到el3級別。后續(xù)這些設(shè)置將在啟動Linux時被修改,這些設(shè)置僅用于在u-boot階段。接著將cptr_el3清零,使用xzr是可以快速操作寄存器為零。這里保證任何級別下訪問SIMD和floating-point指令不會導(dǎo)致觸發(fā)異常陷入el3。 當(dāng)處于EL2時,首先根據(jù)HCR_EL2.E2H判斷系統(tǒng)是一個虛擬機(jī)管理器還是主機(jī)系統(tǒng),當(dāng)E2H = 0時,表示系統(tǒng)處于主機(jī)系統(tǒng)只需要做el3一樣的操作配置SIMD和FP指令不會陷入el2即可。 當(dāng)系統(tǒng)處于EL1時,則什么也不需要操作只需要配置SIMD和FP指令不會陷入el1。
  • ? (4)u-boot在啟動時系統(tǒng)的時鐘頻率不一定配置了,所以當(dāng)在include/configs/xxxxxx.h中定義了COUNTER_FREQUENCY的頻率值時,說明需要在此處配置系統(tǒng)時鐘,所以根據(jù)宏 branch_if_not_highest_el判斷當(dāng)系統(tǒng)不處于EL3時則需要設(shè)置系統(tǒng)的時鐘工作頻率cntfrq_el0,后續(xù)Linux或者u-boot根據(jù)讀出的這個值計算出系統(tǒng)每納秒的滴答數(shù)從而供軟件獲取時間流逝值。
  • ? (5)isb指令用于確保上述操作指令被正確真正的執(zhí)行了,屬于同步指令的一種。
  • ? (6)在進(jìn)行系統(tǒng)控制器復(fù)位時,dsb sy,isb,__asm_invalidate_tlb_all三個操作在這里的意義是,因為對處理器的小端,mmu,d-cache進(jìn)行了復(fù)位,所以這里必須通過dsb和isb確保數(shù)據(jù)和指令全部執(zhí)行和寫入,這里進(jìn)行了mmu和cache關(guān)閉操作,那么如果有緩存的tlb在這個時候這些緩存的tlb數(shù)據(jù)就是無效的,這里對可能緩存的tlb進(jìn)行全部無效化,確保后續(xù)任何可能的mmu開啟操作不會使用到這些無用的tlb條目而導(dǎo)致系統(tǒng)異常。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9341

    瀏覽量

    376298
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5432

    瀏覽量

    124000
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    128

    瀏覽量

    29000
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1031

    瀏覽量

    21772
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    U-Boot介紹

    在移植 Linux之前我們需要先移植一個 bootloader 代碼,這個 bootloader 代碼用于啟動 Linux 內(nèi)核, bootloader有很多,常用的就是 U-Boot
    的頭像 發(fā)表于 10-08 10:50 ?4753次閱讀

    U-boot的基本介紹

    從本文開始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)硬件開發(fā)平臺為ARM,操作
    發(fā)表于 07-14 16:52 ?3559次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    基于開發(fā)板的U-Boot移植

    bootloader,也就是通用的bootloader。它存在于nandflash或者SD卡中,它是在開機(jī)上點(diǎn)之后,操作系統(tǒng)起來之前用來引導(dǎo)的一個程序。U-boot 的主要作用是進(jìn)行內(nèi)存的
    發(fā)表于 01-14 14:31

    U-boot環(huán)境變量初始化有哪些方式?

    此處介紹 U-boot 環(huán)境變量初始化的兩種方式 ,方式 1 與 方式 2 。
    發(fā)表于 09-16 10:36

    如何對PWM寄存器進(jìn)行初始化配置

    PWM的輸出原理是什么?PWM寄存器的配置步驟有哪些?如何對PWM寄存器進(jìn)行初始化配置?
    發(fā)表于 08-02 10:02

    U-BOOT的啟動流程分享

    Bootloader移植(下)U-BOOT 啟動流程u-boot啟動三個2啟動步驟(重點(diǎn))U-boot 啟動源碼分析U-BOOT 啟動流程u-boo
    發(fā)表于 01-18 10:17

    移位寄存器初始化

    Labview之移位寄存器初始化,很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:56 ?0次下載

    u-boot簡介

    U-Boot是BootLoader的一種,是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行。可以初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個
    發(fā)表于 10-14 11:17 ?3718次閱讀

    NAND閃存中啟動U-BOOT的設(shè)計解析

    U-BOOT 支持ARM、 PowerPC等多種架構(gòu)的處理,也支持Linux、NetBSD和VxWorks等多種操作系統(tǒng),主要用來開發(fā)嵌入式系統(tǒng)
    發(fā)表于 10-29 11:29 ?2次下載

    如何使用Xilinx SDK調(diào)試u-boot代碼

    了解如何使用Xilinx SDK調(diào)試u-boot代碼。 概述了技術(shù)以獲得重定位偏移量,以便可以在SDK中應(yīng)用它。
    的頭像 發(fā)表于 11-27 06:36 ?4509次閱讀

    U-Boot啟動內(nèi)核的工作過程詳細(xì)說明

    U-Boot 啟動內(nèi)核的過程可以分為兩個階段,兩個階段的功能如下:(1)第一階段的功能 硬件設(shè)備初始化 加載 U-Boot 第二階段代碼到 RAM 空間 設(shè)置好棧 跳轉(zhuǎn)到第二階段
    發(fā)表于 12-28 08:00 ?3次下載
    <b class='flag-5'>U-Boot</b>啟動內(nèi)核的工作過程詳細(xì)說明

    tiny4412編譯與移植U-Boot

    U-Boot 是一個主要用于嵌入式系統(tǒng)的引導(dǎo)加載程序, U-Boot本質(zhì)是一個裸機(jī)程序,是一種普遍用于嵌入式系統(tǒng)中的開源的Bootloader,作用是用來引導(dǎo)操作
    的頭像 發(fā)表于 08-31 08:59 ?2353次閱讀
    tiny4412編譯與移植<b class='flag-5'>U-Boot</b>

    初始化相關(guān)的重要寄存器介紹

    在上例中,介紹了配置OV5640所需的SCCB時序,以及具體的實現(xiàn)。本例將介紹與初始化相關(guān)的重要寄存器,以及上電時序。
    的頭像 發(fā)表于 10-18 09:18 ?2176次閱讀

    MSP430F5529硬件IIC驅(qū)動OLED(初始化使用的寄存器)

    MSP430F5529硬件IIC驅(qū)動OLED(初始化使用的寄存器)
    發(fā)表于 11-24 16:36 ?1次下載

    u-boot在匯編啟動階段的相關(guān)操作介紹

    u-boot在匯編啟動階段對系統(tǒng)的一些初始化 當(dāng)cpu交由u-boot接管進(jìn)入u-boot后, 首先會到_start符號處開始執(zhí)行
    的頭像 發(fā)表于 12-07 11:22 ?925次閱讀
    主站蜘蛛池模板: 泰州市| 浦县| 阜平县| 兴国县| 昆山市| 简阳市| 色达县| 南和县| 富阳市| 海盐县| 蓬莱市| 中方县| 新宁县| 祁连县| 社会| 甘肃省| 尖扎县| 富宁县| 花莲县| 孟连| 尼勒克县| 曲沃县| 满洲里市| 兴城市| 连云港市| 涞源县| 金川县| 都昌县| 普兰店市| 浮梁县| 观塘区| 博白县| 盘山县| 个旧市| 永泰县| 通渭县| 北碚区| 青岛市| 孟连| 长垣县| 衡水市|