本文所说的精简的Linux系统主要由内核,busybox,以及引导程序构成

一、基础概念

几种linux内核文件的区别:

1、vmlinux和vmlinuz
vmlinux是编译出来的最原始的内核文件,未压缩。vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。

2、zImage
zImage是vmlinux经过gzip压缩后的文件。zImage是linux一种常见的压缩镜像文件,文件大小小于512KB

3、bzImage
bz表示“bigzImage”,不是用bzip2压缩的。bzImage中的bz容易引起误解,bz表示“big zImage”。 zImage和bzImage都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip解压缩代码。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。高端内存与低端内存介绍
如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。

4、uImage为Uboot专用的镜像文件,在zImage前加上一个长度为0x40的信息头,说明镜像的类型、位置、生成时间及大小等。其实就是一个自动跟手动的区别,有了uImage头部的描述,u-boot就知道对应Image的信息,如果没有头部则需要自己手动去搞那些参数。

通常情况下,将U-BOOT 、内核及文件系统都通过TFTP下载到SDRAM中,然后再烧写到NAND FLASH中,因为SDRAM是掉电易失的。下载地址通过数据手册查询SDRAM的起始地址,然后固化。SDRAM类似于内存,NAND FLASH相当于硬盘。烧写固化后设置U-BOOT从NAND FLASH中启动。

二、开发环境

环境:ubuntu16.04虚拟机
裁剪的内核版本:Linux-4.4.2 下载地址:
http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/
编译器版本:gcc-5.3.1
busybox版本:busybox-1.24.2 下载地址: http://www.busybox.net/downloads/
BIOS引导工具:syslinux-6.03 下载链接:https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/

三、裁剪步骤

首先需要安装 apt-get install libncurses5-dev

否则无法配置内核 make menuconfig

参考该博客

四、基本效果

注意:目前我们挂载的根文件系统是临时的文件系统initramfs文件系统,内核中一定要选上以下配置:
在这里插入图片描述

在这里插入图片描述
内核启动成功,挂载文件系统成功:
在这里插入图片描述

五、添加网络功能

刚做出来的最小Linux系统目前是没有网络功能的,需要在内核中添加相关网络驱动,内核中大部分驱动都有,只不过默认是编译成模块,需要我们手动选择直接编译进内核即可。注意要选择和自己电脑相匹配的网卡驱动。

以下为步骤:
make menuconfig

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以选择Intel或者Realtek的网卡驱动

在这里插入图片描述
在这里插入图片描述
配置完内核后,重新编译bzImage,制作ISO镜像即可
以下是添加网络后的内核启动成功:
在这里插入图片描述
ifconfig -a 查看网卡,这时已经识别出了电脑的网卡,eth0,再配置一下IP地址即可。

在这里插入图片描述

在这里插入图片描述
配置完IP后,ping 一下宿主机,已经是通的了。

在这里插入图片描述
USB也可以识别到,因为内核中已经添加了对USB的支持。
以下为插入U盘,拔出U盘的现象:

在这里插入图片描述

备注: 由于是在虚拟机中使用,所以在加载ISO镜像创建新虚拟机的时候网络需要选择桥接。

在这里插入图片描述

以上所有源码在源码链接

该资料给了我一些启发,感谢!

Logo

更多推荐