行情
HOME
行情
正文内容
挂载nand flash 嵌入式基础知识归纳,笔面试预备
发布时间 : 2024-10-07
作者 : 小编
访问数量 : 23
扫码分享至微信

嵌入式基础知识归纳、笔面试预备

由于字数有限,可关注公众号获取完整原文:

xfxuezhang

堆和栈的区别

数据结构中的堆和栈

:是一种可以实现“先进后出 ”的存储结构。操作仅限于栈的顶部。常应用于实现递归功能方面的场景

:是一种经过排序的完全二叉树 。其中,节点是从左到右 填满的,并且最后一层的树叶都在最左边;每个节点的值都小于(或者都大于)其子节点的值。因为堆有序的特点,一般用来做数组中的排序,称为堆排序。

内存分配中的堆和栈

分配方式

:由编译器自动分配和释放的,处于相对较高的地址,其栈地址是向下增长的。

:由程序员手动完成申请和释放,地址是向上增长的。

存储内容

:主要用于存放函数的参数与局部变量等

:具体存储内容由程序员根据需要决定存储数据

生存周期

:其生存周期也只在函数的运行过程中,在运行后就释放,并不可以再次访问

:动态内存的整个生存期是由程序员自己决定的,使用非常灵活。但必须及时释放它,否则将会导致运行的程序出现内存泄漏等错误。

分配效率

:栈内存分配运算内置于处理器的指令集中,它的效率一般很高

:由函数库提供,机制复杂(由链表记录空闲内存区域),分配效率比栈要低得多

内存碎片

:不会存在这个问题

:频繁分配和释放不同大小的堆空间会造成内存空间的不连续,从而造成大量碎片,导致程序效率降低

数据结构

满二叉树 :二叉树中除了叶子结点,每个结点的度都为 2。完全二叉树 :二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布。一颗完全二叉树上有个结点,求叶子节点个数: 除以2向上取整 二叉树性质因为所以由于该等式右边为奇数,左边的只能是偶数又因为完全二叉树中度为结点个数要么是要么是,所以只能是因此所以

二叉树的性质

二叉树中,第 层最多 有 个结点。如果二叉树的深度为 ,那么此二叉树最多 有 个结点。二叉树中,终端结点数(叶子结点数)为 ,度(子树数量)为 的结点为 ,度为 的结点数为 ,则 。总结点。包含个结点的二叉树 的高度至少 为。个结点的完全二叉树 的深度为 。 表示取小于 的最大 整数。当 时,父亲结点为结点 。( 时,表示的是根结点,无父亲结点)如果 (总结点的个数) ,则结点 肯定没有左孩子(为叶子结点);否则其左孩子是结点 。如果 ,则结点肯定没有右孩子;否则右孩子是结点 。

判断合法的出栈序列

按顺序入栈的序列,任意元素 e ,比 e 先入栈的元素,并且比 e 后出栈的元素,一定是逆序的。

例: 设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( )。A. 1 2 4 3B. 2 1 3 4C. 1 4 3 2D. 4 3 1 2E. 3 1 2 4

解法: 以E选项讲解

选择任意元素e ,这里选择3比3后出栈的有三个元素 1 2 4其中比3先入栈的有两个元素 1 2但是1 2是正序的,而不是逆序的所以这个序列不是合法出栈序列

算法相关

排序算法的时间复杂度和空间复杂度

this指针

this指针指向被调用的成员函数所属的对象 。本质是一个指针常量 ,储存了调用他的对象的地址

用途:

当形参和成员变量同名时,可用this指针来区分在类的非静态成员函数中返回对象本身 ,可使用return *this

特点:

只能在成员函数 中使用,在全局函数、静态成员函数中都不能使用 this 。this始终指向当前对象,静态成员函数属于类。this 指针是在成员函数的开始前构造 ,并在成员函数的结束后清除 。和函数的其他参数生命周期一样。this 指针会因编译器不同而有不同的存储位置,可能是栈、寄存器或全局变量 。编译器在生成程序时加入了获取对象首地址的相关代码并把获取的首地址存放在了寄存器中。大多数编译器是在创建对象 的时候,向ecx寄存器传递this指针。

