韦东山Linux嵌入式课程社区
直播中

刘兴欢

7年用户 162经验值
私信 关注

请问s3c2440裸板***64M吗?

各位大神,小弟问个问题:

在做mmu裸板实验时,因为代码较小,只有不到2k,比如需要重定位的代码运行地址为0xb0004000,则也就是要将段 0xb0000000>>20 页表单元填写0x30000000

但是韦老师提供的代码是一下子就映射了64M,将虚拟地址0xB0000000~0xB3FFFFFF映射到物理地址0x30000000~0x33FFFFFF上,总共64M,涉及64个段描述符

我现在就想将代码需要运行的那1M和堆栈需要的映射1M,即只映射2段。但是发现不行,难道一定要一下子映射64M吗?

代码如下:
head.s:
   
.equ        MEM_CTL_BASE,       0x48000000


  .text
  .global _start
  _start:

  /*关看门狗*/
   ldr r0,=0x53000000
   mov r1,#0
   str r1,[r0]

  /*设置sdram*/
   ldr r0,=MEM_CTL_BASE
   adr r1, sdram_config
   add r2,r0,#(4*13)
1:
  /*大错特错 str r1,[r0] 不是存地址的值,而是 把这个地址对应的内存单元里的值取出来*/
   ldr  r3,[r1],#4
   str  r3,[r0],#4
   cmp  r2,r0
   bne  1b



/*重定位代码*/
   ldr r0,=2048
   ldr r1,=4096
   ldr r2,=0x30004000
2:
   ldr r3,[r0],#4
   str r3,[r2],#4               
   cmp r0,r1
   bne 2b

   ldr sp,=4096
  /*建立页表*/
   bl  create_page_table

  /*初始化mmu*/
   bl  mmu_init





  /*ldr pc,=on_sdram*/
/* on_sdram :*/
/*跳转到main函数*/
/*不可以提前使用位置相关代码 因为还没有跳过去*/
ldr sp,=0xb4000000
ldr pc,=main
  /* bl main*/
loop:
      b   loop



sdram_config:
    .long   0x22011110      @ BWSCON
    .long   0x00000700      @ BANKCON0
    .long   0x00000700      @ BANKCON1
    .long   0x00000700      @ BANKCON2
    .long   0x00000700      @ BANKCON3  
    .long   0x00000700      @ BANKCON4
    .long   0x00000700      @ BANKCON5
    .long   0x00018005      @ BANKCON6
    .long   0x00018005      @ BANKCON7
    .long   0x008C07A3      @ REFRESH
    .long   0x000000B1      @ BANKSIZE
    .long   0x00000030      @ MRSRB6
    .long   0x00000030      @ MRSRB7

init.c:

void create_page_table(void)
{

/*
* 用于段描述符的一些宏定义
*/
#define MMU_FULL_ACCESS     (3 << 10)   /* 访问权限 */
#define MMU_DOMAIN          (0 << 5)    /* 属于哪个域 */
#define MMU_SPECIAL         (1 << 4)    /* 必须是1 */
#define MMU_CACHEABLE       (1 << 3)    /* cacheable */
#define MMU_BUFFERABLE      (1 << 2)    /* bufferable */
#define MMU_SECtiON         (2)         /* 表示这是段描述符 */
#define MMU_SECDESC         (MMU_FULL_ACCESS | MMU_DOMAIN | MMU_SPECIAL |
                             MMU_SECTION)
#define MMU_SECDESC_WB      (MMU_FULL_ACCESS | MMU_DOMAIN | MMU_SPECIAL |
                             MMU_CACHEABLE | MMU_BUFFERABLE | MMU_SECTION)
