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

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

發(fā)布時(shí)間: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ù)的最后可以看到。

       建立好一級頁表后,這時(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)號(hà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,機(jī)器類型和atag指針到內(nèi)存的相應(yīng)位置(因?yàn)榻酉聛砑纫絚語言環(huán)境執(zhí)行了,必須要把之前有意義的寄存器加以保存);跳轉(zhuǎn)到start_kernel()函數(shù),進(jìn)入操作系統(tǒng)環(huán)境。
本文地址:http://www.qingdxww.cn/thread-88594-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區(qū)
  • 更佳設(shè)計(jì)的解決方案——Microchip模擬開發(fā)生態(tài)系統(tǒng)
  • 你仿真過嗎?使用免費(fèi)的MPLAB Mindi模擬仿真器降低設(shè)計(jì)風(fēng)險(xiǎn)
  • 深度體驗(yàn)Microchip自動(dòng)輔助駕駛應(yīng)用方案——2025巡展開啟報(bào)名!
  • 我們是Microchip
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本不卡新2区 | 亚洲一级黄色片 | 成人 在线欧美亚洲 | 天天操综| 久久综合结合久久很很很97色 | 凹凸世界第4季完整免费 | 欧美影音| 国产在线精品一区二区中文 | 亚洲女人国产香蕉久久精品 | 欧美国产成人一区二区三区 | 亚欧成人在线 | 国产91短视频 | 日韩 在线视频精品 | 亚洲欧美日韩中文字幕在线 | 在线亚洲成人 | 黑人激情 | 黄色网站手机在线观看 | 成年男人的天堂 | 亚洲国产精品久久精品成人 | 日韩一区二区超清视频 | 青青草伊人网 | 精品欧美一区二区vr在线观看 | 天天摸日日舔 | 榴莲草莓向日葵黄瓜丝瓜污 | 青草视频免费观看在线观看 | 精品国产欧美一区二区最新 | 欧美日韩视频在线成人 | 五月婷婷六月丁香 | 99视频久久 | 亚洲爱爱视频 | 我们不能是朋友电视剧免费观看 | 色猪网站| 老司机aⅴ在线精品导航 | 精品播放 | 午夜羞羞视频在线观看 | 精品在线99 | 韩国免费高清一级毛片性色 | 香蕉国产成版人视频在线观看 | 欧美一区1区三区3区公司 | 四虎亚洲国产成人久久精品 | 神兵小将第一季免费观看完整版 |