首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
Google
首页 入门 Linux编程 系统管理 网络管理 Linux认证 Unix/BSD Linux数据库 Linux集群 Linux手册 Linux下载 Ubuntu 论坛 专题 RSS
您现在的位置: 中国IT实验室 >> Linux >> 系统管理 >> 系统管理 >> 正文

如何实现Linux操作系统最小化

    内核调整建议补充

    尽管Linux-tiny项目涉及到许多的方面,还有几个额外的配置改动可以减少Linux脚印。

    1、 移除ext2/3支持,使用另外一个不同的文件系统:ext2/3文件系统通常比较大,大于32K,大部分工程师启用一个Flash文件系统,但是不禁用ext2/3,这样会浪费内存。

    2、 移除对sysctl的支持,sysctl允许用户在运行时调整内核参数,在大部分嵌入式设备中,内核配置一旦定了就不需要改动了,使用这个特征会浪费1K。

    3、 减少IPC选项,大多数系统没有SysV IPC特性(grep你的msget、msgct、msgsnd和msgrcv代码)和POSIX消息查询(grep mq_*[a-z])一样可以运行,移除它们可以节约18K。

    4、 查看你改动的效果

    Size命令报告一个对象文件中所有代码和数据的大小,这与ls命令的输入是不同的,ls报告的是在文件系统中的字节数大小。

    例如,一个内核用armv51交叉编译器编译报告如下:

    # armv5l-linux-size vmlinx
    text    data     bss     dec     hex filename
    2080300   99904   99312 2279516  22c85c vmlinux

    Text小节是编译器发出的代码,data小节包括全局和其他使用初始静态符号的值,bss小节包括作为初始化的一部分被调零的静态数据。

    虽然这个数据有启迪作用,但它没有展示系统消耗的内存部分,也无法通过查询vmlinux得出,但是查看连接在一起的文件,创建vmlinux是接下来最好的事情,为了得到这个信息,使用find命令在内核项目中定位built-in.o文件并计算大小:

    # find . -name "built-in.o" | xargs armv5l-linux-size
    ?--totals | sort -n -k4
    这个命令的输出类似下面:
    text    data     bss     dec     hex filename
    189680   16224   33944  239848   3a8e8 ./kernel/built-in.o
    257872   10056    5636  273564   42c9c ./net/ipv4/built-in.o
    369396    9184   34824  413404   64edc ./fs/built-in.o
    452116   15820   11632  479568   75150 ./net/built-in.o
    484276   36744   14216  535236   82ac4 ./drivers/built-in.o
    3110478  180000  159241 3449719  34a377 (TOTALS)

    这个技术可以确切地指出占用了大量空间的代码,因此工程师可以首先移除这些代码,当这样做的时候,用户应该在创建之前执行编译清除动作,因为从内核中丢掉一个特征并不意味着那个之前编译好的对象文件将会被删除。

    对于那些新添加到Linux内核中的东西,一个常见的问题是如何在内核配置程序中使用一个选项来联合一些built-in.o文件,这可以通过查看目录下的Makefile和Kconfig文件来实现,Makefile将包括象下面这样的一行:

    obj-$(CONFIG_ATALK)     += p8022.o psnap.o

    当用户设置了配置变量CONFIG_ATALK后它将生成右手边的文件。内核配置工具一般不会暴露下属配置变量名。要查出变量名之间的连接以及什么是可见的,在Kconfig中寻找没有CONFIG_前缀的变量名。

    find . -name Kconfig -exec fgrep -H -C3 "config ATALK" {} \;

    它将产生下面这样的输出:

    ./drivers/net/appletalk/Kconfig-#
    ./drivers/net/appletalk/Kconfig-# Appletalk driver configuration
    ./drivers/net/appletalk/Kconfig-#
    ./drivers/net/appletalk/Kconfig:config ATALK
    ./drivers/net/appletalk/Kconfig-  tristate "Appletalk protocol support"
    ./drivers/net/appletalk/Kconfig-        select LLC
    ./drivers/net/appletalk/Kconfig-        ---help---

    还有一些事情需要做,因为用户需要在配置树中找到Appletalk协议支持,但是至少要清楚要查找的是什么。

上一页  [1] [2] [3] [4] 下一页

【责编:Zenghui】
中国IT教育
相关产品和培训
文章评论
 友情推荐链接
 专题推荐

 ·中国Linux内核开发者大会
 ·LDAP服务器运用专题
 ·解密SELinux安全系统设计
 ·lvm-linux逻辑磁盘卷管理专题
 ·从无到有--理解系统引导过程
 ·Fedora中文频道
 ·新手入门:虚拟机上的Linux应用攻略
 ·Linux操作系统下U盘的应用技巧
 ·Linux操作系统密码攻略
 ·使用 Nginx 提升网站访问速度
 今日更新
 认证培训
 频道精选
 Windows频道导航