计算机网络

计算机网络笔记

TCP/IP五层模型

5、会话层 管理主机之间的会话进程,即负责建立、管理、终止 进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步 。 数据传输基本单位为:报文6、表示层 对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换 等。 数据传输基本单位为:报文7、应用层 为操作系统或网络应用程序提供访问网络服务的接口。直接为用户的应用进程提供服务(HTTP、FTP等)。 数据传输基本单位为:报文网络互连的中间设备 物理层 使用的中间设备称为 转发器 数据链路层 使用的中间设备称为 网桥/桥接器 网络层 使用的中间设备称为 路由器 网络层以上 使用的中间设备称为 网关 IP地址及分类 {<网络号>,<主机号>}

第一个字段第二个字段网络号,标志主机或路由器所连接到的网络。主机号,标志该主机或路由器

类别网络号主机号范围A类(0)8位24位1.0.0.1 - 126.255.255.254B类(10)16位16位128.1.0.1 - 191.254.255.254C类(110)24位8位192.0.1.1 - 223.255.254.254

类别最大网络数第一个网络号最后一个网络号最大主机数A类126(2^7 - 2)1.0.0.0126.0.0.02^24 - 2B类16383(2^14 - 1)128.1.0.0191.255.0.02^16 - 2C类2097151(2^21 - 1192.0.1.0223.255.255.02^8 - 2

注:

A类网络号减2:1、IP全0表示 本网络; 2、IP 127(01111111)表示 环回 测试地址 A类主机号减2:1、全0表示所连接到的单个网络地址; 2、全1表示所有主机 B类网络号减1:1、前面两位(1 0)已经固定,不会出现全0或全1; 2、128.0.0.0不指派 B类主机号减2:扣除全0和全1的情况 C类网络号减1:1、前面两位(1 1 0)已经固定,不会出现全0或全1; 2、192.0.0.0不指派 C类主机号减2:扣除全0和全1的情况 其他 控制消息 是指网络通不通、主机是否可达、路由是否可用 等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递 起着重要的作用。IP地址放在IP数据报的首部,而硬件地址放在MAC帧的首部。在网络层和网络层以上使用的是IP地址,而数据链路层及以下使用的是硬件地址使用抽象的IP地址,而不直接使用硬件地址通信的原因:全世界存在不同的网络使用不同的硬件地址,要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,但IP编址把这个复杂问题解决了 IP首部的固定长度是 20字节 IP数据报的数据部分在 4字节的整数倍 时开始数据报能在互联网中经过的路由器的最大数值是 255 , 若把TTL初始值设置为“1”,表示 这个数据报只在本局域网中传送 划分子网的方法:从网络的主机号借用若干位作为子网号 IP地址 = {<网络号>,<子网号>,<主机号>}子网掩码:将三级IP地址的子网掩码与收到的数据报的目的IP地址逐位相与,得出所要找的子网的网络地址 无分类编制CIDR的特点:1、消除了传统的A、B、C类地址以及划分子网的概念;2、把网络前缀相同的连续的IP地址组成一个“CIDR地址块” IP = {<网络前缀>,<主机号>}CIDR斜线记法:IP地址后面加上斜线“/”,然后写上网络前缀所占的位数 网络号 的位数直接决定了可以分配的网络数主机号 的位数则决定了网络中最大的主机数

Linux相关

文件权限符号

第一个字符表示文件类型 :普通文件:-目录文件:d字符设备文件:c块设备文件:b符号链接文件:l命名管道文件:psocket文件:sr:读权限。w:写权限。x:可执行权限。-:没有权限。s:SET位可执行权限。SUID:只对二进制文件有效SGID:对普通文件和目录有效t:粘滞位权限。Sticky。在该目录创建的文件或目录只有创建者才有权限删除。-rwxr-xr-x:文件类型(普通文件-),所有者权限(r读/w写/x可执行),所属组的权限(r读/x可执行),其它用户权限(x可执行)权限属性后面有 (.),表示该文件带有"SELinux的安全上下文";权限属性后面标记为加号 (+),表示使用了ACL(Access Control List)权限。如果文件权限后面附加一个空格 ,则表示系统没有可替换的访问控制措施。

修改文件权限

chgrp(change group):改变文件所属用户组chown(change owner):改变文件所有者chmod(change mod):修改文件的权限 # 设置一个可执行文件,不让其他人修改 chmod 755 filename # -rwxr-xr-x # 让文件拥有执行权限,但不知道原权限 chmod a+x filename命令身份操作文件参数chmodu g o a+(加入) -(除去) =(设置)r w x文件或目录u = user, g = group,o = other, a = all

目录结构

/ :根目录只有root用户具有该目录下的写权限/bin :用户二进制文件包含二进制可执行文件,包含常见的Linux命令。/sbin :系统二进制文件包含二进制可执行文件,但该目录下的Linux命令通常由系统管理员使用,对系统进行维护/etc :配置文件包含所有程序所需的配置文件,也包含了用于启动/停止单个程序的启动/关闭shell脚本/dev :设备文件包括终端设备、USB或连接到系统的任何设备/proc :进程信息这是一个虚拟的文件系统,包含正在运行的进程的信息。/var :变量文件可以找到内容可能增长的文件。包括:/var/log:系统日志文件/var/lib:包和数据库文件/var/mail:电子邮件/var/spool:打印队列/var/lock:锁文件/tmp :临时文件包含系统和用户创建的临时文件,系统重启后,文件都将删除/usr :用户程序包含二进制文件、库文件、文档和二级程序的源代码。包括:/usr/bin:包含用户程序的二进制文件/usr/sbin:包含系统管理员的二进制文件/usr/lib:包含/usr/bin和/usr/sbin用到的库/usr/local:包含从源安装的用户程序/home :HOME目录所有用户用home目录来存储他们的个人档案/lib :系统库包含支持位于/bin和/sbin下的二进制文件的库文件/boot :引导加载程序文件把汗引导加载程序相关的文件/opt :可选的附加应用程序包含从个别厂商的附加应用程序。附加应用程序应该安装在/opt或/opt的子目录下/mnt :挂载目录临时安装目录,系统管理员可以挂载文件系统/media :可移动媒体设备用于挂载可移动设备的临时目录

常用命令

新手必须掌握的Linux命令

常见执行Linux命令的格式:命令名称 [命令参数] [命令对象]

arch:显示机器的处理器架构

uname -a:完整地查看当前系统的内核名称、主机名、内核发行版本、处理器类型等信息

uname -r:显示内核版本

文件系统

文件系统是针对于存储器分区 而言的,而非存储芯片。

基于FLASH的文件系统 (基于MTD驱动层)jffs2(Journalling Flash FileSystem v2)日志闪存文件系统主要用于NOR 型闪存,不适合容量较大的NAND。特点 :可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点 :当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。

存储设备

Flash

结合ROM和RAM的长处,具备可擦除可编程的性能,不会断电丢失数据,可以快速读取数据。

NOR Flash

接口时序同SRAM,易使用读取速度较快擦除速度慢写入速度慢(需要先擦除)随机存取速度较快,支持XIP,适用于代码存储。常用于存放引导程序、根文件系统等单片容量较小

NAND Flash

地址/数据线复用,数据位较窄读取速度较慢擦除速度快写入速度快顺序读取较快,随机存取速度慢,适用于数据存储。常用于存放用户文件系统等。单片容量较大

嵌入式平台启动流程

系统从装有启动代码的Nor Flash启动后,初始化对应的硬件,包括SDRAM等,然后将Nand Flash上的Linux 内核读取到内存中,做好该做的事情后,就跳转到SDRAM中去执行内核了,然后内核解压(如果是压缩内核的话,否则就直接运行了)后,开始运行,在Linux内核启动最后,去Nand Flash上,挂载根文件,比如jffs2,yaffs2等,挂载完成,运行初始化脚本,启动consle交互,才允许你通过console和内核交互。至此完成整个系统启动过程。

RAM(Random Access Memory)

随机访问存储器,直接与CPU交换数据,也叫内存。可以随机读写,速度很快。断电后数据丢失。

SRAM (Static RAM)

静态RAM,速度非常快,不需要刷新电路即可保存数据。集成度较低,非常昂贵,多用于CPU的一二级缓存L1/L2 Cache。

DRAM (Dynamic RAM)

动态RAM,速度比SRAM慢,需要定时刷新充电才能保存数据。比SRAM便宜很多,多用于计算机内存。

DDR RAM (Double-Data-Rate RAM)

可以在一个时钟读写两次数据,使得数据传输速度加倍了

「干货」嵌入式Linux系统移植四大步骤(下)

上周,我们学习了嵌入式Linux系统移植的前面两个步骤 →《嵌入式Linux系统移植的四大步骤(上)》,今天来学习后面两个步骤吧~

03 第三部分:kernel的配置、编译、和移植

01 将下载好的linux-2.6.35.tar.bz2拷贝到主目录解压

02 修改顶层目录下的Makefile,主要修改平台的体系架构和交叉编译器,代码如下:

ARCH ?= $(SUBARCH) CROSS_COMPILE ?= CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) 修改以上代码为: ARCH ?= arm ---->体系架构是arm架构 CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabi- ---->交叉编译器是arm-cortex_a8平台的 注意:这两个变量值会直接影响顶层Makefile的编译行为,即选择编译哪些代码,用什么编译器进行编译。

