国产毛片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://m.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ù) 返回頂部 返回列表
主站蜘蛛池模板: 毛片a区| 亚州三级视频 | 亚洲毛片一级带毛片基地 | 欧美不卡在线 | 伊人五月在线 | 亚洲精品第一综合99久久 | 成人手机在线观看 | 深爱激情婷婷 | 欧美成人交tv免费观看 | 91免费资源网站入口 | 国产高清自拍视频 | 欧美日韩国产一区二区三区欧 | 亚洲免费不卡 | 国产理论自拍 | 国产黄mmd在线观看免费 | 国产精品日本不卡一区二区 | 在线观看中文字幕国产 | 91手机在线视频观看 | 日韩在线看片中文字幕不卡 | 殴美aⅴ| 国自产在线精品免费 | 国产精品一区三区 | 嫩草影院在线观看网站成人 | 国产午夜精品不卡观看 | 国产999视频| 亚洲欧美日韩三级 | 一级毛片在线 | 国产精品成人久久久久久久 | 日韩在线看免费高清完整版 | 特级片网站 | 日本人的色道免费网站 | 久久国产精品99久久久久久牛牛 | 一级做a爱片特黄在线观看 一级做a爱片就在线看 | 亚洲视频在线免费播放 | 一级片免费看 | 日本欧美一区二区三区片 | 朋友的母亲hd中字在线观看 | 国产午夜视频在线观看第四页 | 青青国产成人久久激情911 | 亚洲天堂精品在线 | 国产视频精品视频 |