当前位置: 技术问答>linux和unix
linux内核加载到哪个内存区间了?
来源: 互联网 发布时间:2017-03-22
本文导语: 从System.map里符号表看_text和_end的差只有0xaae000,也就是11MB的样子,但我编译出来的vmlinux有183MB,那内核总共占的区间应该是哪里? 0xc1000000开始的183MB么?或是不连续的?那为啥符号表又只有11MB区间? ...
从System.map里符号表看_text和_end的差只有0xaae000,也就是11MB的样子,但我编译出来的vmlinux有183MB,那内核总共占的区间应该是哪里? 0xc1000000开始的183MB么?或是不连续的?那为啥符号表又只有11MB区间?
|
vmlinux是会有一百多兆,因为包含了许多内核调试符号信息等
通过vmlinuz加载解压到内存后是不包含这些调试信息的,所以内存里内核也就十几兆
>ls -al vmlinux
-rwxr-xr-x 1 root src 181224711 2011-10-17 18:02 vmlinux
真正有效的段大小也就是a32319
>size vmlinux
text data bss dec hex filename
7857241 773824 2060288 10691353 a32319 vmlinux
通过vmlinuz加载解压到内存后是不包含这些调试信息的,所以内存里内核也就十几兆
>ls -al vmlinux
-rwxr-xr-x 1 root src 181224711 2011-10-17 18:02 vmlinux
真正有效的段大小也就是a32319
>size vmlinux
text data bss dec hex filename
7857241 773824 2060288 10691353 a32319 vmlinux
|
放到内存的不是vmlinux,是zImage。
|
内核编译默认就是压缩的,你可以查看一下kernel的README文件,
- Do a "make" to create a compressed kernel image.
你做make的时候,默认就是压缩的
|
压缩的格式一般是通过stub做zlib的压缩,所以需要booterloader来做工作,
ARM和elf格式没有直接关系,ARM也可以用zimage,只要loader做好工作,一切都不是问题。
我认为楼主使用了bzImage 的格式,并且因为链接了过多过大的自己的.o文件导致生成的kernel文件过大
所以归根结底还是配置问题,正在linux的kernel的大小,我们都知道非常小