官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 901|回复: 5

[已解决] 关于linux内存分配的问题

[复制链接]

5

主题

8

帖子

45

积分

新手上路

Rank: 1

积分
45
发表于 2016-12-26 17:07:08 | 显示全部楼层 |阅读模式
我的开发板内存的实际大小是64M,uboot加载内核也传入参数了。如下调试信息## Booting kernel from Legacy Image at 42200000 ...
   Image Name:   Linux-3.4.39
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    6604016 Bytes = 6.3 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK
[      3.047][mmc]: MMC Device 2 not found
[      3.051][mmc]:  mmc  not find,so not exit
reload config to 0x43000000
[      3.055]
Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0
[    0.000000] Linux version 3.4.39 (root@wy-favorite) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #438 Mon Dec 26 14:15:04 CST 2016
[    0.000000] Ignoring unrecognised tag 0x00000000
[    0.000000] Initialized persistent memory from 41d20800-41d307ff
[    0.000000] Kernel command line: console=ttyS0,115200
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Memory: 64MB = 64MB total
[    0.000000] Memory: 16656k/16656k available, 48880k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xc4800000 - 0xff000000   ( 936 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0489000   (4612 kB)
[    0.000000]       .init : 0xc0489000 - 0xc0c0b000   (7688 kB)
[    0.000000]       .data : 0xc0c0c000 - 0xc0c4f800   ( 270 kB)
[    0.000000]        .bss : 0xc0c4f824 - 0xc0ce8f0c
但是我查看cat /proc/meminfo却只看到内存总大小为   

MemTotal:          24344 kB

只有这么大,请问有什么情况会造成实际物理内存和系统中内存的总大小差这么多。
回复

使用道具 举报

5

主题

8

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2016-12-26 17:08:50 | 显示全部楼层
[    0.000000] Memory: 16656k/16656k available, 48880k reserved, 0K highmem
这一条语句是怎么分配的,请教。
回复 支持 反对

使用道具 举报

5

主题

8

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2016-12-26 17:30:46 | 显示全部楼层
请问这个meminfo的内存总大小是怎么计算出来的?我目前把根文件系统也编译进内核,系统直接在内存下建立根文件系统,这个会影响meminfo的内存总大小吗?
回复 支持 反对

使用道具 举报

56

主题

5186

帖子

7811

积分

超级版主

Rank: 8Rank: 8

积分
7811
QQ
发表于 2016-12-28 00:20:42 | 显示全部楼层
你的UBOOT没有给内核传入内存信息,内核默认内存是16M。
想知道怎么传,看一下对UBOOT的分析:第1期,或第2期里毕业班视频,里面讲有MEM TAG
thisway.diy
回复 支持 反对

使用道具 举报

5

主题

8

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2016-12-28 21:11:55 | 显示全部楼层
不是的,有传入正确的起始地址和大小,关键是这个48880k reserved,调试信息里面的,我不知道这个怎么来的
回复 支持 反对

使用道具 举报

56

主题

5186

帖子

7811

积分

超级版主

Rank: 8Rank: 8

积分
7811
QQ
发表于 2016-12-29 00:43:36 | 显示全部楼层
没有深入分析过内存,不过:
16656k available, 48880k reserved,加起来刚好是64M左右。

从内核include\linux\page-flags.h中,可以看到:
* PG_reserved is set for special pages, which can never be swapped out. Some
* of them might not even exist (eg empty_bad_page)...
可以认为,reserved是暂时没有用到的,不会被swap的内存。(swap: 缺内存时,会把内存的数据写入硬盘,以便释放内存)。
从字面上理解,就是没有到的、保留的内存。

以下文件抄自:http://blog.csdn.net/adaptiver/article/details/6889652
在ULK第八章里有描述:
PG_reserved:The page frame is reserved for kernel code or is unusable.页框留给内核代码或者没有使用。
thisway.diy
回复 支持 反对

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2020-2-29 19:49 , Processed in 0.068899 second(s), 11 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表