青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 60, 文章 - 0, 評論 - 197, 引用 - 0
數(shù)據(jù)加載中……

學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理

一、背景
   FS2410 開發(fā)板上的 ARM 核心為 ARM920T, ARM920T 代表著什么呢? 其實
ARM920T = ARM9 core + MMU + Cache,也就是說 ARM920T 為實現(xiàn)虛擬內(nèi)存管理提供了硬件
條件,這個硬件條件就是 MMU -- 內(nèi)存管理單元。前面的實驗我們程序里的地址都是直接對應(yīng)物理地
址,也就是說虛擬地址等同于物理地址,而今借助 MMU 我們可以實現(xiàn)虛擬內(nèi)存管理,程序里面的地址
不再被直接送到地址總線,而是先通過 MMU,由 MMU 來實現(xiàn)虛地址到物理地址的映射。這有什么意義
呢?想象有這么兩個程序,它們有相同的虛擬地址,但由于運行時其虛地址分別被映射到不同的物理地址
,所以它們各行其道、和平共處,而不會產(chǎn)生沖突...有了 MMU 的支持我們可以設(shè)計出高級的作業(yè)系統(tǒng)。


二、目的
   如何啟用 MMU, 并實現(xiàn)虛擬地址到物理地址映射正是這次實驗的目的。呵呵,你也許已經(jīng)迫不及待...
那現(xiàn)在我們就去探個究竟!


三、代碼分析
   程序的整個執(zhí)行流程都體現(xiàn)在 start.S 文件里(以前不是 head.s文件嗎? 呵呵,我把以前的代碼進(jìn)
行了重構(gòu),現(xiàn)在代碼看上去更清析--好的架構(gòu)是很重要的,更便于以后的擴充),start.S里調(diào)用的函數(shù)有的
是在 .c 文件實現(xiàn)的,必要時我會做相應(yīng)解釋。

