linux c语言 rm,Linux rm 启动 c语言部分详解第二讲(Start kernel-- setup_a.doc

[原创]Linux arm 启动 c语言部分详解第二讲(Start kernel-> setup_a

Written by leeming

这一讲是主要讲setup_arch中那个没有解释的函数解释完毕,完成setup_arch的函数,好让我们的start_kernel继续下去。

/*

* paging_init() sets up the page tables, initialises the zone memory

* maps, and sets up the zero page, bad page and bad page tables.

*这部分的主要工作建立页表,初始化内存。

*/

void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc)

{

       void *zero_page;

//这个函数主要是用来建立各种类型的页表选项(比如内存是MEMORY类型,设备室DEVICE,中断向量表是HIGH_VECTORS)

       build_mem_type_table();

{

       struct cachepolicy *cp;

       //获取cp15处理器的c1寄存器位

       unsigned int cr = get_cr();

       unsigned int user_pgprot, kern_pgprot;

       //获取处理器架构版本

       int cpu_arch = cpu_architecture();

       int i;

       //根据处理器版本号调整cache政策,不是写缓冲区的政策

#if defined(CONFIG_CPU_DCACHE_DISABLE)

       if (cachepolicy > CPOLICY_BUFFERED)

              cachepolicy = CPOLICY_BUFFERED;

#elif defined(CONFIG_CPU_DCACHE_WRITETHROUGH)

       if (cachepolicy > CPOLICY_WRITETHROUGH)

              cachepolicy = CPOLICY_WRITETHROUGH;

#endif

       if (cpu_arch

              if (cachepolicy >= CPOLICY_WRITEALLOC)

                     cachepolicy = CPOLICY_WRITEBACK;

              ecc_mask = 0;//因为v5前的处理器的一级描述符没有定义第9位作为保护标志位

       }

       if (cpu_arch

              //mem_types是一个全局数组arch/arm/mm-armv.c,里面有所有类型

             &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值