广告
返回顶部
首页 > 资讯 > 操作系统 >怎么制作Linux根文件
  • 338
分享到

怎么制作Linux根文件

2023-06-27 11:06:49 338人浏览 安东尼
摘要

这篇文章主要介绍了怎么制作linux根文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么制作Linux根文件文章都会有所收获,下面我们一起来看看吧。根文件系统首先是内核启动时所mount的第一个文件系统,内

这篇文章主要介绍了怎么制作linux根文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么制作Linux根文件文章都会有所收获,下面我们一起来看看吧。

根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

怎么制作Linux根文件

1.根文件系统

文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。

注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中的命令而无需从头开始制作一个新的根文件系统。不过这儿的制作过程可以让我们更深一点理解Linux的文件系统。

2.主要的根文件系统

* Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘)上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是将 rootfs load 到 RAM 的RAMDisk,稍复杂的就是直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。

* RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。

ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技 术。

* initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd。

* Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM。但是 Cramfs 是只读的,对于需要运行时修改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs。

* SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试。

3.Ramdisk制作

RAMDisk的制作方法如下: (1) 在PC机的Linux操作系统环境下,生成可以虚拟成块设备的文件,假设文件名为init.img。

$ dd if=/dev/zero of=init.img bs=4096 count=1024

其中bs*count为块设备大小(单位:字节),生成init.img文件以后,还必须对该文件进行格式化。

$ mke2fs –m0 –F init.img

(2) 新建一个文件夹ram,并将init.img挂接到ram目录。

$ mkdir ram$ mount init.img ram/ -o loop

这时,读写ram目录,等效于读写init.img文件。用户可以将根文系统所需的文件写入到ram目录中。往ram目录写完文件以后,还需要使用umount ram命令卸载init.img,才能将已写入的文件保存到init.img中。

(3)添加完毕,需要umount ram

4.Cramfs制作

CramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任职时,所参与开发的文件系统。它是针对Linux内核2.4之后的版本所设计的一种新型只读文件系统,采用了zlib 压缩,压缩比一般可以达到1:2,但仍可以作到高效的随机读取,Linux系统中,通常把不需要经常修改的目录压缩存放,并在系统引导的时候再将压缩文件 解开。因为Cramfs不会影响系统的读取文件的速度,而且是一个高度压缩的文件系统。因此非常广泛应用于嵌入式系统中。

在嵌入式的 环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先要把Flash上的映像文件解压缩到内存 中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在Flash中占据了空间(以压缩后的形式存 在),而且还在内存中占用了更大的空间(以解压缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。

使用CramFS文件 系统就是一种解决这个问题的方式。CramFS是一个压缩格式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需 要访问某个位置的数据的时候,马上计算出该数据在CramFS中的位置,将它实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数 据。CramFS中的解压缩以及解压缩之后的内存中数据存放位置都是由CramFS文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方 式增强了透明度,对开发人员来说,既方便,又节省了存储空间。

但是Cramfs也有其缺点:延迟、小于16MB、不支持写,只支持PAGE_CREATE_SIZE=4096的内核。

制作的命令:(root文件夹中存放着文件系统)

#mkcramfs root cramfs.img

5.其他根文件系统的制作

制作yaffs文件系统: mkyaffsimage myroots myroots.img制作squashfs: mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments –noI

6.BusyBox编译制作

建立目标板空根目录文件夹及根目录下的文件夹:

[root@190 friendly-arm]# mkdir myroots[root@190 friendly-arm]#pwd/friendly-arm/myroots[root@190 friendly-arm]#cd myroots[root@190 myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var[root@190 myroots]# mkdir etc/init.d

进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:

#! /bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#trap ":" INT QUIT TSTP

创建 dev 中的节点 如果使用“linux 2.6.xx”的内核,应该事先创建节点“console”、“null”。否则在系统启动时内容会提示以下错误:

Warning: unable to open an initial console.Kernel panic - not syncing: Attempted to kill init!

创建节点的命令如下:

# mknod dev/console c 5 1# mknod dev/null c 1 3 移植Busybox:

进入到压缩文件存放的目录下,并解压。然后进入解压后的busybox目录文件夹,随后配置busybox 。

[root@190 busybox-1.2.0]# make menuconfig

由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:

1) Support for devfs2) Build BusyBox as a static binary ( no shared libs ) //将busybox编译成静态链接3) Do you want to build busybox with a Cross Compile?(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix //指定交叉编译器4) init5) Support reading an inittab file //支持init读取/etc/inittab 配置文件6) (X) ash选中ash //建立的rcS脚本才能执行7)ash8)cp cat ls mkdir mv //可执行命令工具的选择,自己看着办吧,需要用到的就选上9) mount10) umount11) Support loopback mounts12) Support for the old /etc/mtab file13) insmod14) Support version 2.2.x to 2.4.x Linux kernels15) Support version 2.6.x Linux kernels16) vi17)don’t use user

以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。 配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:

[root@190 busybox-1.2.0] make TARGET_ARCH=arm CROSS=arm-linux- \ PREFIX=/friendly-arm/myroots/ all install

安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下: 拷贝一些管理员控制程序到/sbin目录下,最重要的就是要包含一个init命令; 拷贝应用程序运行时所需要的库到/lib,库文件可以从PC机上的交叉编译工具安装目录下拷贝,如libc-2.2.2.so、libcryt-2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,为部分相应库建立快捷方式,提供一些应用程序按快 捷方式名称调用。值得注意的是C库要采用C库的版本glibc, glibc位于/lib/libc.so.6