1  .text
2  .global _start
3  _start:
4   b reset
5   NOP
6   NOP
7   NOP
8   NOP
9   NOP
10  ldr pc, handle_irq_addr
11  NOP
12  handle_irq_addr: 
13  .long handle_irq
14 reset:
15  ldr r0, =0x53000000  @ Close Watch-dog Timer
16  mov r1, #0x0
17  str r1, [r0]
18
19 @ init stack
20 ldr sp,=4096
21 
22 @ disable all interrupts
23 mov r1, #0x4A000000
24 mov r2, #0xffffffff
25 str r2, [r1, #0x08]
26 ldr r2, =0x7ff
27 str r2, [r1, #0x1c]
28
29 bl  memory_setup  @ Initialize memory setting
30 bl  flash_to_sdram  @ Copy code to sdram
31
32 ldr pc, =run_on_sdram
33 run_on_sdram:
34 ldr sp, =0x33000000
35  bl init_mmu_tlb   @ setup page table
36  bl init_mmu         @ MMU enabled
37
38 msr cpsr_c, #0xd2  @ set the irq mode stack
39 ldr sp, =0x31000000
40 msr cpsr_c, #0xdf  @ set the system mode stack
41 ldr sp, =0x32000000
42 bl  init_irq           
43 msr cpsr_c, #0x5f  @ set the system mode open the irq
44 
45 ldr sp, =0x33000000  @ Set stack pointer
46 bl  main
47 loop:
48 b loop


(1) 設(shè)置中斷跳轉(zhuǎn)指令
    可以看到程序 4~13 行用來設(shè)置中斷跳轉(zhuǎn)指令,目前我們只實現(xiàn)了響應(yīng) IRQ 中斷的代
    碼,所以在第 10 行處放了一條 ldr 加載指令,它的意思是當(dāng)發(fā)生 IRQ 中斷時,把
    用于響應(yīng) IRQ 中斷的函數(shù) handle_irq 的地址加載進(jìn) pc 寄存器讓程序跳轉(zhuǎn)那里進(jìn)
    行相應(yīng)處理
(2) 關(guān)閉看門狗,程序第 15~17 行
(3) 初始化堆棧寄存器體現(xiàn)在第 20 行,之所這么做因為下面會調(diào)用一些 C 函數(shù),而 C函
    數(shù)里的變量當(dāng)然要保存在堆棧里了
(4) 暫時不響應(yīng)所有中斷: 22~27 行
(5) 第 29 行,初始化內(nèi)存(內(nèi)存在這里就是 SDRAM) 慢著...程序不是已經(jīng)運行在內(nèi)存里
    了嗎? 非也,準(zhǔn)確點說是運行在 SRAM 里。ARM 啟動時會將 Nand Flash(相當(dāng)于硬
    盤)里前 4K 代碼加載進(jìn) SRAM 里并運行之。那程序大于 4K 怎么辦? 呵呵,這正是
    下一點要說明的
(6) 第 30 行,程序自身到內(nèi)存的般移。我們的程序大于 4K, 只靠 SRAM 的那可憐的 4K
    是運行不開的
(7) 第 32~33 行,跳轉(zhuǎn)到 SDRAM 里執(zhí)行。我們的代碼已經(jīng)搬到內(nèi)存了,64M 的空間夠用
     的了
(8) 第 34~36 行,設(shè)置頁表,啟用 MMU。這是今天的主角。函數(shù)
       init_mmu_tlb
       init_mmu
    定義在 mmu.c 文件里,我們?nèi)タ纯催@個文件里有些什么?

     1  /* init MMU page table*/
     2  void init_mmu_tlb() {
     3    unsigned long vm_addr, idx;
     4    unsigned long *tb_base = (unsigned long *)MMU_TBL_BASE;
     5 
     6    for (vm_addr = MEM_START; vm_addr < MEM_END; vm_addr += PAGE_SIZE) {
     7      idx = vm_addr >> 20;
     8      /* entry: section base, AP=0b11, domain=0b00,cached,write-through*/
     9      *(tb_base + idx) = vm_addr|(0x3<<10)|(0<<5)|(1<<4)|(1<<3)|0x02;
     10    }
     11 
     12    /* set IO mapped-memory addr for function register*/
     13    for (vm_addr = MEM_IO_MAPPED_START; vm_addr < MEM_IO_MAPPED_END; vm_addr += PAGE_SIZE) {
     14      idx = vm_addr >> 20;
     15      /* entry: section base, AP=0b11, domain=0b00, NCNB*/
     16      *(tb_base + idx) = vm_addr|(0x03<<10)|(0<<5)|(1<<4)|0x02;
     17    }
     18 
     19    /*
     20     * exception vectors
     21     * entry: AP=0b11, domain=0b00, cached, write-through
     22     */
     23    *(tb_base + 0x00000000) = (0x00000000)|(0x03<<10)|(0<<5)|(1<<4)|(1<<3)|0x02;
     24    *(tb_base + (0xffff0000>>20)) = VECTORS_PHY_BASE|(0x03<<10)|(0<<5)|(1<<4)|(0<<3)|0x02;
     25  }
     26
     27 void init_mmu() {
     28   unsigned long ttb = (unsigned long)MMU_TBL_BASE;
     29   __asm__(
     30    "mov r0, #0\n"
     31
     32    /* disable ICache, DCache*/
     33    "mcr p15, 0, r0, c7, c7, 0\n"
     34
     35    /* clear wirte buffer*/
     36    "mcr p15, 0, r0, c7, c10, 4\n"
     37
     38    /* disable ICache, Dcache, TLBs*/
     39    "mcr p15, 0, r0, c8, c7, 0\n"
     40
     41    /* load page table pointer*/
     42    "mov r4, %0\n"
     43    "mcr p15, 0, r4, c2, c0, 0\n"
     44
     45    /*
     46     * write domain id (cp15_r13)
     47     * domain=0b11, manager mode, no check for permission
     48     */
     49    "mvn r0, #0\n"
     50    "mcr p15, 0, r0, c3, c0, 0\n"
     51
     52    /* set control register*/
     53    "mrc p15, 0, r0, c1, c0, 0\n"
     54
     55    /* clear out 'unwanted' bits*/
     56    "ldr r1, =0x1384\n"
     57    "bic r0, r0, r1\n"
     58
     59    /*
     60     * turn on what we want
     61     * base location of exception = 0xffff0000
     62     */
     63    "orr r0, r0, #0x2000\n"
     64    /* fault checking enabled*/
     65    "orr r0, r0, #0x0002\n"
     66 #ifdef CONFIG_CPU_DCACHE_ON
     67    "orr r0, r0, #0x0004\n"
     68 #endif
     69 #ifndef CONFIG_CPU_ICACHE_ON
     70    "orr r0, r0, #0x1000\n"
     71 #endif
     72    /* MMU enabled*/
     73    "orr r0, r0, #0x0001\n"
     74
     75    /* write control register*/
     76    "mcr p15, 0, r0, c1, c0, 0\n"
     77    : /* no output*/
     78    : "r"(ttb));
     79 }
     
    程序第 1~25 行是函數(shù) init_mmu_tlb 的實現(xiàn)。其實就是建立一級頁表。s3c2410 有四
    種內(nèi)存映射模式: Fault、Coarse Page、Section、Fine Page. 為了簡單起見我們用
    Section 模式。ARM920T 是 32 位的 CPU,其虛擬地址空間為 2^32 即 4G。 我們用
    Section 模式來劃分這 4G 址址空間,每一個 Section 大小為 1M,這樣就可得到 4K
    個 Section。怎樣管理這些 Section 呢?通過一張表來記錄它們,而這張表被稱做頁表。
    在頁表里,用 4 個字節(jié)來記錄一個 Section 的信息。總共有 4K 個 Section,這樣就
    要花費 4x4K = 16K 的內(nèi)存。這用來描述 Section 的 4 個字節(jié)也有個形象的名字,叫
    作描述符。描述符的結(jié)構(gòu)又是什么樣的呢。來看一下:

   

    Section base address: 段基地址
    AP: Access Permission 訪問控制位
    Domain: 訪問控制器的索引
    C: 被置位時為 write-through (WT)模式
    B: 被置位時為 write-back (WB)模式

    s3c2410 的 SDRAM 為 64M,其物理地址范圍是 0x30000000~0x33ffffff,可劃分成
    64 個 Section。我們要實現(xiàn)虛址到物理地址的映射,虛地址是如何被轉(zhuǎn)換的呢?其實 MMU
    將虛地址分成兩部分: 索引(index) 和 偏移(offset)。index 就是虛地址的高 12 位,
    偏移就是虛地址的低 20 位, MMU 通過 index 在頁表里取到相應(yīng)描述符,從描述符里取
    到對應(yīng) Section 的基地址,再由這個基地址加上偏移 offset 來找出真正的物理地址。

    明白了地址映射的基本原理,我們來分析上面的代碼:
    第 6~13 行令 SDRAM 的虛地址和物理地址相等,從 0x30000000 至 0x33ffffff
    第 12~17 行設(shè)置特殊功能寄存器的虛地址,也讓它們的虛地址與物理地址相等
    第 23~24 行設(shè)置中斷向量的虛地址,其中高端中斷向量地址 0xffff0000 對應(yīng)到物理
    地址0x33f00000

    代碼中有幾個常數(shù),定義如下:
      #define MEM_START 0x30000000UL
      #define MEM_END   0x34000000UL
      #define PAGE_SIZE 0x00100000UL /* page size: 1M*/

      #define MEM_IO_MAPPED_START 0x48000000UL
      #define MEM_IO_MAPPED_END   0x60000000UL
      #define MMU_TBL_BASE        0x30000000UL
      #define VECTORS_PHY_BASE    0x33f00000UL


    為了理解第 27~79 行的內(nèi)聯(lián)匯編到底做了些什么,我們先來了解一下協(xié)處理器:
    在基于 ARM 的嵌入式應(yīng)用系統(tǒng)中,存儲系統(tǒng)通過是通過系統(tǒng)控制協(xié)處理器 CP15 來完
    成的。如何設(shè)置/讀取協(xié)處理器的寄存器呢?借助 MCR/MRC 指令。例如:

        MCR P15, 0, R4, C1, C0, 0

    將寄存器 R4 中的數(shù)據(jù)傳送到協(xié)處理器 CP15 的寄存器 C1 中,其中 R4 為 ARM 寄存
    器,存放源操作數(shù); C1,C0 為協(xié)處理器寄存器,為目的寄存器; 操作碼1為0,操作碼2為0
    相應(yīng)的, MRC 指令將協(xié)處理器的寄存器中的數(shù)值傳送到 ARM 處理器的寄存器中。

    好了,我們來分析上面的內(nèi)聯(lián)匯編代碼:
    第 32~33 行使數(shù)據(jù)Cache 和 指令Cache 無效。呵呵, 你沒明白過來? 其中原由如下:

      CP15 中的寄存器 C7 用于控制 cache 和寫緩沖區(qū)。它是一個只寫的寄存器,使用 MCR 指令
      來寫該寄存器,具體格式如下:

          MCR P15, 0, <Rd>, <c7>, <CRm>, <opcode_2>

      其中, <Rd> 中為將寫入 C7 中的數(shù)據(jù); <CRm>, <opcode_2> 的不同組合決定執(zhí)行不同的操作:

      ----------------------------------------------------------------------------------
      <CRm>        <opcode_2>        含義                                   數(shù)據(jù)
      ----------------------------------------------------------------------------------
      C0           4                 等待中斷激活                              0
      C5           0                 使用無效整個Cache                     0
      C5           1                 使無效指令Cache 中的某塊           虛地址
      C5           2                 使無效指令Cache 中的某塊           組號/組內(nèi)序號
      C5           4                 清空預(yù)取緩沖區(qū)                          0
      C5           6                 清空整個跳轉(zhuǎn)目標(biāo)Cache                0
      C5           7                 清空跳轉(zhuǎn)目標(biāo)Cache中的某塊        生產(chǎn)商定義
      C6           0                 使無效整個數(shù)據(jù)Cache                    0
      C6           1                 使無效數(shù)據(jù)Cache 中的某塊           虛地址
      C6           2                 使無效數(shù)據(jù)Cache 中的某塊           組號/組內(nèi)序號
      C7           0                 使數(shù)據(jù)Cache 和指令Cache 無效    0
      C7           1                 使無效整個Cache 中的某塊           虛地址
      C7           2                 使無效整個Cache 中的某塊           組號/組內(nèi)序號
      C8           2                 等待中斷激活                                  0
      C10          1                 清空數(shù)據(jù)Cache 中某塊                  虛地址
      C10          2                 清空數(shù)據(jù)Cache 中某塊                  組號/組內(nèi)序號
      C10          4                 清空寫緩沖區(qū)                                 0
      C11          1                 清空整個Caceh 中某塊                  虛地址
      C11          2                 清空整個Caceh 中某塊                  組號/組內(nèi)序號
      C13          1                 預(yù)取指令Cache 中某塊                  虛地址
      C14          1                 清空并使無效數(shù)據(jù)Cache中某塊   虛地址
      C14          2                 清空并使無效數(shù)據(jù)Cache中某塊   組號/組內(nèi)序號
      C15          1                 清空并使無效整個Cache中某塊   虛地址
      C15          2                 清空并使無效整個Cache中某塊   組號/組內(nèi)序號
      ----------------------------------------------------------------------------------

    第 35~36 行: 清空寫緩沖區(qū)
    第 38~39 行,使DCache, ICache 及頁表的內(nèi)容無效。系統(tǒng)控制協(xié)處理器 CP15 的寄存器 C8就
    是用來控制清除 TLB內(nèi)容相關(guān)操作的。指令格式如下:
     
      MCR P15, 0, <Rd>, <C8>, <CRm>, <opcode_2>

    其中 <Rd> 中為將寫入 C8中的數(shù)據(jù); <CRm>, <opcode_2> 的不同組合決定指令執(zhí)行不同的操作
   
      ----------------------------------------------------------------------------------
      指令                           <opcode_2>   <CRm>   <Rd>    含義
      ----------------------------------------------------------------------------------
      MCR P15,0,Rd,C8,C7,0  0b0000     0b0111   0            DCache,ICache 無效  
      MCR P15,0,Rd,C8,C7,1  0b0000     0b0111   虛地址  整個Cache 中單個地址變換條目無效
      MCR P15,0,Rd,C8,C5,0  0b0000     0b0101   0            整個Cache無效
      MCR P15,0,Rd,C8,C5,1  0b0000     0b0101   虛地址  指令Cache 中單個地址變換條目無效
      MCR P15,0,Rd,C8,C6,0  0b0000     0b0110   0            整個數(shù)據(jù)Cache無效
      MCR P15,0,Rd,C8,C6,1  0b0000     0b0110   虛地址  數(shù)據(jù)Cache 中單個地址變換條目無效
      ----------------------------------------------------------------------------------

    第 41~43 行:加載頁表的首地址到 CP15 協(xié)處理器的寄存器 C2
    第 45~53 行:設(shè)置訪問控制權(quán)限。協(xié)處理器 CP15 中 C3 為 DOMAIN ACCESS CONTROL REGISTER,
    該寄存器有效位為32,被分成16個區(qū)域,每個區(qū)域由兩個位組成,含義如下:

      00:當(dāng)前級別下,該內(nèi)存區(qū)域不允許被訪問,任何的訪問都會引起一個 domain fault
      01:當(dāng)前級別下,該內(nèi)存區(qū)域的訪問必須配合該內(nèi)存區(qū)域的段描述符中AP位進(jìn)行權(quán)檢查
      10:保留狀態(tài)
      11:當(dāng)前級別下,對該內(nèi)存區(qū)域的訪問都不進(jìn)行權(quán)限檢查

    注意第 49 行我們用的是 "mvn r0, #0" 而非 "mov r0, #0"

    第 59~76 行, 設(shè)置并啟用 MMU。這幾行代碼主要是設(shè)置了 CP15 的寄存器 C1。C1 是一個控制寄
    存器它包括以下功能:
     
      禁止/使能 MMU 以及其它的與存儲系統(tǒng)相關(guān)的功能
      配置存儲系統(tǒng)以及 ARM 處理器中的相關(guān)部分的工作方式

    來看一下 C1 寄存器具體是什么樣子:
      
     

      各控制位含義如下表:

      ----------------------------------------------------------------------------------
        C1中的控制位  含義
      ----------------------------------------------------------------------------------
        M             禁止/使能 MMU
        A             禁止/使能地址對齊檢查功能
        C             禁止/使能整個 Cache
        W             禁止/使能寫緩沖
        P             32/26地址模式
        D             禁止/使能26地址異常檢查
        L             早期/后期中止模型
        B             little-endian/big-endian
        S             在 MMU 啟用時用作系統(tǒng)保護(hù)
        R             在 MMU 啟用時用作系統(tǒng)保護(hù)
        F             由生產(chǎn)商定義
        Z             禁止/使能跳轉(zhuǎn)預(yù)測指令
        I             禁止/使能 Cache
        V             低端/高端異常中斷向量表
        RR            對系統(tǒng)中的 Cache 選擇淘汰算法
        L4            提供對以前的 ARM 的版本兼容
        bits[31:16]   保留
      ----------------------------------------------------------------------------------


    第 77~79 行: 這是使用嵌入?yún)R編的方式,第 78 行的 "r"(ttb) 表示變量 ttb 的值賦給一個寄
    存器作為輸入?yún)?shù),這個寄存器由編譯器自動分配。我們看到第 42 行的 "%0" 被用來表示這個
    寄存器。

    ......呵呵,總算講完 MMU 這一塊了,程序不多,可引出的內(nèi)容不少!