#define MMU_SECTION_SIZE    0x00100000

    unsigned long virtuladdr, physicaladdr;
    unsigned long *mmu_tlb_base = (unsigned long *)0x30000000;
   
    /*
     * Steppingstone的起始物理地址为0,第一部分程序的起始运行地址也是0,
     * 为了在开启MMU后仍能运行第一部分的程序,
     * 将0~1M的虚拟地址映射到同样的物理地址
     */
    virtuladdr = 0;
    physicaladdr = 0;
    *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |
                                            MMU_SECDESC_WB;

    /*
     * 0x56000000是GPIO寄存器的起始物理地址,
     * GPBCON和GPBDAT这两个寄存器的物理地址0x56000050、0x56000054,
     * 为了在第二部分程序中能以地址0xA0000050、0xA0000054来操作GPFCON、GPFDAT,
     * 把从0xA0000000开始的1M虚拟地址空间映射到从0x56000000开始的1M物理地址空间
     */
    virtuladdr = 0xA0000000;
    physicaladdr = 0x56000000;
    *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |
                                            MMU_SECDESC;

    /*
     * SDRAM的物理地址范围是0x30000000~0x33FFFFFF,
     * 将虚拟地址0xB0000000~0xB3FFFFFF映射到物理地址0x30000000~0x33FFFFFF上,
     * 总共64M,涉及64个段描述符
     */
    virtuladdr = 0xB0000000;
    physicaladdr = 0x30000000;
//  while (virtuladdr < 0xB4000000)
//    {
        *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |
                                                MMU_SECDESC_WB;
  //      virtuladdr += 0x100000;
//       physicaladdr += 0x100000;
//   }
//我在这里进行了修改
    virtuladdr = 0xB3f00000;
    physicaladdr = 0x33f00000;
   *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |
                                                MMU_SECDESC_WB;


}

/*
* 启动MMU
*/
void mmu_init(void)
{
    unsigned long ttb = 0x30000000;

__asm__(
    "mov    r0, #0n"
    "mcr    p15, 0, r0, c7, c7, 0n"    /* 使无效ICaches和DCaches */
   
    "mcr    p15, 0, r0, c7, c10, 4n"   /* drain write buffer on v4 */
    "mcr    p15, 0, r0, c8, c7, 0n"    /* 使无效指令、数据TLB */
   
    "mov    r4, %0n"                   /* r4 = 页表基址 */
    "mcr    p15, 0, r4, c2, c0, 0n"    /* 设置页表基址寄存器 */
   
    "mvn    r0, #0n"                  
    "mcr    p15, 0, r0, c3, c0, 0n"    /* 域访问控制寄存器设为0xFFFFFFFF,
                                         * 不进行权限检查
                                         */   
    /*
     * 对于控制寄存器,先读出其值,在这基础上修改感兴趣的位,
     * 然后再写入
     */
    "mrc    p15, 0, r0, c1, c0, 0n"    /* 读出控制寄存器的值 */
   
    /* 控制寄存器的低16位含义为:.RVI ..RS B... .CAM
     * R : 表示换出Cache中的条目时使用的算法,
     *     0 = Random replacement;1 = Round robin replacement
     * V : 表示异常向量表所在的位置,
     *     0 = Low addresses = 0x00000000;1 = High addresses = 0xFFFF0000
     * I : 0 = 关闭ICaches;1 = 开启ICaches
     * R、S : 用来与页表中的描述符一起确定内存的访问权限
     * B : 0 = CPU为小字节序;1 = CPU为大字节序
     * C : 0 = 关闭DCaches;1 = 开启DCaches
     * A : 0 = 数据访问时不进行地址对齐检查;1 = 数据访问时进行地址对齐检查
     * M : 0 = 关闭MMU;1 = 开启MMU
     */
   
    /*  
     * 先清除不需要的位,往下若需要则重新设置它们   
     */
                                        /* .RVI ..RS B... .CAM */
    "bic    r0, r0, #0x3000n"          /* ..11 .... .... .... 清除V、I位 */
    "bic    r0, r0, #0x0300n"          /* .... ..11 .... .... 清除R、S位 */
    "bic    r0, r0, #0x0087n"          /* .... .... 1... .111 清除B/C/A/M */

    /*
     * 设置需要的位
     */
    "orr    r0, r0, #0x0002n"          /* .... .... .... ..1. 开启对齐检查 */
    "orr    r0, r0, #0x0004n"          /* .... .... .... .1.. 开启DCaches */
    "orr    r0, r0, #0x1000n"          /* ...1 .... .... .... 开启ICaches */
    "orr    r0, r0, #0x0001n"          /* .... .... .... ...1 使能MMU */
   
    "mcr    p15, 0, r0, c1, c0, 0n"    /* 将修改的值写入控制寄存器 */
    : /* 无输出 */
    : "r" (ttb) );
}


