ARM 制作简易的根文件系统

news2024/9/29 1:20:22

一、根文件系统概述

1、为什么需要根文件系统

(1) init 进程这个应用程序,在根文件系统上。

(2) 根文件系统提供了根目录:/

(3) 内核启动后的应用层配置(/etc 目录),在根文件系统上。几乎可以认为:发行版 == 内核 + rootfs。

(4) shell 命令程序在根文件系统上。譬如 ls、cd 等命令。


总结:一套 linux 体系,只有内核的话,是不能工作起来的,必须要 rootfs(上的 /etc目录下的配置文件、/bin、 /sbin 等目录下的 shell 命令,还有 /lib 目录下的库文件等···)相配合,才能工作。


2、根文件系统的实质是什么

(1) 根文件系统,是特殊用途的文件系统。


(2) 根文件系统也必须属于某种文件系统格式。uboot cmdline 中使用格式:rootfstype= 来指定。


(3) 究竟文件系统是用来干嘛的。

首先,存储设备(块设备,像硬盘、flash等)是分块(扇区)的,物理上底层去访问存储设备时,是按照块号(扇区号)来访问的。这就很麻烦。

其次,文件系统是一些代码,是一套软件,这套软件的功能就是对存储设备的扇区进行管理,将这些扇区的访问,变成了对目录和文件名的访问。 我们在上层按照特定的目录和文件名去访问一个文件时,文件系统会将这个 ”目录+文件名“ 转换成对扇区号的访问。

最后,不同的文件系统的差异就在于,对这些扇区的管理策略和方法不同,譬如坏块管理、碎片管理。


二、根文件系统的形式

1、镜像文件的形式

(1) 使用专用工具软件制作的、可供烧录的镜像文件。

(2) 镜像中包含了根文件系统中的所有文件。

(3) 烧录此镜像,类似于对相应分区格式化

(4) 镜像文件系统具有一定的格式, 格式是内化的,跟文件名后缀是无关的。


2、文件夹的形式

(1) 根文件系统,其实就是一个包含特定内容的文件夹而已。

(2) 根文件系统可由任何一个空文件夹 添加必要的文件构成而成。

(3) 根文件系统的雏形就是,在开发主机中构造的文件夹形式的。


3、总结

(1) 镜像文件形式的根文件系统,主要目的是用来烧录到块设备上,设备上的内核启动后,去挂载它。

镜像文件形式的根文件系统,是由文件夹形式的根文件系统,使用专用的镜像制作工具制作而成的。


(2) 最初在开发主机中随便 mkdir 创建了一个空文件夹,然后向其中添加一些必要的文件(包括 etc 目录下的运行时配置文件、/bin 等目录下的可执行程序、/lib 目录下的库文件等···)后就形成了一个文件夹形式的 rootfs。

然后这个文件夹形式的 rootfs, 可以被 kernel 通过 nfs 方式来远程挂载使用,但是不能用来烧录块设备。

我们为了将这个 rootfs 烧录到块设备中,于是用一些专用的软件工具,将其制作成可供烧录的 具有一定格式的 根文件系统镜像。


(3) 文件夹形式的 rootfs 是没有格式的,制作成镜像后就有了一定的 rootfs 格式了,格式是由我们的镜像制作过程和制作工具来决定的。

每一种格式的镜像制作工具的用法都不同。


三、自己制作 ext2 格式的根文件系统

1、mke2fs 介绍

(1) mke2fs 是一个应用程序,在 ubuntu 中默认是安装了的。这个应用程序就是用来制作 ext2、ext3、ext4 等格式的根文件系统的。

(2) 一般用来制作各种不同格式的 rootfs 的应用程序的名字都很相似,类似于 mkfs.xxx(譬如用来制作 ext2 格式的 rootfs 的工具,叫 mkfs.ext2、用来制作 jffs2 格式的 rootfs 的工具就叫 mkfs.jffs2)。

(3) ubuntu14.04 中的 mkfs.ext2 等,都是 mke2fs 的符号链接而已。


2、动手制作 ext2 格式的根文件系统

(1) 创建 rootfs.ext2 文件,并且将之挂载到一个目录下,方便访问它。

《参考资料:http://blog.csdn.net/zhengmeifu/article/details/24174513》

dd if=/dev/zero of=rootfs.ext2 bs=1024 count=2048
losetup  /dev/loop1 rootfs.ext2
mke2fs -m 0 /dev/loop1 2048

mkdir rootfs
mount -t ext2 /dev/loop1 ./rootfs/

在这里插入图片描述
在这里插入图片描述


