S3C6410之uboot回炉再造(4)使能MMU

发布时间:2024-09-02  

在上一篇中讲完了lowlevel_init中对相应模式的设置、在最后对MMU进行了初始化。


那在这一篇就把使能MMU的过程描述了。

 

1、设置访问域


 1 after_copy:            //这里怎么就after了、我们可还没有copy呢

                    //剧透一下,后面会补充copy相关的代码,此处暂且跳过

 2 #ifdef CONFIG_ENABLE_MMU    //

 3 enable_mmu:

 4     /* enable domain access */

 5     ldr    r5, =0x0000ffff

 6     mcr    p15, 0, r5, c3, c0, 0    /* load domain access register */

        //又是协处理器、查表知:寄存器为 Domain Access Control Register

 7       //查位设置知道:此处将 D7 ~ D0 的位设置成允许管理,不再询问权限


2、设置TTB寄存器()


 8     /* Set the TTB register */

 9     ldr    r0, _mmu_table_base        //稍后解析

10     ldr    r1, =CONFIG_SYS_PHY_UBOOT_BASE  //第一篇已叙述,0x57e0_0000

11     ldr    r2, =0xfff00000           

12     bic    r0, r0, r2             //清楚段首偏移

13     orr    r1, r0, r1             //包含 r1 的段首偏移和 r0 的段内偏移

14     mcr    p15, 0, r1, c2, c0, 0       //查协处理器表

        //Translation Table Base 转换表的基址

15 


这里的 _mmu_table_base 最终定义为


#ifdef CONFIG_ENABLE_MMU

_mmu_table_base:

    .word mmu_table

#endif

  mmu_table 就是我们在 lowlevel_init 中最后介绍的制表代码的头。


3、使能MMU的准备工作


16     /* Enable the MMU */

17     mrc    p15, 0, r0, c1, c0, 0  //Control Register

                 //见上一节、此时 r0 最低位为 0

18     orr    r0, r0, #1        /* Set CR_M to enable MMU */

                       //将 r0 最低位置 1

19 

20     /* Prepare to enable the MMU */

21     adr    r1, skip_hw_init     //小范围地址取值

22     and    r1, r1, #0x3fc      //保留段内偏移

23     ldr    r2, _TEXT_BASE      //保留代码段偏移

24     ldr    r3, =0xfff00000     

25     and    r2, r2, r3        //保留段首偏移

26     orr    r2, r2, r1        //r2 取到相应段内 skip_hw_init 偏移地址

27     b    mmu_enable         //就在下面

28 


4、使能MMU(ps:不要被上一段的英文注释迷惑了)


29     .align 5

30     /* Run in a single cache-line */

31 mmu_enable:

32            //r0 只需要知道最低位为 1 就好

33     mcr    p15, 0, r0, c1, c0, 0

                      //协处理器、查表

            //在下面贴出相应寄存器的最低位

34     nop

35     nop

36     mov    pc, r2  //跳转到 skip_hw_init 的位置

        //个人感觉不要也没有什么问题,和之前的 mmu_disable 差不多的方法

37 #endif


寄存器最低位控制信息


[0]    M bit  Banked    Enables the MMU.

               0 = MMU disabled, reset value.

               1 = MMU enabled.

  此时、MMU才真正使能了。


  在此处小回顾一下,之前的 NAND FLASH 和这里的 MMU 都是由协处理器使能的。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    现在均不可用,电量管理也没有优化。不过,数据网络、指纹、蓝牙、NFC、GPS倒是没有问题, Play商店也能正常安装。 如果你对一加官方的氢OS、氧OS或者其他民间刷机包不感兴趣的话,不妨尝鲜了Android......
    7.0版MIUI 8了,今天晚上小米官方已经正式放出了内测刷机包。 本次放出的刷机包有卡刷包和线刷包两个,不过发布后不久卡刷包就被发现了问题,所以被紧急撤回,只剩下了线刷包。 由于是内测阶段,所以......
    官方宣布,本周五将在MIUI论坛首发小米5S、小米5S Plus的MIUI 8开发版刷机包,支持这两款手机使用小米支付银行卡功能。 公交卡功能则会在本月底提供支持。 目前,只有小米5全面......
    卓7.0刷机包,基于CM14官方测试版本的源代码。 该网友还放出了多张系统截图,但没有公布加入了哪些新特性。 当然,这种尝鲜包只适合非主力机体验,大量Bug不可避免,尤其是可能无法开机,不过......
    到开发板,启动开发板,插入u,挂载u,查看u盘内容,没有乱码了: ......
    199元!金士顿鸡年限量生肖U盘上市:镂空分体设计;每年岁末,金士顿(Kingston)都会推出相关生肖U,今年也不例外,推出了鸡年纪念版U。 这款U盘采用金属材质、金鸡为雷雕镂空设计,可与U......
    得巨大成就的同时,仍不断挑战自我,勇于向上攀登,致力于为更多国民打造品质好物,截止至2023年8月1日,23年来aigo已合计成功销售出566万台U,位列国产份额第一! The Walker行者系列,全新......
    点间的连线可能造成波形阶梯状显示。按 Display 显示类型,设置为“点”显示方式,即可解决。 5. U盘不能被识别 (1) 检查 U 盘是否可以正常工作。 (2) 确认使用的为 FAT32 格式的 Flash 型 U ......
    的 Flash 型 U ,本仪器不支持硬盘型 U。 (3) 确认使用的 U 盘容量是否过大,本示波器推荐使用不超过 8 GBytes 的 U 。 (4) 重新启动仪器后,再插入 U 盘进行检查。 6......
    是力矩电机?       力矩电机是一种具有软机械特性和宽调速范围的特种电机。 这种电机的轴不是以恒功率输出动力而是以恒力矩输出动力。 力矩电机包括:直流力矩电机、交流力矩电机、和无刷直流力矩电机。 被广......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>