leds.c:

#define GPFCON (*(volatile unsigned long*)0XA0000050)
#define GPFDAT (*(volatile unsigned long*)0XA0000054)

#define GPF4_OUT    (1<<8)
#define GPF5_OUT    (1<<10)
#define GPF6_OUT    (1<<12)


static int delay(unsigned long i)
{
    for(;i>0;i--);
    return 0;        
         
}

int main()
{
     int i=4;
     GPFCON = GPF4_OUT | GPF5_OUT | GPF6_OUT;
   
     while(1)
     {
delay(300000);
GPFDAT = ~(1< if(++i==7)
{
  i=4;        
}
     }        
     
       return 0;
}更多
0

回帖(8)

李刚

2019-8-20 08:31:08
把0x30000000开始的那1MB也映射了吧。
举报

洪茗苞

2019-8-20 08:45:24
    /*
     * SDRAM的物理地址范围是0x30000000~0x33FFFFFF,
     * 将虚拟地址0xB0000000~0xB3FFFFFF映射到物理地址0x30000000~0x33FFFFFF上,
     * 总共64M,涉及64个段描述符
     */
    virtuladdr = 0xB0000000;
    physicaladdr = 0x30000000;
//  while (virtuladdr < 0xB4000000)
//    {
        *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |
                                                MMU_SECDESC_WB;


这边已经映射过了啊
举报

王文霞

2019-8-20 08:51:09
把连接脚本和反汇编也贴上来
举报

贾伟刚

2019-8-20 08:59:53
反汇编:


mmu_elf:     file format elf32-littlearm

Disassembly of section firtst:

00000000 <_start>:
   0:        e3a00453         mov        r0, #1392508928        ; 0x53000000
   4:        e3a01000         mov        r1, #0        ; 0x0
   8:        e5801000         str        r1, [r0]
   c:        e3a00312         mov        r0, #1207959552        ; 0x48000000
  10:        e28f1044         add        r1, pc, #68        ; 0x44
  14:        e2802034         add        r2, r0, #52        ; 0x34
  18:        e4913004         ldr        r3, [r1], #4
  1c:        e4803004         str        r3, [r0], #4
  20:        e1520000         cmp        r2, r0
  24:        1afffffb         bne        18 <_start+0x18>
  28:        e3a00b02         mov        r0, #2048        ; 0x800
  2c:        e3a01a01         mov        r1, #4096        ; 0x1000
  30:        e59f2058         ldr        r2, [pc, #88]        ; 90
  34:        e4903004         ldr        r3, [r0], #4
  38:        e4823004         str        r3, [r2], #4
  3c:        e1500001         cmp        r0, r1
  40:        1afffffb         bne        34 <_start+0x34>
  44:        e3a0da01         mov        sp, #4096        ; 0x1000
  48:        eb000018         bl        b0
  4c:        eb00005d         bl        1c8
  50:        e3a0d32d         mov        sp, #-1275068416        ; 0xb4000000
  54:        e59ff038         ldr        pc, [pc, #56]        ; 94

00000058 :
  58:        eafffffe         b        58

0000005c :
  5c:        22011110         .word        0x22011110
  60:        00000700         .word        0x00000700
  64:        00000700         .word        0x00000700
  68:        00000700         .word        0x00000700
  6c:        00000700         .word        0x00000700
  70:        00000700         .word        0x00000700
  74:        00000700         .word        0x00000700
  78:        00018005         .word        0x00018005
  7c:        00018005         .word        0x00018005
  80:        008c07a3         .word        0x008c07a3
  84:        000000b1         .word        0x000000b1
  88:        00000030         .word        0x00000030
  8c:        00000030         .word        0x00000030
  90:        30004000         .word        0x30004000
  94:        b0004040         .word        0xb0004040
  98:        00001741         .word        0x00001741
  9c:        61656100         .word        0x61656100
  a0:        01006962         .word        0x01006962
  a4:        0000000d         .word        0x0000000d
  a8:        00543405         .word        0x00543405
  ac:        01080206         .word        0x01080206

000000b0 :
  b0:        e52db004         push        {fp}                ; (str fp, [sp, #-4]!)
  b4:        e28db000         add        fp, sp, #0        ; 0x0
  b8:        e24dd014         sub        sp, sp, #20        ; 0x14
  bc:        e3a03203         mov        r3, #805306368        ; 0x30000000
  c0:        e50b3008         str        r3, [fp, #-8]
  c4:        e3a03000         mov        r3, #0        ; 0x0
  c8:        e50b3010         str        r3, [fp, #-16]
  cc:        e3a03000         mov        r3, #0        ; 0x0
  d0:        e50b300c         str        r3, [fp, #-12]
  d4:        e51b3010         ldr        r3, [fp, #-16]
  d8:        e1a03a23         lsr        r3, r3, #20
  dc:        e1a02103         lsl        r2, r3, #2
  e0:        e51b3008         ldr        r3, [fp, #-8]
  e4:        e0832002         add        r2, r3, r2
  e8:        e51b300c         ldr        r3, [fp, #-12]
  ec:        e1a03a23         lsr        r3, r3, #20
  f0:        e1a03a03         lsl        r3, r3, #20
  f4:        e3833ec1         orr        r3, r3, #3088        ; 0xc10
  f8:        e383300e         orr        r3, r3, #14        ; 0xe
  fc:        e5823000         str        r3, [r2]
100:        e3a0320a         mov        r3, #-1610612736        ; 0xa0000000
104:        e50b3010         str        r3, [fp, #-16]
108:        e3a03456         mov        r3, #1442840576        ; 0x56000000
10c:        e50b300c         str        r3, [fp, #-12]
110:        e51b3010         ldr        r3, [fp, #-16]
114:        e1a03a23         lsr        r3, r3, #20
118:        e1a02103         lsl        r2, r3, #2
11c:        e51b3008         ldr        r3, [fp, #-8]
120:        e0832002         add        r2, r3, r2
124:        e51b300c         ldr        r3, [fp, #-12]
128:        e1a03a23         lsr        r3, r3, #20
12c:        e1a03a03         lsl        r3, r3, #20
130:        e3833ec1         orr        r3, r3, #3088        ; 0xc10
134:        e3833002         orr        r3, r3, #2        ; 0x2
138:        e5823000         str        r3, [r2]
13c:        e3a0320b         mov        r3, #-1342177280        ; 0xb0000000
140:        e50b3010         str        r3, [fp, #-16]
144:        e3a03203         mov        r3, #805306368        ; 0x30000000
148:        e50b300c         str        r3, [fp, #-12]
14c:        e51b3010         ldr        r3, [fp, #-16]
150:        e1a03a23         lsr        r3, r3, #20
154:        e1a02103         lsl        r2, r3, #2
158:        e51b3008         ldr        r3, [fp, #-8]
15c:        e0832002         add        r2, r3, r2
160:        e51b300c         ldr        r3, [fp, #-12]
164:        e1a03a23         lsr        r3, r3, #20
168:        e1a03a03         lsl        r3, r3, #20
16c:        e3833ec1         orr        r3, r3, #3088        ; 0xc10
170:        e383300e         orr        r3, r3, #14        ; 0xe
174:        e5823000         str        r3, [r2]
178:        e3a034b3         mov        r3, #-1291845632        ; 0xb3000000
17c:        e283360f         add        r3, r3, #15728640        ; 0xf00000
180:        e50b3010         str        r3, [fp, #-16]
184:        e3a035cf         mov        r3, #868220928        ; 0x33c00000
188:        e2833603         add        r3, r3, #3145728        ; 0x300000
18c:        e50b300c         str        r3, [fp, #-12]
190:        e51b3010         ldr        r3, [fp, #-16]
194:        e1a03a23         lsr        r3, r3, #20
198:        e1a02103         lsl        r2, r3, #2
19c:        e51b3008         ldr        r3, [fp, #-8]
1a0:        e0832002         add        r2, r3, r2
1a4:        e51b300c         ldr        r3, [fp, #-12]
1a8:        e1a03a23         lsr        r3, r3, #20
1ac:        e1a03a03         lsl        r3, r3, #20
1b0:        e3833ec1         orr        r3, r3, #3088        ; 0xc10
1b4:        e3833002         orr        r3, r3, #2        ; 0x2
1b8:        e5823000         str        r3, [r2]
1bc:        e28bd000         add        sp, fp, #0        ; 0x0
1c0:        e8bd0800         pop        {fp}
1c4:        e12fff1e         bx        lr

000001c8 :
1c8:        e52db004         push        {fp}                ; (str fp, [sp, #-4]!)
1cc:        e28db000         add        fp, sp, #0        ; 0x0
1d0:        e24dd00c         sub        sp, sp, #12        ; 0xc
1d4:        e3a03203         mov        r3, #805306368        ; 0x30000000
1d8:        e50b3008         str        r3, [fp, #-8]
1dc:        e51b3008         ldr        r3, [fp, #-8]
1e0:        e3a00000         mov        r0, #0        ; 0x0
1e4:        ee070f17         mcr        15, 0, r0, cr7, cr7, {0}
1e8:        ee070f9a         mcr        15, 0, r0, cr7, cr10, {4}
1ec:        ee080f17         mcr        15, 0, r0, cr8, cr7, {0}
1f0:        e1a04003         mov        r4, r3
1f4:        ee024f10         mcr        15, 0, r4, cr2, cr0, {0}
1f8:        e3e00000         mvn        r0, #0        ; 0x0
1fc:        ee030f10         mcr        15, 0, r0, cr3, cr0, {0}
200:        ee110f10         mrc        15, 0, r0, cr1, cr0, {0}
204:        e3c00a03         bic        r0, r0, #12288        ; 0x3000
208:        e3c00c03         bic        r0, r0, #768        ; 0x300
20c:        e3c00087         bic        r0, r0, #135        ; 0x87
210:        e3800002         orr        r0, r0, #2        ; 0x2
214:        e3800004         orr        r0, r0, #4        ; 0x4
218:        e3800a01         orr        r0, r0, #4096        ; 0x1000
21c:        e3800001         orr        r0, r0, #1        ; 0x1
220:        ee010f10         mcr        15, 0, r0, cr1, cr0, {0}
224:        e28bd000         add        sp, fp, #0        ; 0x0
228:        e8bd0800         pop        {fp}
22c:        e12fff1e         bx        lr
230:        43434700         movtmi        r4, #14080        ; 0x3700
234:        5328203a         teqpl        r8, #58        ; 0x3a
238:        6372756f         cmnvs        r2, #465567744        ; 0x1bc00000
23c:        20797265         r***scs        r7, r9, r5, ror #4
240:        202b2b47         eorcs        r2, fp, r7, asr #22
244:        6574694c         ldrbvs        r6, [r4, #-2380]!
248:        30303220         eorscc        r3, r0, r0, lsr #4
24c:        2d337138         ldfcss        f7, [r3, #-224]!
250:        20293237         eorcs        r3, r9, r7, lsr r2
254:        2e332e34         mrccs        14, 1, r2, cr3, cr4, {1}
258:        27410032         smlaldxcs        r0, r1, r2, r0
25c:        61000000         tstvs        r0, r0
260:        69626165         stmdbvs        r2!, {r0, r2, r5, r6, r8, sp, lr}^
264:        001d0100         andseq        r0, sp, r0, lsl #2
268:        34050000         strcc        r0, [r5]
26c:        02060054         andeq        r0, r6, #84        ; 0x54
270:        04120108         ldreq        r0, [r2], #-264
274:        01150114         tsteq        r5, r4, lsl r1
278:        01180317         tsteq        r8, r7, lsl r3
27c:        021a0119         andseq        r0, sl, #1073741830        ; 0x40000006
280:        0000061e         andeq        r0, r0, lr, lsl r6
Disassembly of section second:

b0004000 :
b0004000:        e52db004         push        {fp}                ; (str fp, [sp, #-4]!)
b0004004:        e28db000         add        fp, sp, #0        ; 0x0
b0004008:        e24dd00c         sub        sp, sp, #12        ; 0xc
b000400c:        e50b0008         str        r0, [fp, #-8]
b0004010:        ea000002         b        b0004020
b0004014:        e51b3008         ldr        r3, [fp, #-8]
b0004018:        e2433001         sub        r3, r3, #1        ; 0x1
b000401c:        e50b3008         str        r3, [fp, #-8]
b0004020:        e51b3008         ldr        r3, [fp, #-8]
b0004024:        e3530000         cmp        r3, #0        ; 0x0
b0004028:        1afffff9         bne        b0004014
b000402c:        e3a03000         mov        r3, #0        ; 0x0
b0004030:        e1a00003         mov        r0, r3
b0004034:        e28bd000         add        sp, fp, #0        ; 0x0
b0004038:        e8bd0800         pop        {fp}
b000403c:        e12fff1e         bx        lr

b0004040
:
b0004040:        e92d4800         push        {fp, lr}
b0004044:        e28db004         add        fp, sp, #4        ; 0x4
b0004048:        e24dd008         sub        sp, sp, #8        ; 0x8
b000404c:        e3a03004         mov        r3, #4        ; 0x4
b0004050:        e50b3008         str        r3, [fp, #-8]
b0004054:        e3a0320a         mov        r3, #-1610612736        ; 0xa0000000
b0004058:        e2833050         add        r3, r3, #80        ; 0x50
b000405c:        e3a02c15         mov        r2, #5376        ; 0x1500
b0004060:        e5832000         str        r2, [r3]
b0004064:        e3a00a49         mov        r0, #299008        ; 0x49000
b0004068:        e2800e3e         add        r0, r0, #992        ; 0x3e0
b000406c:        ebffffe3         bl        b0004000
b0004070:        e3a0220a         mov        r2, #-1610612736        ; 0xa0000000
b0004074:        e2822054         add        r2, r2, #84        ; 0x54
b0004078:        e3a01001         mov        r1, #1        ; 0x1
b000407c:        e51b3008         ldr        r3, [fp, #-8]
b0004080:        e1a03311         lsl        r3, r1, r3
b0004084:        e1e03003         mvn        r3, r3
b0004088:        e5823000         str        r3, [r2]
b000408c:        e51b3008         ldr        r3, [fp, #-8]
b0004090:        e2833001         add        r3, r3, #1        ; 0x1
b0004094:        e50b3008         str        r3, [fp, #-8]
b0004098:        e51b3008         ldr        r3, [fp, #-8]
b000409c:        e3530007         cmp        r3, #7        ; 0x7
b00040a0:        1affffef         bne        b0004064
b00040a4:        e3a03004         mov        r3, #4        ; 0x4
b00040a8:        e50b3008         str        r3, [fp, #-8]
b00040ac:        eaffffec         b        b0004064
b00040b0:        43434700         movtmi        r4, #14080        ; 0x3700
b00040b4:        5328203a         teqpl        r8, #58        ; 0x3a
b00040b8:        6372756f         cmnvs        r2, #465567744        ; 0x1bc00000
b00040bc:        20797265         r***scs        r7, r9, r5, ror #4
b00040c0:        202b2b47         eorcs        r2, fp, r7, asr #22
b00040c4:        6574694c         ldrbvs        r6, [r4, #-2380]!
b00040c8:        30303220         eorscc        r3, r0, r0, lsr #4
b00040cc:        2d337138         ldfcss        f7, [r3, #-224]!
b00040d0:        20293237         eorcs        r3, r9, r7, lsr r2
b00040d4:        2e332e34         mrccs        14, 1, r2, cr3, cr4, {1}
b00040d8:        27410032         smlaldxcs        r0, r1, r2, r0
b00040dc:        61000000         tstvs        r0, r0
b00040e0:        69626165         stmdbvs        r2!, {r0, r2, r5, r6, r8, sp, lr}^
b00040e4:        001d0100         andseq        r0, sp, r0, lsl #2
b00040e8:        34050000         strcc        r0, [r5]
b00040ec:        02060054         andeq        r0, r6, #84        ; 0x54
b00040f0:        04120108         ldreq        r0, [r2], #-264
b00040f4:        01150114         tsteq        r5, r4, lsl r1
b00040f8:        01180317         tsteq        r8, r7, lsl r3
b00040fc:        021a0119         andseq        r0, sl, #1073741830        ; 0x40000006
b0004100:        0000061e         andeq        r0, r0, lr, lsl r6
举报

更多回帖

发帖
×
20
完善资料,
赚取积分