Linux内核裁减及根文件系统定制(二)

Linux 系统裁减指南1 一种创建小型化Linux系统的方法http://blog.youkuaiyun.com/tianhappy/archive/2005/11/09/526148.aspx初稿,文档结构,USB引导盘制作步骤。目 录1 引言 61.1 编写目的 61.2 背景 61.3 定义 61.4 参考资料 62 总体描述 82.1 硬件环境 82.2 软件环境 82.3 需求规定和约束 83 总体设计 93.1 基本设计概 阅读详情

二、根文件系统定制

1、 创建一个全新的根文件系统

你可以用mkinitrd来创建,这里介绍另外一种方式,用dd命令:

# mkdir -p /mnt/initrd

创建一个设备点,用于临时挂载根文件系统。

# cd  /tmp

在tmp下创建根文件系统

# dd if=/dev/zero of=/tmp/initrd bs=512 count=40960

创建一个名为initrd的根文件系统,系统每个块的大小为512字节,共40960块。

# mke2fs -F -m 0 initrd

格式化根文件系统,其中-F表示强制执行;-m 0表示不为系统预留空间。

# mount -o loop /tmp/initrd /mnt/initrd

挂载根文件系统,记住这里要使用-o loop选项,否则挂载会失败。

# cd /mnt/initrd     

2、 创建基本的目录结构

# mkdir dev proc etc etc/rc.d  sbin bin lib mnt tmp var usr

# chmod 755 dev etc etc/rc.d  sbin bin lib mnt tmp var usr

# chmod 555 proc

3、 添加设备

你可以使用mknod创建,也可以从现有的系统中拷贝过来,拷贝的时候一定要注意,最好使用-dfR,这样有两个好处:

1、拷贝路径下的所有文件,如果有文件夹,则嵌套拷贝整个文件夹下的内容;

2、保持文件(设备)的属性不变。这里采用mknod创建的方式,以下设备是必须的console、kmem、mem、null、ram0、tty等。

建立一般终端机设备

# mknod tty c 5 0

# mkdir console c 5 1

# chmod 666 tty console

建立 VGA Display 虚拟终端机设备

# mknod tty1 c 4 0

# chmod 666 tty0

建立 RAM disk 设备

# mknod ram0 b 1 0

# chmod 600 ram0

建立 null 设备

# mknod null c 1 3

# chmod 666 null

4、创建配置文件

到这里我们就有了一个初步的小型根文件系统,但是还需要配置一些有关的 shell script来完善它。在etc下创建最基本的配置文件fstab、inittab、rc.d/rc.sysinit,其中每个配置文件中至少应该包含以下对应的内容:

fstab应包括:

/proc  /proc  proc  defaults 0 0

inittab应包括:

::sysinit:/etc/rc.d/rc.sysinit

::sysinit:/bin/sh(注意,这里如果用getty或minigetty代替sh,那么shell就会等待用户登录,而不会直接进入shell。)

rc.d/rc.sysinit应包括:

/bin/mount  –a

5、 添加bin、sbin、usr/bin、usr/sbin下的可执行文件

系统至少应该包含工具sh, ls, cp, mv,init。我们可以将/bin /sbin /usr/bin /usr/sbin下的对应工具拷贝过来,拷贝的时候采用:

#cp –dfR

系统中的可执行文件一般都比较大,在内存或磁盘空间紧张的情况下不适合,我们可以用BusyBox来解决这个问题。BusyBox 包含了七十多种 Linux 上标准的工具程序,仅需要几百k磁盘空间,在嵌入式系统上常用到它。下载了BusyBox的源代码包后可以按照如下的步骤操作:

DOSTATIC=true然后修改 BusyBox 中的 init.c,设定系统要执行的第一个程序为:

/etc/rc.d/rc.sysinit

#define INIT_SRCIPT "/etc/rc.d/rc.sysinit"

开始编译BusyBox

#make

#make install

到这一步我们就得到了可执行命令busybox将busybox 复制到/mnt/initrd/bin目录下

# cp busybox  /mnt/initrd/bin

然后创建常用命令的link,具体的工作原理请参阅busybox的官方说明。我们可以使用 ./busybox --help 来查看busybox中都有哪些工具。常用的工具及busybox的用法如下:

# ln -s busybox  ls

# ln -s busybox  cp

# ln -s busybox  mount

# ln -s busybox  umount

# ln -s busybox  more

# ln -s busybox  ps

# ln -s busybox  sh