(9) 第 38~48 行設(shè)置 irq 模式和 system 模式下的堆棧寄存器,然后程序運行在 system 模式下,
    調(diào)用 main 函數(shù)后返回, 循環(huán)并等待中斷發(fā)生......

這就是 start.S 程序的整個流程,關(guān)鍵是 MMU 如何設(shè)置和啟用。其它代碼都有詳細(xì)的注釋。我在下
面提供了所有代碼,有興趣的同道自己下載看吧。快過年了,預(yù)祝大家新年愉快!

 

    代碼下載


 

posted on 2008-02-01 15:26 Normandy 閱讀(5664) 評論(14)  編輯 收藏 引用 所屬分類: Embeded Area

評論

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

niu
2008-02-14 16:32 | niube' son

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

代碼下載后運行不了!!
2008-02-14 16:34 | niube' son

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

@niube' son

代碼在我的板子上是沒有問題的, 不知樓上的兄弟是否成功編譯代碼?
另外有幾點說明:
(1) 代碼是直接運行在裸板上的, 而非運行在 arm-linux 上
(2) 我是借助 FS2410 自帶的sjf2410.exe 燒寫到 Nand Flash 的, 很可能樓上的兄弟沒有燒寫成功

如果能提供更詳細(xì)的信息就好了, 這樣就可以看看到底是哪個環(huán)節(jié)出錯了!