03 拷贝标准版配置文件,目的是得到跟我们开发板相关的配置信息。

$ cp arch/arm/configs/s5pc100_defconfig .config

这里拷贝arch/arm/configs/s5pc100_defconfig到 .config文件是选取跟我们开发板相关的代码。因为Linux支持的平台非常非常多,不仅仅是ARM处理器,当然我们编译的时候只需要编译跟我们平台相关的代码就可以了,平台相关的不需要编译,那么就有个问题,Linux系统中的源代码文件有一万多亿个,面对这么庞大的文件数量,我们如何去选择呢?

其实,我们担心的问题也是写操作系统的那哥们早就担心过的问题了,只不过人家已经把这个问题帮我们解决了,我们只需进行很简单的操作,就可以选择出我们要编译的代码,具体的方法就是把相应平台的_deconfig直接拷贝到顶层目录的.config文件中,这样.config文件中就记录了我们要移植平台的平台信息,因为在配置内核时,系统会把所有的配置信息都保存在顶层目录的.config文件中。注意在第一次,进行make menuconfig时,系统会根据我们选取的平台信息自动选取相关的代码和模块,因此我们只需要进入然后再退出,选择保存配置信息就行了,系统会把这些跟我们移植平台相关的所有配置信息全部保存在顶层目录的.config文件中。

