tiny linux
tiny_linux要求实现以下两点:
精简linux内核镜像,要求在支持TCP/IP数据传输的情况下,内核镜像和正常运行所需内存能够做到尽可能的小。
采用busybox制作根文件系统,利用kernel mode linux补丁,使得busybox运行在内核态。
欢迎访问tiny_linux, 这里有编译好的内核镜像,根文件系统镜像以及相关脚本,供大家使用。
涉及知识点
- qemu使用
- linux内核配置,编译
- 根文件系统制作
在这里记录了我完成该项目的过程,希望对大家有用。
ps:
1. 关于根文件的制作部分,对当初小白的我,非常感谢杨海宇同学的付出,让自己能够快速入门。
2. 内核源码Documentation
目录下有关于linux权威的文档,里面也有关于initrd
,init
的介绍,可以先读读这两个文档,个人感觉很不错。
成果
平台 : X86_64
linux: 4.0.4
优化前: bzImage=6.5M 内存=*M
优化后: bzImage=726K 内存=21.6M
目录
Section 1:linux内核镜像文件
背景: Linux内核的启动过程
Linux内核本身的启动又分为压缩内核和非压缩两种。从Linux内核程序的结构上,具有如下的特点:
压缩内核 = 解压缩程序 + 压缩后的内核映像
当压缩内核运行后,将运行一段解压缩程序,得到真正的内核映像,然后跳转到内核映像运行。此时,Linux进入非压缩内核的入口,在非压缩的内核入口中,系统完成各种初始化任务后,跳转到C语言的入口处运行。
这一步主要是通过编译linux内核,获取linux的压缩内核镜像bzImage
下载linux内核代码
mkdir tiny_linux cd tiny_linux curl https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.4.tar.xz | tar xJf -
编译linux内核
在内核代码根目录的Makefile当中,可以发现有如下文字描述:
背景:Makefile Line 98
# kbuild supports saving output files in a separate directory.
# To locate output files in a separate directory two syntaxes are supported.
# In both cases the working directory must be the root of the kernel src.
# 1) O=
# Use “make O=dir/to/store/output/files/”
利用make O=
命令,可以使输出文件与源代码文件分离,这样使得我们能够建立不同的输出文件,每个独立的输出文件都可以有自己的专属配置,这个在后期精简config的过程当中,特别有用。
cd tiny_linux
mkdir obj
cd linux-4.0.4
make O=../obj/linux_0 x86_64_defconfig
背景:内核默认配置文件
内核为很多平台附带了默认配置文件,保存在arch//configs目录下,其中对应具体的架构,如x86、arm或者mips等。比如,对于x86架构,内核分别提供了32位和64位的配置文件,即i386_defconfig和x86_64_defconfig;对于arm架构,内核提供了如NVIDA的Tegra平台的默认配置tegra_defconfig,Samsung的S5PV210平台的默认配置s5pv210_defconfig等。
在linux_0
目录下,执行make menucon