2008-02-14 20:58 | Normandy

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理[未登錄]  回復(fù)  更多評論   

樓主的代碼太偉大了。
2008-02-19 18:26 | jjyy

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

分析的非常那個 好
2008-02-26 02:20 | longin

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

太強了!佩服!
2008-04-01 10:12 | liubaosen

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

Normandy你好,我將Makefile中的LIBS改為(因為我的arm-linux-gcc版本與你的例子不同):
LIBS=-lgcc -L/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2
之后Make出現(xiàn)下列錯誤:
arm-linux-ld -Ttext 0x30004000 -o main_tmp.o start.o interrupt.o main.o printf.o serl.o mmu.o -lgcc -L/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivsi3.oS)(.text+0xec):/work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/gcc/config/arm/lib1funcs.asm:615: relocation truncated to fit: R_ARM_PLT32 __div0
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_umodsi3.oS)(.text+0xc0):/work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/gcc/config/arm/lib1funcs.asm:656: relocation truncated to fit: R_ARM_PLT32 __div0
make: *** [main] Error 1
能幫我分析下是什么錯誤嗎?謝謝。
2008-04-01 14:45 | FAN

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

剛剛弄錯了,是將你的LIBS中的3.3.2改為了3.4.1。然后出現(xiàn)了上述錯誤。
2008-04-01 15:00 | FAN

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

