返回列表 发帖

[站长原创] 内核尺寸优化之-了解Linux内核的空间占用

[站长原创] 内核尺寸优化之-了解Linux内核的空间占用

内核尺寸优化之-测量Linux内核的空间占用

嵌入式开发联盟www.mcuos.com

Osboy站长原创

QQ:82475491

Mcuos.com@gmail.com

(一)程序的组成

一个程序一般分为3:text,data,bss

text:就是放程序代码的,编译时确定,只读,

data:存放在编译阶段(而非运行时)就能确定的数据,可读可写

就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常量也存放在这个区域。

bss:定义而没有赋初值的全局变量和静态变量,放在这个区域


(二)了解linux内核的空间占用

根据程序的组成,我们来看下面的内核文件的组成:

为初始化的数据段:BSS

已初始化的数据段:data

内核代码段文本段:text

是不是对内核的空间布置一目了然呢?




拿内核的压缩文件镜像zImage来说,假设它有2M字节大小:


(1)把它存储在flash或者sd中,那么它就占用2M字节的空间

(2)当拷贝到内存中还未运行的时候,通常的空间占用就是zImage解压缩后的空间,这个时候内核的文本段.text.数据段.data,还有BSS段都会被拷贝到内存中去。这个时候占用的ram空间也应该是3M空间。

(3)当拷贝到内存中开始运行的运行的时候,内核的init段会全部释放内存空间,一般来说
text BSS段是不变的在内核的执行过程中,但是数据堆栈段是随着linux系统的需求不断增长的。所以通过静态的分析zImage或者Image占用的flash空间的大小很难确定内核在拷贝到ram中的占用的空间。但是我们可以根据上图计算出linux内核需要的最小内存空间。从上图看出:

代码段占用内存空间:0xc01c2000 - 0xc0021000 = 1.63M字节空间

Data段占用内存空间:0xc01e4600 - 0xc01d2000 = 74k字节空间

Bss段占用内存空间:0xc021236c - 0xc01e4600 = 183k字节空间

Bootloader使用的预留空间,还会有内核页表空间也有32k

所以2M大小的内核文件,当动态运行时候,该Linux内核需要的最小ram空间为:1.91M.

但是很难达到这个理想的值,因为内核在运行的时候系统的堆栈就会增大,从而肯定大于上面的这个值。

(三)测量linux内核的空间占用

1)使用size命令


2)测量内核中的built-in.o,我们知道所有的子系统的built-in.o组成了内核的image文件

使用命令:

find . -name "built-in.o" | xargs size | sort -n -r -k 4 查看:

3713540           0          0    3713540  38aa04   ./usr/built-in.o

979639       24508     17992   1022139    f98bb    ./net/built-in.o

628432       25556   358036   1012024    f7138    ./kernel/built-in.o

783727        5964     35064   824755     c95b3   ./fs/built-in.o

440864       23732      7936   472532     735d4   ./drivers/built-in.o

332353       11872      4716   348941     5530d   ./net/ipv4/built-in.o

292208       14757     14216   321181     4e69d   ./mm/built-in.o

123360        5424   147430   276214     436f6    ./kernel/trace/built-in.o

165226       35240        64    200530     30f52    ./crypto/built-in.o

188390        4616      2413   195419     2fb5b    ./net/core/built-in.o

151613       14568      3436   169617     29691   ./drivers/tty/built-in.o

150775        5620       608    157003     2654b   ./drivers/scsi/built-in.o

152448         404         84    152936     25568   ./net/mac80211/built-in.o

136683        2708       224    139615     2215f    ./net/wireless/built-in.o

134497         236        256    134989     20f4d    ./fs/nls/built-in.o

125488           0          0    125488     1ea30   ./firmware/built-in.o

117695         3888      1356   122939     1e03b   ./block/built-in.o