关于“怎么制作Linux根文件”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么制作Linux根文件”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网操作系统频道。

--结束END--

本文标题: 怎么制作Linux根文件

本文链接: https://www.lsjlt.com/news/310355.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么制作Linux根文件
    这篇文章主要介绍了怎么制作Linux根文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么制作Linux根文件文章都会有所收获,下面我们一起来看看吧。根文件系统首先是内核启动时所mount的第一个文件系统,内...
    99+
    2023-06-27
  • linux怎么挂载根文件系统
    要挂载Linux的根文件系统,可以按照以下步骤进行操作:1. 在启动过程中,进入 GRUB 菜单。在大多数 Linux 发行版中,按...
    99+
    2023-09-06
    linux
  • linux在根目录下怎么创建文件夹
    在Linux系统中,要在根目录下创建文件夹,可以使用以下命令:sudo mkdir /文件夹名称其中,sudo命令用于以管理员权限执...
    99+
    2023-10-20
    linux
  • linux下制作ISO文件
    linux下制作ISO文件有几种方法,分别如下: 1,从光盘中制作ISO文件 cp /dev/cdrom 路径/ISO 文件名 例子:cp /dev/cdrom /opt/mycd.iso,也可以用 dd if=/dev...
    99+
    2022-06-04
    linux制作iso镜像文件 Linux 制作iso文件 linux制作镜像文件
  • Linux系统下怎么制作ISO镜像文件
    这篇文章主要介绍“Linux系统下怎么制作ISO镜像文件”,在日常操作中,相信很多人在Linux系统下怎么制作ISO镜像文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统下怎么制作ISO镜像文件...
    99+
    2023-06-10
  • linux下怎么制作可启动img/iso文件
    这篇文章主要介绍“linux下怎么制作可启动img/iso文件”,在日常操作中,相信很多人在linux下怎么制作可启动img/iso文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux下怎么制作可启动...
    99+
    2023-06-13
  • linux制作img文件格式
    在Linux上制作img文件格式通常有两种方法:1. 使用dd命令:- 首先,确保要制作成img格式的目标文件系统已经挂载到Linu...
    99+
    2023-09-20
    linux
  • linux怎么复制多个文件
    要复制多个文件,可以使用`cp`命令结合通配符。以下是一些示例:1. 复制当前目录下的所有文件到目标目录:cp * /目标目录/2....
    99+
    2023-10-30
    linux
  • Linux中怎么操作pcap文件
    本篇文章为大家展示了Linux中怎么操作pcap文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Editcap 与 MergecapWireshark,是最受欢迎的 GUI 嗅探工具,实际上它带了...
    99+
    2023-06-13
  • 根目录怎么添加.stylelintrc.json文件
    这篇文章主要介绍了根目录怎么添加.stylelintrc.json文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇根目录怎么添加.stylelintrc.json文件文章都会...
    99+
    2022-10-19
  • wps怎么制作红头文件
    要制作红头文件,可以使用WPS软件来完成。下面是具体的步骤:1. 打开WPS软件,进入“WPS文字”界面。2. 点击菜单栏上的“文件...
    99+
    2023-09-29
    wps
  • 怎么制作html文件(步骤)
    在如今的数字时代,网页已经成为我们生活中不可分割的一部分。每个人都可以通过在线网站搭建工具,轻松地创建一个个性化的网站。然而,在这个数字时代之前,网页编写是非常复杂的过程,需要掌握 HTML、CSS、JavaScript 等编程语言的知识。...
    99+
    2023-05-14
  • 嵌入式Linux是怎么使用NFS挂载根文件系统
    这期内容当中小编将会给大家带来有关嵌入式Linux是怎么使用NFS挂载根文件系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。对于嵌入式开发程序员来说使用NFS 挂在根文件系统是必须掌握的技能, 下面是在...
    99+
    2023-06-28
  • Linux内核与根文件系统有什么关系
    这篇文章主要为大家展示了“Linux内核与根文件系统有什么关系”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux内核与根文件系统有什么关系”这篇文章吧。Linux内核与根文件系统的关系 开...
    99+
    2023-06-12
  • Linux文件读写机制怎么优化
    这篇文章给大家分享的是有关Linux文件读写机制怎么优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux是一个可控性强的,安全高效的操作系统。本文只讨论Linux下文件的读写机制,不涉及不同读取方式如re...
    99+
    2023-06-13
  • linux怎么跨服务器复制文件
    本文小编为大家详细介绍“linux怎么跨服务器复制文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux怎么跨服务器复制文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2023-04-06
    linux 服务器
  • Linux下怎么查看16进制文件
    这篇文章给大家分享的是有关Linux下怎么查看16进制文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.使用VI 或者 VIM命令状态下:%!xxd --将当前文本转换为16进制格式。:%!od --将当前文...
    99+
    2023-06-12
  • 怎么定制Linux外围文件系统
    这篇文章主要介绍怎么定制Linux外围文件系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!思路利用原有系统复制必备部件到新存储器利用 initrd.img 机制在 RAM Disk&n...
    99+
    2023-06-16
  • java怎么根据url获取文件流
    Java可以使用`java.net.URL`类来打开一个URL连接,并获取该URL对应的输入流。以下是一个简单的示例代码:```ja...
    99+
    2023-10-11
    java
  • JAVA怎么根据流生成PDF文件
    Java中可以使用iText库来根据流生成PDF文件。iText是一个开源的Java库,用于处理PDF文件。首先,需要下载iText...
    99+
    2023-08-15
    JAVA
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作