国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

linux內(nèi)核啟動解析(五)

發(fā)布時間:2012-4-1 09:59    發(fā)布者:李寬
關(guān)鍵詞: linux
freshtree

1.5 __enable_mmu()

       在建好一頁表之后,后面有幾句這樣的代碼:

       ldr   r13, __switch_data        @ address to jump to after

                                          @ mmu has been enabled

       adr   lr, __enable_mmu          @ return (PIC) address

       add  pc, r10, #PROCINFO_INITFUNC

       最后一句是跳轉(zhuǎn)到處理器初始化函數(shù)執(zhí)行。我們的處理器是armv6,所以處理器初始化函數(shù)可在arch/arm/mm/pro_v6.S中找到:

ENTRY(cpu_v6_proc_init)

       mov pc, lr

       OK,到這里就知道,目的就是跳轉(zhuǎn)到__enable_mmu()函數(shù)執(zhí)行。至于r13,另有他用,在__enable_mmu()函數(shù)的最后可以看到。

       建立好一級頁表后,這時我們就可以打開MMU,就可以放心大膽地使用虛擬地址了。使能MMU的代碼如下:

__enable_mmu:

#ifdef CONFIG_ALIGNMENT_TRAP

       orr   r0, r0, #CR_A

#else

       bic   r0, r0, #CR_A

#endif

#ifdef CONFIG_CPU_DCACHE_DISABLE

       bic   r0, r0, #CR_C

#endif

#ifdef CONFIG_CPU_BPREDICT_DISABLE

       bic   r0, r0, #CR_Z

#endif

#ifdef CONFIG_CPU_ICACHE_DISABLE

       bic   r0, r0, #CR_I

#endif

       mov r5, #(domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \

                    domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \

                    domain_val(DOMAIN_TABLE, DOMAIN_MANAGER) | \

                    domain_val(DOMAIN_IO, DOMAIN_CLIENT))

       mcr p15, 0, r5, c3, c0, 0             @ load domain access register

       mcr p15, 0, r4, c2, c0, 0             @ load page table pointer

       b     __turn_mmu_on

ENDPROC(__enable_mmu)



__turn_mmu_on:

       mov r0, r0

       mcr p15, 0, r0, c1, c0, 0             @ write control reg

       mrc p15, 0, r3, c0, c0, 0             @ read id reg

       mov r3, r3

       mov r3, r3

       mov pc, r13

ENDPROC(__turn_mmu_on)

      

       這段代碼很簡單,就是把一級頁表的基地址放到CP15的c2中,然后打開MMU。執(zhí)行到最后,把r13賦值給pc,就是跳轉(zhuǎn)到__swtich_data處執(zhí)行。
1.6 __mmap_switched()

       我們可以在arch/arm/kernel/head-common.S找到__switch_data的定義:

__switch_data:

       .long       __mmap_switched

       .long       __data_loc                    @ r4

       .long       __data_start                  @ r5

       .long       __bss_start                   @ r6

       .long       _end                            @ r7

       .long       processor_id                 @ r4

       .long       __machine_arch_type           @ r5

       .long       __atags_pointer                    @ r6

       .long       cr_alignment                 @ r7

       .long       init_thread_union + THREAD_START_SP @ sp



       可見標(biāo)號__switch_data的值就等同于__mmap_switched()函數(shù)的指針地址。__mmap_switch()函數(shù)定義如下:

__mmap_switched:

       adr   r3, __switch_data + 4



       ldmia       r3!, {r4, r5, r6, r7}

       cmp r4, r5                           @ Copy data segment if needed

1:     cmpne     r5, r6

       ldrne       fp, [r4], #4

       strne       fp, [r5], #4

       bne  1b



       mov fp, #0                           @ Clear BSS (and zero fp)

1:     cmp r6, r7

       strcc       fp, [r6],#4

       bcc  1b



       ldmia       r3, {r4, r5, r6, r7, sp}

       str   r9, [r4]                  @ Save processor ID

       str   r1, [r5]                  @ Save machine type

       str   r2, [r6]                  @ Save atags pointer

       bic   r4, r0, #CR_A               @ Clear 'A' bit

       stmia       r7, {r0, r4}                   @ Save control register values

       b     start_kernel

ENDPROC(__mmap_switched)

       這段代碼很簡單,就是拷貝數(shù)據(jù)到數(shù)據(jù)段;清BSS;然后保存處理器ID,機器類型和atag指針到內(nèi)存的相應(yīng)位置(因為接下來既要跳到c語言環(huán)境執(zhí)行了,必須要把之前有意義的寄存器加以保存);跳轉(zhuǎn)到start_kernel()函數(shù),進入操作系統(tǒng)環(huán)境。
本文地址:http://www.qingdxww.cn/thread-88594-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設(shè)計風(fēng)險
  • 深度體驗Microchip自動輔助駕駛應(yīng)用方案——2025巡展開啟報名!
  • 想要避免發(fā)生災(zāi)難,就用MPLAB SiC電源仿真器!
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成年人免费在线看惊悚片动作片 | 成人人观看的免费毛片 | 亚洲激情在线视频 | 日本在线高清版卡免v | 黄页网站免费在线观看 | 中文字幕日韩哦哦哦 | 欧美性极品黑人hd | 欧美精品无需播放器在线观看 | 青青青国产精品国产精品美女 | 一区二区三区亚洲视频 | 最新亚洲国产有精品 | 羞羞视频免费网站 | 97精品国产自在现线免费观看 | 九九精品视频在线播放 | 欧美性一级交视频 | 日韩精品久久久久久 | 在线观看亚洲免费视频 | 99精品全国免费7观看视频 | 久久久久久国产精品免费免 | 青青国产线免观看手机版精品 | 青青草华人在线视频 | 99久久一香蕉国产线看观看 | 最近高清免费观看日本 | 自拍偷自拍亚洲精品情侣 | 黄色免费在线视频 | h精品导航 | 91日韩精品天海翼在线观看 | 欧美日本一二三区 | 激情婷婷六月 | 久久天天躁夜夜躁狠狠躁2020 | 99热精品久久 | 国产高清精品毛片基地 | 久久亚洲国产高清 | 国产成人精品三级在线 | 夜夜夜操操操 | 日韩小视频在线播放 | 日韩欧美亚洲乱码中文字幕 | 蜜柚在线观看 | 欧美一区不卡二区不卡三区 | 曰韩免费视频 | 天堂网在线www资源在线 |