04 配置内核

$make menuconfig

注意:第一次进去,不做任何操作,直接推出,在推出时提示是否保存配置信息,一定要保存配置信息,点击“YES”。这样我们的.config中就已经保存了我们开发平台的信息。

在这个环节,我们需要关心一个问题,make menuconfig时,系统到底都做了哪些事情?为什么会出现图形化的界面?图形化的界面中的相关内容是从哪里来的?

图形化的界面当然是由一个特殊的图形库来实现的,还记得第一次make menuconfig时,系统并没有出现图形化的界面,而是报错了,并且提示我们缺少 ncurses-devel ,此时只需要按照要求安装一个libncurses5-dev就行了,sudo apt-get install libncurses5-dev,有了这个图形化库的支持,我们才能够正常显示图形化界面。

好了,图形化界面的问题解决了,那还有另外一个问题就是图形化界面里面的内容是从哪里来的?要回答这个问题,我们就要提一下Linux内核的设计思想了,Linux 内核是以模块的方式来组织这个操作系统的,那么,为什么要用模块的方式来组织呢?模块的概念又是什么呢?在此来一一回答这个问题。

Linux2.6内核的源码树目录下一般都会有两个文件:Kconfig和Makefile。分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。每个目录都会存放功能相对独立的信息,在每个目录中会存放各个不同的模块信息,比如在/dev/char/目录下就存放了所有字符设备的驱动程序,而这些程序代码在内核中是以模块的形式存在的,也就是说当系统需要这个驱动的时候,会把这个驱动以模块的方式编译到系统的内核中,编译分为静态编译和动态编译,静态编译内核体积比动态编译的体积要大,前面已经说了每个目录下面都会有一个Kconfig的文件,我们还会问,这个文件中都存放了什么信息?前面说了,每个目录的Kconfig文件描述了所属目录源文件相关的内核配置菜单,有其特殊的语法格式,图形化界面的文字正是从这个文件中读取出来的,如果把这个文件中的相应目录文件的信息全部删除,那么在图形化界面中将看不到该模块的信息,因此也不能进行模块的配置。