@FAN
從錯誤信息上也看不出什么問題, 我猜測可能是如下兩個原因:
(1) 你的 arm-linux-gcc 3.4.1 有問題
或者
(2) 編譯時你用的 arm-linux-gcc 是 3.3.2, 但鏈接時用的卻是 arm-linux-gcc 3.4.1 的庫(libgcc.a)
2008-04-01 18:35 | Normandy

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

@Normandy
我編譯時用的是3.4.1的,鏈接時也是用的3.4.1,可能是這個3.4.1有問題吧,一會換個3.3.2試試。謝謝了。
2008-04-02 10:08 | FAN

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

受用非常,謝謝
2008-04-06 14:48 | kerwintian

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

好啊,,,,非常之好。。謝謝
2008-10-28 20:49 | Saiu

# re: 學(xué)習(xí) ARM 系列 -- FS2410 開發(fā)板上啟用 MMU 實現(xiàn)虛擬內(nèi)存管理  回復(fù)  更多評論   

你是醉生夢死(273279787)吧?
因在群里推薦了
李敖:中日關(guān)系 不舒服卻不得不服
http://www.ckxxw.com/html/c9/2009-06/3606.htm
的文章被你踢了,是不應(yīng)該在技術(shù)論壇談?wù)撈渌贿^你也過了點吧?
順便說聲:如果一個好的技術(shù)人員不懂國情、不關(guān)心國家、不憂天下,即時你有一流的技術(shù)又有何用?建議有空看看李敖這篇讓中國人警醒的文章,建議了解些政治,國家興旺、天下治亂,匹夫有責(zé)!
2009-06-28 21:30 | hele

