tiny linux: 内核精简的根文件系统制作

tiny linux

tiny_linux要求实现以下两点:

  1. 精简linux内核镜像,要求在支持TCP/IP数据传输的情况下,内核镜像和正常运行所需内存能够做到尽可能的小。

  2. 采用busybox制作根文件系统,利用kernel mode linux补丁,使得busybox运行在内核态。

欢迎访问tiny_linux, 这里有编译好的内核镜像,根文件系统镜像以及相关脚本,供大家使用。

涉及知识点

  • qemu使用
  • linux内核配置,编译
  • 根文件系统制作

在这里记录了我完成该项目的过程,希望对大家有用。

ps:

1. 关于根文件的制作部分,对当初小白的我,非常感谢杨海宇同学的付出,让自己能够快速入门。

2. 内核源码Documentation目录下有关于linux权威的文档,里面也有关于initrdinit的介绍,可以先读读这两个文档,个人感觉很不错。

成果

平台 :  X86_64
linux:   4.0.4
优化前: bzImage=6.5M 内存=*M
优化后: bzImage=726K 内存=21.6M

目录

  • Section 1:linux内核镜像文件
  • Section 2:根文件系统镜像文件
    • 构建busybox
    • 根文件系统制作
    • 网络配置及测试
      • 百度网站测试
      • 本机搭建网站测试
  • Section 3:精简bzImage
    • 编译选项优化
    • 替换压缩方式
    • 步步精简config
    • 最小配置
  • Section 4:Kernel Mode Linux
    • KML Patch
    • 内核态运行busybox
    • 内核态运行测试
      • time测试
      • 截取寄存器值
  • 参考资料

Section 1:linux内核镜像文件

背景: Linux内核的启动过程

Linux内核本身的启动又分为压缩内核和非压缩两种。从Linux内核程序的结构上,具有如下的特点:
压缩内核 = 解压缩程序 + 压缩后的内核映像
当压缩内核运行后,将运行一段解压缩程序,得到真正的内核映像,然后跳转到内核映像运行。此时,Linux进入非压缩内核的入口,在非压缩的内核入口中,系统完成各种初始化任务后,跳转到C语言的入口处运行。

这一步主要是通过编译linux内核,获取linux的压缩内核镜像bzImage

  1. 下载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 -
    
  2. 编译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

你可能感兴趣的:(一一『,操作系统,』,tiny,linux,qemu,busybox,根文件系统)