在内核配置make menuconfig(或xconfig等)时,系统会自动从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。在内核编译时,主Makefile调用这个.config,(.config的重要性就体现在,它保存了我们的所有的配置信息,是我们选取源代码并且进行编译源代码的最终依据!!!) 就知道了用户对内核的配置情况。上面的内容说明:Kconfig就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,可以通过修改Kconfig来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的Makefile。因此,一般添加新的驱动时需要修改的文件有两种,即:Kconfig 和相应目录的Makefile(注意不只是两个 ),系统移植的重要内容就是给内核添加和删除相应的模块,因此主要修改的内核文件就是Kconfig 和相应目录的Makefile这两个文件。

05 编译内核

$make zImage

通过上述操作我们能够在 arch/arm/boot 目录下生成一个 zImage 文件,这就是经过压缩的内核镜像。

内核的编译过程是非常复杂的,注意这里的编译是静态编译,此时会执行顶层目录下的Makefile中的zImage命令,在执行的过程中,会根据当前目录的.config文件去选择编译源代码。编译内核的具体步骤比较复杂,有时间会另写文章详细描述。

06 通过tftp网络服务下载测试内核

setenv bootcmd tftp 20008000(内存地址) zImage\;go 20008000 setenv bootargs nfs nfsroot=192.168.1.199(虚拟机的ip):/source/rootfs ip=192.168.1.200(开发板的ip) init=/linuxrc(第一个要启动的用户进程) ttySAC0,115200(设置中断为串口1,波特率为:115200)

保存环境变量,复位开发板,测试是否能够正常启动(注意:在此之前应设置好需要nfs挂载的文件系统,最后才能看到效果).内核测试和启动过程也是比较复杂的,在后续的文章中会详细介绍。

04 第四部分:根文件系统的介绍

由本文的第一张图:Flash存储中存放文件的分布图可知,文件系统的制作和移植是系统移植的最后一道工序了,在这里首先要提几个问题:

1. 什么是文件系统? 2. 如何实现文件系统? 3. 常用的文件系统有哪些?为什么需要这些文件系统?

下面来一一回答这些问题:

文件系统我们在日常生活中则很少听说,但是它确实存在,只是名字不叫文件系统罢了,一般叫资料库。资料库里面的文件众多,我们如何快速准确的找到我们要的那份文件呢?资料库采用了分类索引的方法来实现快速查找。类似于我们学校图书馆的管理方式,一楼可能是哲学类,二楼是社科类的,三楼是电子类的,四楼是计算机类的…………等等,我们把这种进行了分类索引的资料库叫文件系统。

对于计算机而言,文件其实就是资料数据,只能存储在物理介质上面,比如:硬盘,但是我们人不可能自己读取物理介质上的文件,或者自己把文件写入物理介质,物理介质上文件的读写只能采用程序来完成,为了方便实现,程序又被分成了物理介质驱动程序、内容存储程序和文件内容存储程序。物理介质驱动程序专门用于从物理介质上存取数据;内容存储程序用于把文件内容和文件属性信息打包;文件内容存储程序用于把用户输入形成文件内容,或者取得文件内容显示出来。

