百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

Linux文件系统制作与裁剪

yund56 2025-07-05 04:27 3 浏览

什么是操作系统?

操作系统(operation system,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

操作系统为什么要裁剪?

正常版本的Linux是一种通用的操作系统,其内核支持需要具有对硬件平台广泛的支持,所以需要支持多个功能模块;其文件系统也是一样里面安装了各种服务和软件,不仅占用系统资源,而且会影响系统对事件的响应速度和执行速度,所以需要对操作系统进行裁剪压缩,删除不必要的模块和软件。

嵌入式系统更是如此,嵌入式系统是针对具体应用开发的系统,在设计时其硬件平台和软件设计目标已经非常明确,不会轻易改动,所以可以根据软硬件的实际情况定制化内核和文件系统。

主要裁剪的是内核和文件系统。


内核裁剪的方法

O内核裁剪的三种方法

O第一种使用内核自身的配置工具,编译定制内核。Linux能够很好支持模块化,内核有许多可以独立增加或者删除的功能模块。

O在编译根据系统平台的特点和应用需求配置内核,添加需要的功能,删除不需要的功能,此方法的缺点是内核裁剪的粒度较大,精度较小。

Omake menuconfig


第二种是修改内核源码进行裁剪,通过平台和应用的需求,在内核源码适当的位置加入一些条件编译语句,定制内核选项,颗粒度更小,裁剪出来的内核体积更小,适合嵌入式系统需求。

第三种是基于系统调用关系进行内核裁剪,内核是操作系统运行的核心,内核函数在系统调用,异常产生和中断的时候被调用,分析清楚系统调用关系,将不需要的内核函数裁剪。


文件系统裁剪

一句话:删掉哪些没有用的文件

学会制作文件系统就知道文件系统最低配需要哪些东西,那裁剪文件系统不就手到擒来


如何构建一个文件系统

一般构建文件系统有两种方法

第一种是使用文件系统生成工具,例如busybox,debootstrap,febootstrap

第二种是使用官方给出的最小文件系统,例如Ubuntu base镜像


基于Busybox制作文件系统

root@cary:~# tar jxf busybox-snapshot.tar.bz2
root@cary:~# cd busybox/
root@cary:~/busybox# make menuconfig
make && make install
默认安装在_install目录

制作rootfs并补齐缺少文件夹

root@cary:~/busybox# mkdir rootfs
root@cary:~/busybox# cp -rf _install/* rootfs/
root@cary:~/busybox# cd rootfs/
root@cary:~/busybox/rootfs# ls
bin  linuxrc  sbin  usr
root@cary:~/busybox/rootfs# mkdir dev etc lib proc sys tmp var root
root@cary:~/busybox/rootfs# ls
bin  dev  etc  lib  linuxrc  proc  root  sbin  sys  tmp  usr  var 
root@cary:~/busybox/rootfs#


补充配置文件

Busybox提供了基础的/etc配置文件,拷贝过来即可


Inittab启动配置文件

Inittab文件格式:
label:runlevel:action:process

添加rxS

rcS的作用有两个,一是挂载文件系统例如fstab和devpts,二是mdev用于管理设备的插拔例如鼠标,键盘,u盘。


添加fstab

修改/etc/fstab文件,/etc/init.d/rcS执行mount –a的时候会自动挂载这些文件系统


环境变量profile


怎么选择文件系统类型?

简单的一个文件系统已经搞定,接下来需要考虑的文件系统的格式

怎么选择文件系统类型呢?

我们要从硬件&内核&系统需求三个方面综合考虑

硬件:考虑存储介质Flash是NOR Flash还是NAND Flash,Ram的大小

内核:考虑裁剪后支持哪些文件系统,采用哪种最合适,性能·速度满足要求

系统需求:考虑运行速度,是否压缩


使用官方的base镜像制作

Ubuntu base 镜像下载链接:cdimage.ubuntu.com/ubuntu-base/releases/

下载解压就发现里面有一个完整的文件系统

root@cary:~/ubuntu-base# mkdir rootfs
root@cary:~/ubuntu-base# tar -xzf ubuntu-base-22.10-base-arm64.tar.gz -C rootfs/
root@cary:~/ubuntu-base# cd rootfs/
root@cary:~/ubuntu-base/rootfs# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@cary:~/ubuntu-base# chroot rootfs/
root@cary:/# ls
bin  boot  dev etc  home  lib media  mnt  opt  proc  root  run  sbin srv  sys  tmp  usr  var
更新
root@cary:/#apt update
根据需要安装需要的包,需要网络环境
root@cary:/#apt install ssh net-tools 

接下来就是用户创建、DNS、网络配置、串口设置、lib拷贝等等


下面是实际项目中第一个最简单的版本笔记,在x86系统下制作aarch64文件系统

Initial rootfs version:
[root@localhost arron]# mount CentOS-7-aarch64-Everything-2009.iso /tmp/
mount: /dev/loop1 is write-protected, mounting read-only

[root@localhost arron]# ls /tmp/LiveOS
squashfs.img  TRANS.TBL

cp /tmp/LiveOS/squashfs.img .
mv squashfs.img rootfs_1_00_00.img
mkdir rootfs

mount rootfs_1_00_00.img rootfs
mount -t sysfs /sys rootfs/sys
mount -t proc /proc rootfs/proc
mount -o bind /dev  rootfs/dev


mount -o bind /dev  rootfs/dev/pts

centos-release-7.9.2009.el7.centos.arrch64.com
yum-3.4.3-168.el7.centos.noarch.rpm
yum-metadata-parser-1.1.4-10.el7.aarch64.rpm
yum-plugin-fastestmirror-1.1.31-54.el7_8_noarch.rpm

rpm2cpio centos-release-7.9.2009.el7.centos.arrch64.com | cpio -idumv
rpm2cpio yum-3.4.3-168.el7.centos.noarch.rpm | cpio -idumv
rpm2cpio  yum-metadata-parser-1.1.4-10.el7.aarch64.rpm | cpio -idumv
rpm2cpio yum-plugin-fastestmirror-1.1.31-54.el7_8_noarch.rpm | cpio -idumv

change root
echo ':qemu-aarch64:M::\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:OC' > /proc/sys/fs/binfmt_misc/register
cat /proc/sys/fs/binfmt_misc/qemu-aarch64
cp /usr/bin/qemu-aarch64-static centos_rootfs/usr/bin/ -rf
chroot roots

yum install -y sudo passwd openssh telnet net-tools

没有桌面不需要,可能会导致开不起,需要切换到命令行模式
yum groupinstall "X Window System"
yum groupinstall "GNOME Desktop"

umount rootfs/dev/pts
umount rootfs/dev
umount rootfs/proc
umount rootfs/sys
umount rootfs

相关推荐

如何在Office 中编辑 PDF?附详细化步骤

PDF很受欢迎,因为它能在不同的设备和操作系统上仍然保持原有格式。但是,这也意味着直接更改PDF文件比其他格式更难更复杂。值得庆幸的是,Microsoftoffice和UPDF帮你解决这一难题。一...

我的 Windows 装机必备软件清单

今天给大家分享下我的装机必备软件,都是用了好多年的软件神器。靠谱、好用、无广告,Windows电脑必备软件,收藏这一篇就够了!01.浏览器王者:Chromehttps://www.google.c...

Docnet Core 是一个轻量级、高性能的 .NET PDF 操作库

DocnetCore介绍DocnetCore是一个轻量级、高性能的.NETPDF操作库,依托于PDFium渲染引擎,提供强大的PDF文档解析、渲染、操作等功能。它完全支持.NET...

分享三款好用的PDF编辑软件,轻松处理PDF

作为一名需要经常和PDF文件打交道的工作者,我来分享一下几款好用的PDF编辑软件,并详细分析了它们的优缺点,希望能帮你找到合适的工具。1.AdobeAcrobatDC作为PDF格式的发明者,Ado...

PDF文档创建工具软件:novaPDF OEM 11.9 Build 432 for Windows

novaPDFOEM是一款实用高效的软件,从头开始设计,让您尽可能轻松地在应用程序中添加PDF打印功能。换句话说,这个实用程序是专门为应用程序开发人员设计的,可以直接在程序安装程序中集成为PDF打印...

线性表顺序存储结构求集合的并,交,补,差(源代码附上 超详细)

一:算法分析1)用数组A,B,C,E表示集合。假定A={1,3,4,5,6,7,9,10},  B={2,,3,4,7,8,10},E={1,2,3,4,5,6,7,8,9,10},  输入数组A...

