Linux on floppy的尝试
这一段时间一直进行Linux on floppy的尝试,借此希望能对如何构造一个Linux发行版本、Linux的启动、Linux系统的裁剪有一个深刻的认识。
在进行中,我有一些自己的心得体会,尤其是如何构造一个较小的Linux系统。这里贴出其中的一部分,希望能与各位共同分享。有不对的地方,也望各位高手能不吝赐教。
构造Linux on floppy系统的过程中,一个必须得面对的问题是如何减小内核和各种应用的大小,使他们即可以存放在有限的空间中(通常是1.44M的磁盘),又可以完成预定的功能。通常有以下几种做法:
1.裁剪内核,在进行内核配置时去除一些用不到的模块,尽量降低内核的大小
我所编译的内核只包括了一些必要的内核功能、网卡的驱动、TCP/IP的实现、Netfilter、PPP/PPPoE。内核的大小为700911。由于内核中一些核心的功能不可能去除,所以裁剪后的内核至少也要400k左右。
2.使用专门为嵌入式系统设计的应用,如TinyLogin、Busybox
Linux系统上总要跑一些应用程序,当然我们可以把桌面Linux系统上的应用搬移到Linux on floppy上,但是由于这些应用功能较强或没有严格的进行代码优化,通常要占用较大的空间。所以很可能几个小应用就把我们有限的磁盘空间就给占满了。解决办法是,使用专门为嵌入式应用所设计的程序,这里强烈推荐busybox。Busybox把100多种常见的应用都集中到一个程序中来,大大节省了磁盘空间。而且,busybox还可以根据需要配置提供哪些应用,从而可以进行进一步的调节。我所使用的busybox中,选用了80多种应用,采用静态连接方式大小为679048,采用动态连接方式的大小为154316
3.剔除应用程序中的一些调试符号信息和其他的一些无用信息
在编译程序的时候,有时为了方便调试,生成的最后代码中包括了一些调试信息( gcc -g ... ), 除此之外,编译链接中的重加载过程也会在目标代码中加入一些与实际运行无关的信息,通过file命令可以查看目标代码是否包括这些信息,下面是程序openvt的信息:
# file openvt
openvt: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped
注意“not stripped”,说明openvt中包含这些无用信息。这些信息无疑是对我们宝贵的磁盘空间的浪费。通过"strip -s ..."或
“objcopy --strip-all ...”可以去除这些信息。
#objcopy --strip-all openvt openvt-new
strip之前,openvt的大小为25716,strip之后openvt的
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
Cannot set serial info: Invalid argument
上面的报错,经过分析setserial源码与kernel 8250 driver,发现setserial通过ioctl(TIOCSSERIAL)将new_serial结构体(承载了
serial info)传入内核,内核8250驱动程序接到serial info后先get旧的serial info,再set新传入的serial info。
因此联 ......
linux下vi编辑器命令
文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi,而vi命令繁多,论坛里好像这方面的总结不多,以下稍做总结,以资共享!渴望更正和补充!
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filena ......
Linux的裁剪
=======================================
好些时候,我们需要一个只要一张软盘就能启动Linux 的系统,比如说做路由器。但是我们该怎样做呢? 也就是说我们要把Kernel和FileSystem都做在一张3.5'的盘上。我们先把FileSystem 分解成如下几个部分吧。
1. /bin目录下的文件
bin目录通 ......