我们可以把一个文件系统(倒树)分解成多个文件系统(倒树)分别存放到存储介质上,比如:一个存储到光盘里,一个存储到硬盘中,在使用时,我们把光盘里的文件系统的根目录挂到硬盘文件系统的一个目录下面,这样访问这个目录就相当于是访问光盘的根目录了,找到了根目录,我们也就可以访问整个光盘上的文件系统了。

“在Linux系统中一切皆是文件”这句话是我们学习Linux系统的时候常常听到的一句话。虽然有些夸张,但是它揭示了文件系统对于Linux系统的重要性;实际上文件系统对于所有的操作系统都很重要,因为它们把大部分的硬件设备和软件数据以文件的形式进行管理。Linux系统对设备和数据的管理框架图如下:

[说明]

A. VFS(virtual file system)是虚拟文件系统,它管理特殊文件(虚拟文件)、磁盘文件和设备文件

B. fs_operations结构是由一系列文件操作接口函数组成,由文件系统层来完成,为VFS提供文件操作;

C. 在文件系统层,磁盘文件要实现各种文件系统(如:ext2),设备文件要实现各种抽象的设备驱动

D. 在设备驱动层,磁盘驱动要实现各种磁盘的驱动程序,其他设备驱动要实现具体的设备驱动

E. 物理层就是设备自身

为什么会有不同的文件类型?

由于存储介质有很多种,所以没有办法用一种统一的格式存放文件系统到各种不同的存储介质上,而是需要多种不同的存储格式来适应各种存储介质的特性,以求达到存取效率和空间利用率的最优化,这样就需要对每种存储格式制定一个规范,这些规范就叫文件系统类型。常见的文件系统类型有:1.Dos FAT162.windows FAT16、FAT32、NTFS3.Linux Minix、ext、ext2 、ext3 、ISO9660 、jffs2, yaffs, yaffs2、cramfs, romfs, ramdisk, rootfs、proc、sysfs、usbfs、devpts、 tmpfs & ramfs、 NFS

由此可见,Linux支持的文件系统最多。以不同的介质来分类,如下所示:? 磁盘 FAT16、 FAT16、FAT32、NTFS、ext、ext2 、ext3、Minix? 光盘 ISO9660、? Flash jffs2, yaffs, yaffs2、cramfs, romfs? 内存 Ramdisk、tmpfs & ramfs? 虚拟 rootfs、proc、sysfs、usbfs、devpts、NFS

常用的存储介质理论上都可以用于存储Linux支持的文件系统;因为我们这里只研究嵌入式系统,而嵌入式系统由于体积和移动特性的限制,不能采用磁盘和光盘,所以只能采用flash类的存储设备、内存和虚拟存储设备作为文件系统的存储介质;

flash芯片的驱动程序是由系统来提供,所以它的存取特点完全是flash自身的特点,这时最好有更加适合flash的文件系统——Jffs、Yaffs、Cramfs和Romfs。这些文件系统都是嵌入式Linux系统中常用的文件系统,可以根据特点来选择使用它们,特点如下:

共同点 基于MTD驱动 Jffs A.针对NOR Flash的实现 B.基于哈希表的日志型文件系统 C.采取损耗平衡技术,每次写入时都会尽量使写入的位置均匀分布 D.可读写,支持数据压缩 E.崩溃/掉电安全保护 F.当文件系统已满或接近满时,因为垃圾收集的关系,运行速度大大放慢

Yaffs A.针对Nand Flash的实现 B.日志型文件系统 C.采取损耗平衡技术,每次写入时都会尽量使写入的位置均匀分布 D.可读写,不支持数据压缩 E.挂载时间短,占用内存小 F.自带Nandflash驱动,可以不使用VFS和MTD

Cramfs A.单页压缩,支持随机访问,压缩比高达2:1 B.速度快,效率高 C.只读,有利于保护文件系统免受破坏,提高了系统的可靠性,但是无法对其内容进行扩充

Romfs A.简单的、紧凑的、只读的文件系统 B.顺序存放数据,因而支持应用程序以XIP(execute In Place,片内运行)方式运行,在系统运行时,节省RAM空间 特有的文件系统类型: Ramdisk文件系统