# QQ群名字大全  回復(fù)  更多評論   

QQ群名字大全
2011-05-24 06:03 | QQ群名字大全
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜视频一区| 久久久亚洲国产美女国产盗摄| 国产欧美日韩亚州综合| 亚洲国产精品va在线看黑人| 国产欧美日韩精品a在线观看| 亚洲国产另类久久久精品极度| 国产亚洲欧美日韩美女| 99在线精品免费视频九九视| 亚洲人成亚洲人成在线观看图片| 欧美一区二区三区在线观看| 午夜精品福利在线| 欧美久久久久久蜜桃| 榴莲视频成人在线观看| 国产日韩精品视频一区二区三区| 日韩一区二区精品视频| 亚洲精品麻豆| 久久综合给合久久狠狠色 | 国内精品一区二区| 中文久久精品| 一区二区冒白浆视频| 欧美刺激午夜性久久久久久久| 蜜桃久久精品乱码一区二区| 国产一区观看| 久久精品国产亚洲一区二区| 久久精品在线| 狠狠狠色丁香婷婷综合激情| 久久gogo国模裸体人体| 久久久91精品国产| 国产综合网站| 久久先锋影音| 欧美激情一区在线| 亚洲人成人77777线观看| 欧美成人午夜| aa级大片欧美| 午夜一级久久| 国产一区香蕉久久| 久久深夜福利免费观看| 欧美韩国日本一区| 亚洲欧洲综合另类| 欧美日韩精品免费| 亚洲一区二区不卡免费| 亚洲欧美日韩一区| 国产三级精品在线不卡| 久久夜色精品国产噜噜av| 亚洲电影av| 亚洲影院在线| 国模精品一区二区三区| 久久精品成人| 亚洲啪啪91| 性感少妇一区| 在线欧美影院| 欧美日韩在线观看视频| 亚洲欧美福利一区二区| 蜜桃精品久久久久久久免费影院| 亚洲日本va午夜在线电影| 欧美日韩直播| 久久久精品999| 亚洲黄色影片| 久久精品99久久香蕉国产色戒 | 亚洲精品欧美| 国产精品www色诱视频| 欧美在线综合视频| 亚洲高清在线精品| 午夜亚洲福利在线老司机| 尤物九九久久国产精品的特点 | 99视频在线观看一区三区| 国产精品久久二区| 久久这里有精品15一区二区三区| 亚洲精品在线电影| 久久日韩精品| 亚洲网站视频| 亚洲国产91精品在线观看| 国产精品久久久久久户外露出| 久久伊伊香蕉| 亚洲欧美www| 亚洲精品免费观看| 久久久久久噜噜噜久久久精品| av成人激情| 在线观看欧美精品| 国产欧美精品xxxx另类| 欧美精选午夜久久久乱码6080| 久久av红桃一区二区小说| 99国产精品99久久久久久粉嫩| 欧美日韩亚洲一区二| 久久9热精品视频| 欧美激情一区二区三区高清视频| 亚洲专区一二三| 亚洲精品一区二区三区四区高清| 国产午夜精品一区二区三区视频| 欧美三级在线播放| 欧美成人a视频| 久久精品国产一区二区三区| 亚洲资源在线观看| 99re视频这里只有精品| 亚洲第一精品福利| 免费观看久久久4p| 久久精品一区二区国产| 先锋影音一区二区三区| 亚洲一区二区三区四区中文| 99精品国产在热久久下载| 亚洲国产精品一区二区www| 激情av一区| 韩国在线视频一区| 国产亚洲福利| 国产一区99| 好看的av在线不卡观看| 国产一区二区三区黄| 国产色综合天天综合网| 国产女主播一区二区| 国产伦精品一区二区三区| 国产精品夜夜夜一区二区三区尤| 欧美色另类天堂2015| 国产精品福利在线观看| 国产精品v一区二区三区| 欧美午夜激情视频| 国产精品美女久久久久久免费| 欧美三级特黄| 国产精品日韩在线| 国产午夜精品美女视频明星a级 | 亚洲色图制服丝袜| 亚洲深夜福利| 欧美亚洲三区| 久久久www成人免费毛片麻豆| 久久久久久午夜| 猛干欧美女孩| 亚洲高清在线观看| 日韩午夜免费| 亚洲欧美国产精品va在线观看| 欧美一区二区在线| 久久精品论坛| 欧美成人资源网| 欧美午夜女人视频在线| 国产视频在线一区二区| 在线日韩日本国产亚洲| 一本一道久久综合狠狠老精东影业| 亚洲色图制服丝袜| 久久精品观看| 欧美国产精品中文字幕| 99精品国产福利在线观看免费| 午夜在线视频观看日韩17c| 久久久高清一区二区三区| 欧美国产激情二区三区| 国产精品激情av在线播放| 国产一区二区三区在线播放免费观看 | 日韩一区二区免费高清| 午夜日韩视频| 欧美夫妇交换俱乐部在线观看| 99ri日韩精品视频| 欧美一级视频| 欧美日韩不卡| 伊人久久噜噜噜躁狠狠躁| 洋洋av久久久久久久一区| 久久久91精品国产一区二区三区 | 影音先锋中文字幕一区二区| 中文亚洲欧美| 免费一区二区三区| 中文成人激情娱乐网| 久久综合色播五月| 国产精品毛片va一区二区三区| 在线视频观看日韩| 亚洲欧美综合另类中字| 欧美国产精品劲爆| 午夜在线观看欧美| 欧美日韩视频在线一区二区| 尤物九九久久国产精品的特点| 亚洲欧美日韩另类| 亚洲激情视频在线| 久久大香伊蕉在人线观看热2| 欧美午夜精品久久久久久人妖| 亚洲国产精品久久久久婷婷老年 | 久久久久久免费| 一区二区三区福利| 欧美激情欧美狂野欧美精品| 激情久久综合| 欧美一级二区| 日韩一区二区精品| 欧美成人免费一级人片100| 一区二区三区在线免费播放| 欧美亚洲免费电影| 一本久久精品一区二区| 欧美日本国产一区| 亚洲精品免费在线播放| 欧美va亚洲va国产综合| 久久精品国产在热久久| 国产在线不卡视频| 欧美在线日韩| 亚洲欧美制服另类日韩| 国产精品女主播一区二区三区| 这里只有精品电影| 亚洲精品裸体| 欧美激情一区二区三区全黄| 亚洲精品免费观看| 亚洲国产精品123| 欧美电影美腿模特1979在线看| 亚洲国产日韩一级| 亚洲大片在线观看| 欧美顶级少妇做爰| 一本色道久久99精品综合| 亚洲免费av片| 欧美性猛交99久久久久99按摩 |