易截截图软件、单文件、免安装、纯绿色、仅160KB

为linux内核构建最小的根文件系统 一步一步精简

linux内核init进程函数的部分代码如下: 01 if (execute_command)
02 run_init_process(execute_command);
03
04 run_init_process("/sbin/init");
05 run_init_process("/etc/init");
06 run_init_process("/bin/init");
07 run_init_process("/bin/sh");
08
09 panic("No init found.  Try passing init= option to kernel.");
10 }
代码中我们看出,linux内核在初始化的最末段,也就是挂载了跟文件系统之后,开始了与根文件系统,也就是用户应用的沟通,我们看到:内核分别尝试了/sbin/init, /etc/init, /bin/init, /bin/sh四个应用的执行,由此可以想到,只要我们准备相应的应用,并且只要满足其中之一,就可以启动系统了,如果任何的一个都没有满足,那么久会出现很经典的内核panic:No init found.  Try passing init= option to kernel. 在此,我们利用现有分析,构建一个可以说是很小的根文件系统,busybox是针对嵌入式开发需求,集各种unix工具于一身的很小很强大的工具集。busybox的编译过程不再赘述,现假设busybox编译后已经生成如下文件夹:  bin  linuxrc  sbin  usr
其中,linuxrc为程序,bin、sbin、usr为文件夹,其实三个文件夹内绝大部分是程序,并且是指向bin/busybox的链接,也就是所有的命令均由bin/busybox执行 我们看到,内核初始化最后一次尝试的bin/sh, 猜想上来sh并不会跟其它的程序产生关联,所以干脆删除sbin和usr再说,同时linuxrc似乎也不是必须,最多内核报告错误,并不会产生panic,所以精简后,根目录如下(有点裸了:)):  bin
呵呵,现在想,估计是启动不起来的,为什么呢?起码sh程序或者说busybox要依赖一些动态库,当然可以编译选择静态编译了,那么似乎连什么库都不要,但是我们这里说的最小,并不是文件最少,而是最必须的意思,同时默认busybox编译,采用动态库,所以无论怎么说,lib库是最小根文件系统必须的。所以,添加lib目录,其中的动态库文件来自交叉编译器的lib目录。现在的最小根文件系统如下:  bin lib
这时候,先别急,我们发现bin目录下,仍然有很多文件,当然也是链向bin/busybox的链接,也就是说,有没有他们没什么关系,那么如果删除他们也没什么影响咯,开始精简bin目录,精简后目录如下:  


相关文档:

实战Linux Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

Windows Socket I/O模型 以及 Linux Epoll模型

本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。
一:select模型
二:WSAAsyncSelect模型
三:WSAEventSelect模型
四:Overlapped I/O 事件通知模型
五:Overlapped I/O 完成例程模型
六:IOCP模型
老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件 ......

Linux 内核启动分析(转)

Linux 内核启动分析(转)
Linux 内核启动分析
1.       内核启动地址
1.1.   名词解释
ZTEXTADDR
解压代码运行的开始地址。没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。
Start address of ......

linux下多线程 之 pthread_detach(pthread_self())

正式实习一周,有点感触。本来就没指望能成为什么技术大牛,用自己调侃的话来说就是“混口饭吃”。不过老大对me的期望值那么高,经理管得这么严,压力颇大。对自己挺失望,没能开好头,有点对不起这么成功的老大。还好没准备做什么大事,要不然这性格得费多大力气才能重塑。。。
都是逼出来的,被经理训后,一天 ......

firefox 简单 插件编译 【linux】

#ifdef XP_UNIX
/*
* Set up the plugin function table that Netscape will use to
* call us. Netscape needs to know about our version and size
* and have a UniversalProcPointer for every function we
* implement.
*/
pluginFuncs->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号