在Linux系统中,内存经常用于存储文件系统,这种叫做Ramdisk,Ramdisk有两种,一种是完全把内存看成物理存储介质,利用内存模拟磁盘,运用磁盘的文件系统类型;另一种只是在内存中存储了文件系统逻辑结构,运用tmpfs & ramfs文件系统类型: tmpfs & ramfs

01 概述

用物理内存模拟磁盘分区,挂载这种分区后,就可以跟读写磁盘文件一样读写这里面的文件,但是操作速度要比磁盘文件快得多;所以一般应用在下面几个方面: 1)读写速度要求快的文件应该放在这种文件系统中 2)磁盘分区为flash的情况下,把需要经常读写的文件放在这种文件系统中,然后定期写回flash 3)系统中的临时文件,如/tmp、/var目录下的文件应该放在这种文件系统中 4)/dev设备文件(因为设备文件随驱动和设备的加载和卸载而变化),应该放在这种文件系统中

02 特点

1)由于数据都存放在物理内存中,所以系统重启后,这个文件系统中的数据会全部丢失 2)ramfs在没有指定最大的大小值情况下,会自动增长,直到用掉系统中所有的物理内存为止,这时会导致系统的崩溃,建议挂载时最好限定其最大的大小值 3)tmpfs如果指定了大小值,自动增长至大小值后,系统会限定它的大小;这个文件系统占用的物理内存页可以背置换到swap分区,但是ramfs不行

不同的文件系统具有不同的制作方法,有的比较复杂,有的比较简单,在此由于篇幅限制,先不做介绍,在后续的文章中会单独介绍文件系统的制作。

相关问答

用51单片机对 nandflash 进行读写以实现大容量存储要注意什么?

实没啥需要特别注意的。要说的话对于初学者需要注意电源别弄错了;如果电源域不同,则需要确认管脚电气参数是否匹配,必要时添加接口转换芯片;剩下的就是按照...

nand flash 详解?

Nand-flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速...

内核kernel以及根文件系统rootfs是如何映射到对应的 nandflash 的?

需要修改Linux内核源码中的一个控制logbuffersize的宏:CONFIG_LOG_BUF_SHIFT,buffersize是2^shift,加大这个就可以。一、配置$...

固态硬盘的 NAND Flash 分哪几种?有什么特点?

it/cell,...MLC=Multi-LevelCell,即2bit/cell,读取时间较长,为50μs,可擦写次数较SLC短,价格一般。(七彩虹SL500Boost采用Intel原厂...

UBOOT移植时,不同型号的 NANDFLASH 存储的起始地址怎么得到?

你只能通过NandFlash控制器访问NandFlash,即是只要知道Nand控制器的寄存器地址即可。NandFlash不是一个RamLike的器件。Uboot放入nand中,在nand的0地址开...

嵌入式 Flash 读写操作该如何进行设计?

Flash存储芯片的通讯方式以SPI居多,在实现flash读写时就是要实现SPI的通讯协议,与EEPROM不同的是,SPI在操作时是按照PAGE页进行整页擦除写入的,这一点需要注...

stm32f4外接 flash 最大多大?

看下STM32f103的FSMC寻址地址是从0x70000000到0x8FFFFFFF就是8*64M的nandflashbank2,bank3还支持SRAM看下STM32f103的FS...

FLASH 芯片是什么?

Flash根据技术方式分为Nand、NorFlash和AG-ANDFlash三类;NorFlash常常用于存储程序,最初MP3芯片不太成熟的时,曾经有使用过NorFlash,比如炬力AT....

nand flash 有什么区别?

1.性能比较flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多...●N...

镁光 NANDflash 块锁了怎么解锁不了,锁住了只能读 - 153****4...

原因:现在很多带多媒体功能电脑键盘都会有一个键盘锁功能,锁键盘后,根据出厂设定全部键盘按键或者大部按键将不能使用。如果不小心锁上的话解锁就行...

 南宁车祸  测算生男生女 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部