国产毛片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://m.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ù) 返回頂部 返回列表
主站蜘蛛池模板: 免费观看特赦1959完整版 | 色一伦一情一区二区三区 | 精品国产一区二区三区成人 | 日韩高清影院 | 国产高清国内精品福利色噜噜 | 日韩在线观看精品 | 精品欧美小视频在线观看 | 成人麻豆视频 | 欧美日一本 | 亚洲一区二区免费在线观看 | 青青草手机视频在线观看 | 国产一级免费 | 欧美中文在线观看 | 欧美亚洲另类视频 | 五月网| 男女免费观看视频 | 四虎国产精品永久一区 | 色综合久久天天综合绕观看 | 特级毛片在线观看 | 亚洲免费视频在线观看 | 成人深夜福利在线播放不卡 | 亚洲免费观看 | 韩国一级特黄清高免费大片 | 成人一级大片 | 黄色成人在线网站 | 日韩在线看免费高清完整版 | 成人午夜性a一级毛片美女 成人午夜小视频手机在线看 | 一区二区三区欧美 | 久久精品视频91 | 日韩欧美高清 | 国产欧美日韩在线观看精品 | 精品国产高清不卡毛片 | 亚洲天堂精品在线 | 第四色网页 | 日本精品中文字幕 | 亚洲特级毛片 | 欧美一区二区三区四区在线观看 | 国产精品第十页 | 日韩精品国产自在欧美 | 91精品最新国内在线播放 | 国产精品无 |