现在我们就有了所需的常用命令

6、 添加库到lib下

该目录中包含有你的启动盘启动过程中所需要的共享函数库,如果缺少必须的函数库,系统会停止启动或出现一大堆错误信息,所以一定要注意。几乎所有的程序都需要libc库,列一下目录/lib中的libc:

ls  -l  /lib/libc*

-rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*

  lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*

  libc.so.6的6表示版本号,它指向的文件才是你真正需要的。

查看/bin  /sbin  /usr/bin  /sur/sbin下每一个程序使用的函数库,用命令ldd,

如:

ldd  /sbin/mke2fs

libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)

libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)

libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)

libc.so.6 => /lib/libc.so.6 (0x4002c000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

输出右边的库都是必须的,有的可能是链接文件。

在/lib目录下你还必须有函数库装载器,这个装载器或是ld.so (对 a.out 库) 或是ld-linux.so (对 ELF 库)。新版本的ldd一般会告诉你所需库的装载器。

7、 加载模块

如果你有一个模块化的内核,你还得考虑需要加载的模块,它们都位于/lib/modules 下

cp –dfR  /lib/modules/x.y.z  /mnt/initrd/lib/modules

8、 打包

# cd /tmp

# umount /mnt/initrd

# gzip -9  initrd

最终产生的文件initrd.gz就是压缩过的根文件系统

9、 修改已经存在的根文件系统

# gunzip initrd.zip

# mount -o loop /tmp/initrd /mnt/initrd

# 用户修改根文件系统

# umount /mnt/initrd

# gzip -9  initrd

 
RK3588芯片USB OTG模式切换:Device到Host的驱动奥秘之旅 摘要:本文详细介绍了RK3588芯片USB OTG模式从Device到Host的完整驱动流程,包括硬件电路设计、内核驱动配置、模式切换机制及验证方法。RK3588芯片凭借强大的性能和灵活的USB OTG特性,在工业控制、智能家居等领域具有广泛应用前景。文章重点分析了Type-C接口设计、USBPHY芯片选型、Linux内核模块配置等关键技术要点,并提供了模式切换脚本使用方法和常见问题解决方案,为开发者实现RK3588 USB OTG功能提供了全面指导。 阅读详情

相关推荐

new delete 详解

常规的new 和 delete 当需要内存时,可以使用new申请内存,但在用完内存时应当使用delete 去归还内存,以防止内存泄漏,具体使用方案见下面代码: int* ps = new int ; // 使用new 申明变量空间 ... ... delete ps ; '// delete 删除所申明的变量空间 上述代码将删除ps 指针指向的内存空间,但不会删除指针本身,即仍然可以使用该指针去指向其他int 类型的变量。new 和 delete 一定需要成对的使用否则极易发生内存泄漏。 注意:不

qq_42138448的博客 6938

linux 分层,linux – 分层ldd(1)

如果你使用FEATURES = preserve-libs运行Portage≥2.2,你应该很少需要revdep-rebuild,因为旧的.so.vers将根据需要保存(虽然你仍然需要仔细重建,因为当libA时,东西仍然会变成kaboom .so.0希望libC.so.0和libB.so.0想要libC.so.1,而某些二进制文件想要libA.so.0和libB.so.0).话虽这么说,ldd做的...

weixin_30101051的博客 332

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

Tina Linux中常见库的类型和作用

ld-2.23.so glibc glibc中的包含的库 libanl-2.23.so glibc glibc中的包含的库 libcidn-2.23.so glibc glibc中的包含的库 libcrypt-2.23.so glibc glibc中的包含的库,现代哈希加解密 ibdl-2.23.so glibc glibc中的包含的库,让程序在运行时加载和使用库代码而无须在编译时链接库 libnsl-2.23.so glibc glibc中的包含的库,提供了libnsl库的旧版本,用于访问NIS

DOT小文哥的博客 4045

QGIS将经纬度坐标转成点

QGIS绘制一张地图

weixin_46713695的博客 6056

【YOLO26实战全攻略】19——智慧交通(一):高速抛洒物与事故检测全流程落地

在智慧交通领域,高速公路抛洒物、交通事故等突发状况常导致二次事故与大规模拥堵,传统人工监控存在响应滞后、覆盖有限等痛点。本文基于Ultralytics YOLO26算法,结合ByteTrack多目标跟踪技术,构建从数据准备、模型训练到边缘部署的全栈式智慧交通检测系统。核心内容包括:多车型专属数据集构建、抛洒物检测模型优化、ByteTrack轨迹跟踪集成、异常事件(违停/逆行/碰撞)识别逻辑实现,以及NVIDIA Jetson边缘设备部署方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1494

mkfs.ext4: undefined symbol: ext2fs_numeric_progress_ops或 set_com_err_gettext

mkfs.ext4: symbol lookup error: mkfs.ext4: undefined symbol: ext2fs_numeric_progress_ops或 set_com_err_gettext vgextend vg_mysqlsoft /dev/sdc7 lvcreate -n lv_MariaDB_104 -L 3G vg_mysqlsoft mkfs.ext4 /d...

小麦苗DBA宝典 1508

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2476

Linux学习(2)——根文件系统详解

Linux:ELF文件:可执行文件的存储格式。可执行的、可链接的文件类型。 Windows上是:PE  可移植的。 文件系统: rootfs:根文件系统。 FHS:文件系统层级标准 [root@beny ~]# ls / bin   dev  home  lib64       media  mnt  opt   root  selinux  sys       tmp

雲斷丶 1929

uniapp - 强力解决H5网页浏览器跨域问题,如何解决uniapp请求接口在浏览器跨域问题,UniApp H5 跨域代理配置详细教程完美解决所有uniapp跨域(调用第三方接口或服务器api跨域)

uni-app 跨域,uniApp解决h5跨域问题,解决uni-app请求接口在浏览器跨域问题,uni.request请求跨域问题解决方案,uni-app-跨域解决方法,彻底解决uniapp发布为H5的跨域问题,uniapp H5页面设置跨域请求_uniapp h5跨域配置,uniapp开发 H5 解决跨域问题,uniApp请求解决跨域问题,uniapp request如何实现前端请求跨域,解决uniapp调试过程中的请求跨域和环境配置,Uniapp调用外部api接口跨域请求,uni-app发布H5页面跨域

🏆 前端领域优质创作者 5356

(王道计算机组成原理)第二章数据的表示和运算-第三节:运算方法和运算电路 1(基本运算部件)

本文主要介绍了计算机组成原理中的加法器和算术逻辑单元(ALU)的基本概念与实现原理。首先,文章详细讲解了一位全加器的工作原理,包括其输入输出、逻辑表达式及真值表。接着,介绍了并行加法器的两种类型:串行进位和并行进位的加法器,分析了它们的优缺点。随后,文章探讨了带标志位的加法器,说明了如何通过标志位生成逻辑来判断加法结果的状态。最后,文章阐述了ALU的功能及其实现原理,包括ALU的基本结构、控制信号的作用以及在实际考试中的图示表示。通过这些内容,读者可以全面了解加法器和ALU在计算机中的重要作用及其工作原理。

快乐江湖的博客 3837

LINUX 根文件系统加载,不同文件系统的挂载和 操作方法(VFS虚拟文件系统) --2

Linux启动盘boot/root盘的制作 boot/root盘由两部分组成,即核心和根文件系统。要把这两部分都放到一个1.44MB的软盘上去,通常要对内核和根文件系统进行压缩,压缩核心的最好方法是进行重新编译内核,将一些不必要的支持去掉,如对网络和其它周边设备的支持,重要的一点是记住内核必须支持RAMDISK及ext2,否则系统不能正常引导。关于内核的编译本文不再阐述,下面重点介绍如何生成根文

嵌入空间 1837

面向高速Serdes的信号完整性优化:从封装 - 板级互连局限到封装内互连技术演进(一)

本文针对高速SerDes互连链路中的关键电磁效应展开研究:1)揭示了封装-主板互连结构在毫米波频段易激发谐振效应,导致53GHz传输陷波和阻抗偏移;2)提出基于本征模分析的谐振抑制方法,通过优化接地过孔排布使带宽突破95GHz;3)系统比较了方形/六边形BGA排布下23种差分对朝向的串扰特性,证实六边形阵列可将功率和串扰降低30%以上;4)论证了100GHz以上带宽需采用封装内互连架构,其较传统方案减少50%阻抗不连续节点。

