linux内存相关情况

Linux内核是如何知道物理内存大小的?

在嵌入式系统中物理内存的实际大小是由bootloader传递给内核的,bootloader传递给内核的内存大小值是由开发人员根据内存的实际大小配置的,有改动就需要重新编译,而且并不是所有的物理内存内核都能用,有相当一部分内存会留给私有模块(像camera、gpu等),这些内存内核自身访问不到。

uboot相关的linux内存配置:

(E)early_mem

该函数用于处理bootargs中的"mem=size@start".参数

如果没有定义mem起始地址, 使用PHYS_OFFSET ,这个参数是由具体的开发板定义的,在611中,在arch\unicore\mach-sep0611\include\mach\memory.h中定义的。

#definePHYS_OFFSET       UL(0x40000000)

通过unicore_add_memory(start, size);函数将一段连续的内存空间添加到struct meminfo meminfo中去。对于ramdisk的处理也比较简单,在此不详解了。

(F)paging_init(\arch\unicore-linux\mm\mmu.c)这个函数比较大,下面分布介绍(关于内存的启动部分,推荐去看一个网友的博客http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=72836)。

(1)sanity_check_meminfo用于检测内存的虚拟地址(线性映射)是否超过了VMALLOC_MIN的地址(如果内存太大,可能会这样)。如果内存太大的话,那么就重新计算内存的可用大小。显然这时候一部分内存就不可以使用了或者一分为二(一部分给系统正常使用,一部分划给highmem)。内核为VMALLOC和initrd保留了128M的空间,那么内核可使用的最大空间只有1G-128M=896M。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值