分享一套SpringBoot开发博客系统源码,包含完整开发文档和视频

基本信息项目名称:eblog摘要:eblog是一个基于Springboot2.1.2开发的博客学习项目,为了让项目融合更多的知识点,达到学习目的,编写了详细的从0到1开发文档。主要学习包括:自定义Fr...

通达信指标合集〔源码齐全〕

很多朋友问到我哪款指标好用,这里我说一下,之所以有很多不同的指标是因为我们在针对不同的盘面情况的时候使用的指标是不同的,我给到的指标一般来讲就目前的环境来讲都是比较适合的,今天我就把我平时自己常用的指...

巅峰对决!Spring Boot VS .NET 6

SpringBoot和ASP.NETCore都是企业中流行的Web框架,对于喜欢C#的人会使用ASP.NETCore,而对于Java或Kotlin等基于JVM的语...

在asp.net core 中控制访问权限的方法

Intro#由于项目需要,需要在基于asp.netmvc的Web项目框架中做权限的控制,于是才有了这个权限控制组件,最初只是支持netframework,后来dotnetcore2.0...

ASP.NET是否无生存之地?

ASP.NET,这个已经很久的技术,总觉得已经被时代淘汰,我们公司是一个10人小公司,几个十年十五年的项目还是用ASP.NET开发的。这两年由于客户的需求变化,我们公司也顺势开始对这些项目重新开发,改...

Spring Boot + Vue.js 实现前后端分离(附源码)

作者:梁小生0101链接:juejin.im/post/5c622fb5e51d457f9f2c2381SpringBoot+Vue.js前后端涉及基本概念介绍,搭建记录,本文会列举出用到环...

ASP.NET Core 中的 Mapster 使用入门教程

在本文中,我们将学习如何在ASP.NETCore应用程序中使用Mapster。首先,我们将了解Mapster是什么以及如何将其安装到.NETCore应用程序中。然后,我们将在使用...

Asp.net常用方法及request和response-a

asp.net教程asp.net常用方法:1、Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造(比如迅雷)。(使用全局一般处理...

ASP.NET Core使用功能开关控制路由访问

前言在前面的文章,我们介绍了使用Middleware有条件地允许访问路由(《ASP.NETCore使用Middleware有条件地允许访问路由》)。而对于一些试验性的功能,我们并不希望用密码去控制是...