yaffs格式的根文件系统制作

news2024/9/21 2:40:57

linux内核启动后,它接下来要做的事就是启动应用程序,而应用程序在哪里呢,类比windows,启动时要读取c盘,所以linux的文件系统就类似于c盘,并且我们使用的ls、cp等一些类命令(本质是应用程序),也都在根文件系统上,这些程序都来源于busybox,所以根文件系统制作需要busybox。

制作步骤:

1.首先下载busybox,我用的1.36版本([https://busybox.net/downloads/]
在这里插入图片描述

2.解压后进入目录,修改Makefile的交叉工具编译链为自己pc的,我的交叉工具编译链如下
在这里插入图片描述
在这里插入图片描述

3.在目录下执行make menuconfig,进入菜单后直接退出,使用默认配置即可。
在这里插入图片描述

4.在目录下执行make
在这里插入图片描述
5.编译后报错
在这里插入图片描述

5.使用make编译,报错如下
在这里插入图片描述
6.解决方法是进入菜单项把Miscellaneous Utilities 下的 seedrng 取消掉,不让该模块编译。
在这里插入图片描述
7.再重新make就可以编译成功
在这里插入图片描述
8.使用make CONFIG_PREFIX=安装目录 install命令安装,注意这里一定要指定安装目录,否则会安装到当前,破坏系统。
在这里插入图片描述
9.进入安装目录查看,安装成功
在这里插入图片描述
10.接下来创建第一个init程序的设备文件(/dev/console),这个设备文件主要和应用程序绑定,输入和输出等打印和它有关,还要创建个/dev/null,没有设置id的程序会和它绑定。
先查看本机这两个文件信息
在这里插入图片描述

11.然后在安装目录下创建dev文件夹,并在dev下创建这两个设备文件。
在这里插入图片描述
12.在创建etc目录,并在该目录下创建inittab配置文件,文件内容为console::askfirst:-/bin/sh
console表示设备文件id,和上一步的设备文件名对应,askfirst表示执行时机,-/bin/sh是应用名
在这里插入图片描述
在这里插入图片描述
13,由于应用程序需要c库,所以文件系统也需要安装这个库,这个库就用交叉编译链lib目录下的动态文件,在文件系统根目录下创建lib目录,然后把编译链lib目录下的动态文件拷贝过去就行。
创建lib目录
在这里插入图片描述
进入到交叉编译链lib目录,这里以so结尾的就是动态库文件
在这里插入图片描述
拷贝文件
cp .so /home/book/work/busybox/nfs_root/second_fs/lib -d
注意这里拷贝命令一定要加-d,表示只拷贝链接,否则会拷贝真实文件,会很大
在这里插入图片描述
在这里插入图片描述
14.在linux系统下,使用ps命令可以查看当前有哪些应用程序,当然我们制作的文件系统也可以提供该命令,内核提供了一个虚拟目录/proc,我们只需要在根文件系统下创建一个proc目录,然后挂载到这虚拟目录下就可以使用ps命令了。
现在根目录创建proc文件夹
在这里插入图片描述
然后在etc/inittab这个文件里加入::sysinit:/etc/init.d/rcS,表示要去读取/etc/init.d/rcS这个文件
在这里插入图片描述
然后创建/etc/init.d/rcS,文件内容为 mount -a
在这里插入图片描述
在这里插入图片描述
授权
在这里插入图片描述
再在etc目录下创建fstab文件,这里面才是真正挂载操作
在这里插入图片描述
文件内容
在这里插入图片描述
这里挂载内核寻/proc就完成了,ps命令就可使用。

15.还有一个问题,应用程序可能有多个,不可能每一个都去手动创建设备文件,因此需要配置为自动创建(udev机制),具体操作如下

首先在根文件目录下创建sys目录

在这里插入图片描述
然后修改rcS文件,框起来的是新加的
在这里插入图片描述
再修改fstab文件,框起来的是新加的
在这里插入图片描述
ok,至此,文件系统全部配置完成

16.到根文件目录上层目录使用yaffs文件制作工具制作yaffs文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript 手写代码 第二期

文章目录 1.为什么要手写代码?2. 手写代码2.1 手写实现判断类型函数2.1.1 前置知识2.1.1 手写实现 2.2 手写实现aplly,call,bind方法2.2.1 基本使用2.2.2 实现思路2.2.3 手写实现 1.为什么要手写代码? 我们在日常开发过程中,往往都是取出来直…

Linux(centos7)缺失.bashrc文件登录出现bash-4.2

一、问题描述 最近遇到几次登陆linux(centos7.5)系统后,虽然在/root用户下,但出现了如下界面: 二、解决思路 使用不同的linux发行版本,(比如:IP为*...90,以下简称90)会…

课程19:个人中心功能与提示优化

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

Android中加载一张大图,如何正常显示且不发生OOM ?

问题 在Android中,获取一个1000*20000(宽1000px,高20000px)的大图,如何正常加载显示且不发生OOM呢? 分析 Android系统会为应用分配一定大小的堆内存 而如果遇到高分辨率图片时,如果它的配置为ARGB(每个像素占4Byte) 那么它要消…

深度学习(23)——YOLO系列(2)

深度学习(23)——YOLO系列(2) 文章目录 深度学习(23)——YOLO系列(2)1. model2. dataset3. utils4. test/detect5. detect全过程 今天先写YOLO v3的代码,后面再出v5&…

【PCB专题】案例:PCB板厂说焊盘宽度太小容易沉金不良,但加宽又可能导致阻焊桥在阻焊为黑色油墨下无法做出?

此案例是最近在Layout一块PCB板卡,使用了一个以前我没有接触过的器件,此器件的封装是QFN128。 总的问题是:PCB板厂说如果按原稿制作的话,焊盘宽度太小沉金容易不良,但电话里和我说如果加宽又可能导致阻焊桥在黑色油墨情况下无法做出? 板厂给的EQ如下所示,表示TOP面设计…

【Unity之IMGUI】—编译模式下控件可视化及其封装

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

【从零开始开发一个线上网课系统-01】账号登录及退出登录功能开发

文章目录 1 视图层开发2 form表单验证3 配置urls.py4 模板层开发 实际上在系统开发的博客中应该先描述数据库设计,但由于设计的表比较多,其理解简单,但撰写和描述较为麻烦,所以我以可视化方式来呈现这些数据表以及其中的关系&…

RISCV Reader笔记_1 RISCV的意义

RISCV Reader RISCV的诞生 出众之处 RISCV架构被设计的目的就是成为一个通用的指令集架构 ISA。不仅支持从微控制器到高性能计算机的各种处理器,兼容各种编程语言,还适应FPGA ASIC等所有实现技术,稳定…… 计算机体系结构为了在指令集更新…

Iceberg从入门到精通系列之一:Iceberg核心概念理解

Iceberg从入门到精通系列之一:Iceberg核心概念理解 一、Iceberg核心概念二、Iceberg表结构三、数据文件四、表快照Snapshot五、清单列表Manifest list六、表快照、数据文件和清单列表之间的关系七、Catalog八、Hive Catalog九、Hadoop Catalog十、Hive Catalog和Had…

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序 完整程序: clc; clear; close all; warning off; addpath(genpath(pwd)); %%%%%%%%%%%%%%%%%%%%%%%%% Initialization %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N = 10^6; r_n = rand(1,N)>0.5; BPSK = 2*r_n-1; E_n_d…

chatgpt赋能python:Python生成GUI的步骤和工具

Python生成GUI的步骤和工具 Python是一种广泛使用的编程语言,其语法简洁、易学、可读性强等特点深受程序员喜爱。 Python的GUI编程让我们可以为用户提供友好的界面,帮助用户更好地理解和使用程序。Python生成GUI的过程并不复杂,本文将为您介…

代码随想录算法训练营第42天 | 01背包问题理论基础 + 416.分割等和子集

今日任务 目录 01背包问题 二维数组 01背包问题 一维/滚动数组 416.分割等和子集 - Medium 01背包问题 二维数组 理论基础:代码随想录 01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品…

课程18:角色权限功能实现

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

chatgpt赋能python:Python生成C++代码-提高生产力的利器

Python 生成 C 代码 - 提高生产力的利器 Python 作为一种高级编程语言,在数据分析、机器学习等领域都有着广泛的应用。但是,Python 被认为速度慢,无法处理一些高性能的任务。此时,C这种低级语言就被用来替代 Python,以…

实战:构建工具-共享库配置实践-2023.6.22(测试成功)

实战:构建工具-共享库配置实践-2023.6.22(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 jenkins/jenkins:2.346.3-2-lts-jdk11实验软件 链接:https://pan.baidu.com/…

Flutter Dart操作符

常见的操作符大家都知道就不多介绍了,主要来看看Java所没有的。 类型判定操作符 as、 is、 和 is! 操作符是在运行时判定对象 类型的操作符 操作符解释as类型转换is如果对象是指定的类型返回 Trueis!如果对象是指定的类型返回 False as 操作符把对象转换为特定的类…

如何加入开源社

开源社成立于 2014 年,是由志愿贡献于开源事业的个人成员,依 “贡献、共识、共治” 原则所组成,始终维持厂商中立、公益、非营利的特点,是最早以 “开源治理、国际接轨、社区发展、项目孵化” 为使命的开源社区联合体。开源社积极…

chatgpt赋能python:Python生成GUID:让你的代码变得更加唯一

Python生成GUID:让你的代码变得更加唯一 在现代软件开发领域中,一个核心的问题是如何确保代码生成的ID是唯一的。通过Python语言生成全球唯一标识符(GUID)是一个非常流行的方法,而且是非常容易实现的。 什么是Python…

FutureTask源码

介绍 在创建线程的方式中,我们可以直接继承Thread和实现Callable接口来创建线程,但是这两种创建线程的方式不能返回执行的结果。于是从JDK1.5开始提供了Callable接口和Future接口,这两种创建线程的方式可以在执行完任务之后返回执行结果。 …