我们假设题主是想为特定的平台定制一个特定的 Linux 系统。这样的工具有很多,可以参考这篇文章:/
介绍了七种制作 Linux 系统的工具:
Linux 基金会为 Rootfs 制定了规范文档:Linux FHS,社区可以基于它开发自己的实现,下面是社区的一些候选制作方法:
1. Busybox,BusyBox combines tiny versions of many common UNIX utilities into a single small executable.
2. Buildroot,a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation.
3. Openembedded,the build framework for embedded Linux.
4. Yocto,NOT AN EMBEDDED LINUX DISTRIBUTION, IT CREATES A CUSTOM ONE FOR YOU.
5. LFS,a project that provides you with step-by-step instructions for building your own custom Linux system, entirely from source code.
6. CLFS,a project that provides you with step-by-step instructions for cross building your own customized Linux system entirely from source.
7. Distributions,top 10 most popular linux distributions compared
Busybox 小巧轻灵,本身提供了常见 Unix 工具集的 tiny 实现,麻雀虽小,五脏俱全,进行微小的调整就可以制作一个随 Linux 内核启动的符合 FHS 的文件系统,特别适合入门嵌入式 Linux 开发,不需要花很多时间,就可以了解 Linux 文件系统的组织结构和启动引导过程。
Buildroot,看名字主要是制作 Rootfs,集成了 Busybox,uclibc 等大量轻量级的工具、代码库,可以用熟悉的内核配置工具来配置,用于制作面向嵌入式环境的根文件系统,所以之前就用它来制作了 Linux Lab 的 mini rootfs。它不仅提供了多种架构预先编译的交叉编译工具链,本身也可以用来制作交叉编译工具,还可以用来编译内核、Qemu 等。为什么不用 Buildroot 来制作 full rootfs 呢?最重要的是,它没有包管理,需要有一个基础的下载和编译过程,这个是有点费时间。但是,如果需要制作比较小的嵌入式系统,这个过程是值得的,首次编译以后,后面就相对比较轻松。
Openembedded,提供了更灵活的配置功能,引入了“菜谱”这样的概念,引入了专门的配置工具:Bitbake,也增加了可扩展性,但是复杂度和编译时间大大增加。相比而言,Buildroot 隐藏了这些细节。
Yocto,相比 Openembedded 在配置性和可扩展性上更进一步,甚至通过引入 BSPs,支持真实的机器和开发板,也可以通过配置加入包管理工具,所以它有能力通过大量预制的“菜谱”制作一个完整的 Linux Distribution。Yocto 和 Openembedded 之间共享 Bitbake 和 openembedded-core,它们是 Openembedded 的构建系统,Yocto 基于此做了自己的构建工具:Poky。Yocto 和 Buildroot 的更完整比较请看:Buildroot v.s. Openembedded/Yocto Project。
LFS, Linux From Scratch,从名字就可以理解,它是从头开始制作一个 Linux,manually, step-by-step,相比 Busybox,它包含了各种 normal-size 的包,本身还会制作工具链,制作代码库,Busybox 带了 tiny-size 的代码库,但是没有工具链。
CLFS,Cross LFS,这里主要体现是交叉编译,就是在一个架构上 step-by-step 完成另外一个架构的 LFS 过程。
Distributions,Linux 世界的发行版百花齐放,不同主题、不同桌面、不同领域、不同更新频次、不同包管理工具让人眼花缭乱,目前业界还在常用的有这么几种:Ubuntu、Debian、Arch Linux、CentOS、Android。Ubuntu 现在被各大企业广泛使用,每年 4 月和 10 月各发行一个版本;Debian 更新更慢,可能也更为稳定;Arch Linux 的 package 滚动更新,比较快能拿到单个软件的新版本;CentOS 基本是 Redhat 的社区版;Android 面向手机。Distributions 的好处是有预编译的工具链、工具以及 Qemu,还有各种代码库,比较适合聚焦应用开发。不过并不是所有发行版都支持多种架构,这里头 Ubuntu 和 Debian 是特例,它们都支持 ARM、PowerPC 和 S390,Debian 还支持 MIPS。除了 CD 包,Ubuntu 还提供了 Ubuntu-base (非常基础) 和 Ubuntu-core(功能更丰富) 的文件系统的压缩包,14.10 以后只提供制作好的 img,之前有纯粹的压缩包。另外,Ubuntu 和 Debian 都提供了 debootstrap 机制,允许直接拉一个 base 系统,然后在之上安装其他的 package。