101336          52         12    101400     18c18   ./fs/ext3/built-in.o

  65921        12416      2932     81269     13d75   ./drivers/tty/vt/built-in.o

  27491         2572     49664     79727     1376f    ./kernel/time/built-in.o

  70300         4964       264      75528     12708   ./arch/arm/kernel/built-in.o

  72510          352         12      72874     11caa    ./lib/built-in.o

  65373          208         40      65621     10055   ./fs/proc/built-in.o

  56169         1048        64      57281      dfc1     ./drivers/base/built-in.o

  56537          184         28      56749      ddad   ./fs/fat/built-in.o

  46668         1000       372     48040      bba8   ./net/xfrm/built-in.o

  47019          676        132      47827      bad3   ./kernel/events/built-in.o

   4796           52      32848     37696      9340   ./fs/cramfs/built-in.o

  36728          664        300      37692      933c    ./security/built-in.o

  34934         1664       168      36766      8f9e     ./arch/arm/mm/built-in.o

  34280           28         20      34328      8618   ./fs/jbd/built-in.o

  24693          508       8404     33605      8345   ./net/can/built-in.o

  29491          656        292      30439      76e7   ./security/keys/built-in.o

  28638          656        176      29470      731e   ./drivers/input/built-in.o

  26392          636          8      27036      699c    ./ipc/built-in.o

  22337          376       2136     24849      6111    ./kernel/irq/built-in.o

  22906         1144         52      24102      5e26   ./drivers/tty/serial/built-in.o

  20104         3456       152      23712      5ca0    ./init/built-in.o

  22656          432        140      23228      5abc    ./net/netlink/built-in.o

  19923          372         36      20331      4f6b     ./fs/sysfs/built-in.o

  15443         2716      2144     20303      4f4f      ./arch/arm/plat-samsung/built-in.o

  18132          340       1040     19512      4c38    ./net/unix/built-in.o

  10372         7872        20      18264      4758   ./arch/arm/mach-s3c64xx/built-in.o

  16908          240          0      17148      42fc     ./net/packet/built-in.o

  16047          248         48      16343      3fd7     ./fs/notify/built-in.o

  14280          320         24      14624      3920   ./drivers/block/built-in.o

  13803            0          0      13803      35eb   ./lib/zlib_inflate/built-in.o

  11441          780        940      13161      3369   ./drivers/char/built-in.o

  12723           36          0      12759      31d7   ./lib/xz/built-in.o

  12112          392          8      12512      30e0   ./drivers/net/built-in.o

   8705          300       2644     11649      2d81   ./drivers/gpio/built-in.o

  10720          236          8      10964      2ad4   ./drivers/net/can/built-in.o

   8521         1188        552      10261      2815   ./net/netfilter/built-in.o

   9889           48         16       9953      26e1   ./fs/debugfs/built-in.o

   8040          632          2       8674      21e2   ./net/sched/built-in.o

   7632          228          0       7860      1eb4   ./fs/partitions/built-in.o

   5124          168         12       5304      14b8   ./fs/notify/inotify/built-in.o

   5000           24         36       5060      13c4    ./drivers/connector/built-in.o

   3682           60          8       3750       ea6    ./net/dns_resolver/built-in.o

   2468           48          4       2520       9d8    ./fs/devpts/built-in.o

   2120          320          0       2440       988    ./fs/ramfs/built-in.o

   2188           12          0       2200       898    ./net/ethernet/built-in.o

   1760           52          0       1812       714    ./fs/notify/dnotify/built-in.o

   1770            0          0       1770       6ea    ./lib/lzo/built-in.o

   1564            0          0       1564       61c    ./drivers/rtc/built-in.o

    968           92          0       1060       424    ./arch/arm/common/built-in.o

    815            0          0        815        32f     ./net/ipv6/built-in.o

    567           16          0        583        247    ./drivers/video/built-in.o

    568            0          0        568        238    ./drivers/base/power/built-in.o

    308            0          0        308        134    ./drivers/video/console/built-in.o

   text            data         bss        dec        hex    filename

      0             0          0          0          0    ./drivers/video/omap2/built-in.o

      0             0          0          0          0    ./drivers/misc/built-in.o

      0             0          0          0          0    ./drivers/media/video/built-in.o

      0             0          0          0          0    ./drivers/media/rc/built-in.o

      0             0          0          0          0    ./drivers/media/common/built-in.o

      0             0          0          0          0    ./drivers/media/built-in.o

      0             0          0          0          0    ./drivers/i2c/built-in.o

      0             0          0          0          0    ./drivers/gpu/drm/built-in.o

      0             0          0          0          0    ./drivers/gpu/built-in.o

附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服