小孟同学的博客 232

LINUX内核定制基本过程,Linux内核裁减及根文件系统定制(转)

一、内核编译1、准备工作(1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。(2)建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。(3)下载并解压linux内核,建议从http://www.kernel.org...

weixin_36361600的博客 588

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Linux内核裁减及根文件系统定制(之二)--------根文件系统定制

Linux内核裁减及根文件系统定制(之二)--------根文件系统定制二、根文件系统定制    1、 创建一个全新的根文件系统        你可以用mkinitrd来创建,这里介绍另外一种方式,用dd命令:                      # mkdir -p /mnt/initrd    创建一个设备点,用于临时挂载根文件系统。                      # cd 

4030

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Linux内核裁减及根文件系统定制

<br />根文件系统定制<br />1、 创建一个全新的根文件系统<br />你可以用mkinitrd来创建,这里介绍另外一种方式,用dd命令:<br /># mkdir -p /mnt/initrd 创建一个设备点,用于临时挂载根文件系统。<br /># cd /tmp 在tmp下创建根文件系统<br />  # dd if=/dev/zero of=/tmp/initrd bs=512 count=40960 创建一个名为initrd的根文件<br />系统,系统每个块的大小为<br />

babyfans的专栏 776

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux内核裁减及根文件系统定制(之一)--------Linux内核裁减

Linux内核裁减及根文件系统定制(之一)--------Linux内核裁减目录:一、内核编译二、根文件系统定制三、内核选项说明 一、内核编译1、  准备工作(1)       整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。(2)       建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/li

4718

linux 文件系统覆盖目录,Linux内核裁减及根文件系统定制

一、内核编译1、准备工作(1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。(2)建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。(3)下载并解压linux内核,建议从http://www.kernel.org...

weixin_32746239的博客 300

linux内核封装方式,Linux内核裁减及根文件系统定制(转)

一、内核编译1、准备工作(1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。(2)建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。(3)下载并解压linux内核,建议从http://www.kernel.org...

weixin_39880328的博客 336

Linux 系统裁减指南

                                                                               Linux 系统裁减指南一种创建小型化Linux系统的方法拟制:董晓明日期:2003-6-17评审:日期:批准:日期:yyyy/mm/dd签发:日期:yyyy/mm/dd华中科技大学信息存储系统国家专业实验室版权所有 不得复制修 订 记 录日

8036

linux 系统裁减指南,Linux 系统裁减指南

Linux 系统裁减指南第一步:裁减内核打开终端,输入:cd /usr/src/linux2.4,然后输入make xconfig.现在编译内核正式开始了1.1 “code maturity level options”选项,代表代码的成熟等级,因为这是一个试验的部分,我们不需要,所以关闭它。1.2 “Loadable module support”可加载模块支持可加载...

weixin_35476730的博客 504

Linux裁减内核

(制作根文件系统部分存在问题)                                            第一步:裁减内核打开终端,输入:cd /usr/src/linux2.4,然后输入make xconfig.现在编译内核正式开始了1.1 “code maturity level options”选项,代表代码的成熟等级,因为这是一个试验的部分,我们不需要,所以关闭它。1.2 “L

886

Linux内核裁减及根文件系统定制(一)

一、内核编译1、准备工作(1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。(2)建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。(3)下载并解压linux内核,建议从http://www.ke

960

linux根文件系统清理,Linux内核裁减及根文件系统定制(之一)--------Linux内核裁减...

目录:一、内核编译二、根文件系统定制三、内核选项说明一、内核编译1、准备工作(1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。(2)建议用命令uname –r查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install步骤产生的文件会覆盖这个路径下的内容。(3)下载并解压linux内核,...

weixin_39952937的博客 144

Linux 系统裁减指南 (LiPS)》

LiPS 详细设计说明书————————————(Linux 系统裁减指南)一种创建小型化Linux系统的方法目 录1 引言 61.1 编写目的 61.2 背景 61.3 定义 61.4 参考资料 62 总体描述 82.1 硬件环境 82.2 软件环境 82.3 需求规定和约束 83 总体设计 93.1 基本设计概念 93.2 软件结构 94 内核 104.1 创建内核的方法 104.2 内核

2607

linux裁减内核,裁减linux内核

工作目标:制作一个小的linux系统,使之体积尽可能地少,功能尽可能地简化,以在其上能够运行一个RedHat Linux下编译的可执行程序为限。工作结果:制成一个U盘上的linux小系统,总共大小为30M左右。能够从U盘引导,完全脱离硬盘运行,提供全部的linux内核功能,以字符界面方式提供RedHat Linux常用功能包括帐户、文件管理和网络等常用服务等功能,并且可以扩展。工作环境:PC机一台...

weixin_42420393的博客 406
上一篇: Linux内核裁减及根文件系统定制(一)
下一篇: Linux 系统裁减指南2
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值