(2) 我们向镜像中写入一个普通文件 linuxrc。这个文件就会成为我们制作的镜像中的 /linuxrc。内核挂载了这个镜像后,就会尝试去执行 linuxrc。然后执行时必然会失败。

我们将来实验看到的现象就应该是:挂载成功,执行 /linuxrc 失败。

root@ubuntu:/home/aston/workspace/porting_x210/rootfs# cd rootfs
root@ubuntu:/home/aston/workspace/porting_x210/rootfs/rootfs# ls
lost+found
root@ubuntu:/home/aston/workspace/porting_x210/rootfs/rootfs# touch  linuxrc
root@ubuntu:/home/aston/workspace/porting_x210/rootfs/rootfs# ls
linuxrc  lost+found
root@ubuntu:/home/aston/workspace/porting_x210/rootfs/rootfs# 

在这里插入图片描述


(3) 将来真正去做有用的 rootfs 时,就要在这一步添加真正可以执行的 linuxrc 程序,然后还要添加别的 /lib 目录下的库文件,/etc 目录下的配置文件等。

(4) 卸载掉,然后镜像就做好了。

root@ubuntu:/home/aston/workspace/porting_x210/rootfs/rootfs# cd ../
root@ubuntu:/home/aston/workspace/porting_x210/rootfs# ls
rootfs  rootfs.ext2
root@ubuntu:/home/aston/workspace/porting_x210/rootfs# umount /dev/loop1
root@ubuntu:/home/aston/workspace/porting_x210/rootfs# losetup -d /dev/loop1
root@ubuntu:/home/aston/workspace/porting_x210/rootfs# 

在这里插入图片描述


3、烧录制作的 rootfs.ext2

(1) 烧录过程参考裸机中第三部分的刷机过程。注意 bootargs 传参的设置。

uboot 中配置:

set bootargs  console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext2

Windows 下的 fastboot 文件夹:
在这里插入图片描述

启动 uboot,执行 fastboot :

在这里插入图片描述

Windows 下,使用 cmd 命令执行 fastboot 命令:

fastboot devices
fastboot flash system rootfs.ext2
fastboot reboot

在这里插入图片描述

uboot 下敲任意键,进入 uboot 命令行。

使用 tftp 传输 kernel 镜像,并启动:

set bootargs  console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext2
tftp 30008000 192.168.1.20:zImage
bootm 30008000

在这里插入图片描述

注意:由于前面我们移植三星官方的 kernel 时,未解决 mmc 驱动的问题,所以如果使用我们移植的三星官方 kernel ,将会失败。


我们应该使用三星官方移植好的 kernel :qt_x210v3s_160307/kernel

root@ubuntu:/home/aston/workspace/uboot_bsp/qt_x210v3s_160307/kernel# cp arch/arm/boot/zImage  /mnt/hgfs/linux_win_shared/zImage  -rf

在这里插入图片描述


源自朱有鹏老师.

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

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

相关文章

Arduino开发之如何连接压力传感器模块?

文章目录0.引言1.压力传感器模块说明2.代码编写3.功能演示0.引言 在利用Arduino开发过程中,若需知道设备能感知到受到外部按压,设备可以通过压力传感器模块来感知周围环境。本文在【Arduino如何进行开发?】基础上,借鉴现有网络资料…

数字营销新宠:探究2023年YouTube网红营销的核心趋势和商业价值

2023年,YouTube网红营销已经成为全球广告营销行业的重要组成部分。YouTube作为全球最大的视频分享平台,每月活跃用户数达到了20亿,其中有超过100万的YouTube网红在平台上分享自己的创意和想法。在这篇文章中,Nox聚星将和大家探讨2…

Visual Studio如何使用Qt开发桌面软件?

文章目录0.引言1.开发环境配置2.编写第一个Qt程序0.引言 笔者熟悉的第一门编程语言是C#,当初本科毕业设计需要进行Qgis的二次开发,本想利用C#编程,但网上资料较少,多是利用Qt进行Qgis的二次开发,Qt是利用C编程&#xf…

如何将aac转化为mp3,4种常用方法

aac是高级音频编码格式之一,支持多声道、解析度高,与mp3相比,aac格式的音质更佳,文件更小。在手机上录音时,保存下来的录音文件通常是AAC格式的。虽然aac格式有很多优点,但是,在不同的设备上&am…

POST请求与GET请求

get和post是HTTP协议中的两种发送请求的方法 HTTP是基于TCP/IP的关于数据如何在万维网中通信的协议 一、get请求与querystring get请求即客户端向server服务端请求数据,如:获取文章列表的分页码等 通过queryString来获取数据,如&#xff1…

设计模式 -- 模板方法模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

java生成随机字符串的方法

今天我们来学习下随机数的生成,随机数就是不确定的数,它可以是任意一个整数或者字符串。下面就让我们一起来学习下随机字符串的生成吧。 首先,我们需要先定义一个名为 str的数组,并将它作为输入文件。 1、使用 Java中的 str作为输…

传播的最大能量场来自私域的裂变——“春生百味”品牌营销裂变活动复盘后记

关于大宗家电等耐用品品牌想要精准触达潜在用户,如何实施传播策略? 刚刚与方太品牌方复盘完3月份“春生百味”关于营销裂变直播活动的整体效果,我们借此次整体案例实施过程的梳理,以分享几个裂变过程中的关键点。 传播的最大能量…

React styled-components(二)—— props、attrs属性

styled-components props、attrs属性propsprops 穿透添加 attrs 属性获取 state 中的样式变量控制样式通过 props 控制样式通过 css 控制样式props props 穿透 styled-components 可以 props 穿透,把属性穿透到元素中。 通常,用 css 的 input 组件实现…

【Python】【进阶篇】十七、Python爬虫实现实时翻译

目录十七、Python爬虫实现实时翻译17.1 JS代码slat与sign17.2 Python代码表示参数17.3 完整程序实现十七、Python爬虫实现实时翻译 YD翻译是以异步方式实现数据加载的,要实现数据抓取,其过程极其繁琐。 上一节《Python爬虫的浏览器实现抓包》&#xff…

使用LeafLet叠加Geoserver wms图层到已有底图的方法

背景 随着现代城市交通建设的飞速发展,各个城市的地铁路线和地铁站点也是越来越多。地铁极大的方便了广大人民的交通出行。作为Giser,经常会遇到需要将一份shp数据在地图上展示,甚至需要在网页端进行浏览的需要。把shp这种空间矢量数据进行we…

数据库笔记Ch04----概念数据库的设计(1)

前三章我们学习了如何使用DBMS我们学会了增删改查,插入数据库,创建视图... 这一章是我们的数据库刚刚建立,只有一个需求,需要根据用户的需求来创建数据库,每个表有哪些属性,参照关系是什么,主键…

一.Jetpack全套

Jetpack全套一.Jetpack介绍1.特性:2.分类:二.应用架构三.LifeCycle:1.简介2.简单使用3.实战:Dialog内存泄漏四.VideModel1.介绍2.简单使用3.AndroidViewModel使用4.使用viewmodel实现fragment直接数据共享五.LiveData1.介绍2.常用方法3.使用场…

车载 OTA技术概念

1 OTA技术概念 随着高级辅助驾驶的发展和自动驾驶的引入,汽车变得越来越智能,这些智能汽车被软件控制,装有巨量的软件程序,当出现一个软件程序问题或者更新时,如果按照传统的解决方式,那都将是一项很繁重的…

【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…

云开发--实现发送邮件+短信+链接跳转小程序功能

目录 1、小程序实现发送邮件 准备一个qq邮箱,并启动SMTP服务 确定小程序云开发环境,并新建云函数 2、小程序实现发送短信 确定应用 确定签名 确定模板 编写云函数-发送短信 3、链接跳转小程序 H5 配置 生成 URL Link 学习记录: …

【获奖案例巡展】科技向善之星——中航电梯5G+大数据管理平台

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量&#xff0…

网络编程(python)

文章目录一、网络基础(IP,端口,TCP等)二、TCP网络应用可开发流程三、HTTP协议和静态Web服务器四、搭建Python自带静态Web服务器一、网络基础(IP,端口,TCP等) IP地址:标识…

企业的数据中台到底指的是什么?_光点科技

随着数据技术的不断发展和企业数据应用的广泛应用,越来越多的企业开始将数据中台作为数字化转型的核心战略之一。那么,企业的数据中台到底指的是什么呢? 数据中台是一种以数据为核心的企业数字化转型架构,旨在通过数据的汇聚、整合…

Lego- 美团接口自动化测试实战(详细解析)

目录:导读 一、概述 1.1 接口自动化概述 1.2 提高 ROI 1.3 Lego 的组成 二、脚本设计 2.1 Lego 的做法 2.2 测试脚本 2.3 配置文件 三、用例设计 3.1 一些思考 3.2 Lego 接口自动化测试用例 3.3 参数化 3.4 前后置动作 3.5 执行各部分 四、网站功能 …