0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于ARM技术的uClinux系统设计与应用分析

电子设计 来源:电子设计 作者:电子设计 2020-10-30 09:57 次阅读

根文件系统是构建一个 uCLinux 嵌入式系统的重要组成部分。目前嵌入式系统可以选择的根文件系统有:Romfs、CramFS、Ramfs、Jffs2、Ext2 等等,本系统采用 CramFS 作为 uCLinux 嵌入式系统的只读根文件系统。本文讨论了 CramFS 文件系统的特点,并详细的说明了 Nor Flash 上建立一个 uClinux 的 Cramfs 根文件系统的一般步骤。


一、引言

随着电子产业的不断发展,基于 ARM 技术的系统设计和开发平台越来越多地在控制类、消费类、通信类等电子产品中广泛应用。从软件角度上看,构建基于 ARM 技术 uClinux 系统要涉及到引导加载程序、Linux 内核、文件系统、用户应用程序几部分的设计。

文件系统是操作系统中用来管理用户文件的内核软件层。文件可能存在于磁盘、网络或者是一些虚拟的文件。文件系统包括根文件系统和建立于内存设备之上文件系统。根文件系统是 uClinux 系统的核心部分,包含系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。由于嵌入式设备中 Flash 资源很紧张,如何有效地使用有限的存储空间是嵌入式开发者必须考虑的,合适的文件系统格式是解决这一问题的关键所在。本文讨论了只读压缩 CramFS 文件系统的特点,并详细的说明了 Nor Flash 上建立一个 uClinux 的 Cramfs 根文件系统的一般步骤。

二、开发环境简介

本系统采用的是宿主机+目标板的开发模式,宿主机为 PC+Cygwin1.5.1 ,目标板为采用 203MHz 的 ARM920T 内核的处理器 S3C2410x+uClinux, uClinux 版本为 2.4.18。在宿主机上将 uClinux 和应用程序编译后,下载到目标板的 Nor Flash 中,启动运行。使用的 SDRAM 是 2 片 16MB 的 HY57v561620,工作在 16bit 双字节模式下;使用的 Flash 是 2 片 AMD AM29LV160DB,大小为 2M 字节,工作在 16bit 双字节模式下。在开发的时候,将 Boot Loader 烧入 AM29LV160DB 的 1-5 扇区;将 Linux 内核映象文件 zImage 烧入 6-17 扇区;将 CramFS 文件系统映象文件烧入 18-35 扇区。

三、 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 文件系统通常包含以下几个目录:

/linuxrc 启动脚本文件,由 Boot Loader 核心命令行确定 init=/linuxrc,加载 /etc 目录为 ramfs,(cramfs 为只读文件系统),拷贝 /mnt/etc 到 /etc,配置文件目录重新加载根文件系统和 /etc 文件系统,执行 init 进程。

/bin 引导启动所需的命令或用户可能用的命令。

/sbin 系统管理员服务程序,其中最重要的是供内核初始化之后执行的 /sbin/init 进程,系统启动时由 init 解释并运行 /etc/inittab, inittab 将指导 int 去调用一个系统初始化程序 /etc/init.d/rcS。

/etc 特定机器的配置文件以及用户数据存放目录,其中的所有内容是在内核运行后,由 linuxrc 从 /mnt/etc 拷贝得到的。

/lib 文件系统上的程序所需的动态库。

/dev 驱动程序存放目录,可以在这里存放自己编写的驱动程序。

/usr 用于存放用户程序和配置文件的目录,可以根据需要进行设置。目录下的 /usr/etc/rc.local 执行本地所需要的初始化,如安装核心模块,进行网络,运行应用程序,启动图形界面等。/etc/modules.conf 在系统运行期间自动加载模块。

/mnt 用于设备安装的目录。/mnt/etc/init.d/rcS 完成各个文件系统的 Mount,执行 /usr/etc/rc.local;通过 rcS 可以调动 dhcp 程序配置网络。rcS 执行完以后,就会打开 Shell。

/proc 系统状态文件目录, 目录中的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像‘more’, ‘less’或 ‘cat’这样的程序来查看。

四、 Cramfs 文件系统的移植过程

文件系统是紧跟 uCLinux 内核放置,由内核加载,主要存放用户应用程序和配置信息。CramFS 文件系统的基本组成:初始化程序、Shell 程序以及其他 Linux 常用工具、配置文件、链接库、图形界面程序和用户应用程序等。本节将介绍移植 CramFS 文件系统的具体操作方法。

4.1、在内核中加入对 CramFS 文件系统支持

想要在系统中提供 CramFS 的能力,我们必须要在编辑 uCliunx 内核时把支持 CramFS 的选项加入。尽管 uCLinux 可以以模块的形式加载各种类型的设备驱动上,但我们选择直接把设备驱动及 CramFS 文件系统静态地编译进内核中。

在 Memory Technology Devices (MTD)选项中进行配置:

Memory Technology device (MTD) support[Y/m/n/?] Y 内存技术设备支持

MTD partitioning support [Y/m/n/?] Y 支持 MTD 分区

Direct char device access to MTD devices[Y/m/n/?] Y MTD 字符设备直接访问

Caching block device access to MTD devices[Y/m/n/?] Y MTD 块设备缓冲访问

在 File systems 选项中进行配置:

Compressed ROM file system support [Y/m/n/?] Y ROM 文件系统的支持

完成上述修改并编译后,完成 uCliunx 内核对 CramFS 文件系统的支持。

4.2、拷贝需要加入的其他文件和链接库

(1)、Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先开发的。Busybox 编译出一个单个的独立执行程序,就叫做 busybox。但是它可以根据配置,执行 ash shell 的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的 vi 编辑器,系统不可或缺的 /sbin/init 程序,以及其他诸如 ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat 等等。而所有这一切功能却只有区区 1M 左右的大小,Busybox 已经成为构建嵌入式 Linux 文件系统的必备软件。

首先我们从官方网站(http://www.busybox.org/)上下载 BusyBox 的版本 1.0.0。

#tar xvfz busybox-1.00.tar.gz

#cd busybox-1.00

#make menuconfig

下面是需要编译进 busybox 的功能选项,其他的可以根据需要自选。

Build Options

Build BusyBox as a static binary (no shared libs)

这个选项是一定要选择的,这样才能把 busybox 编译成静态链接的可执行文件,运行时才独立于其他函数库,否则必需要其他库文件才能运行,在单个 linux 内核不能使他正常工作。

Do you want to build BusyBox with a Cross Compiler

选择你自己定义的交叉编译环境。

installation Options

don’t use /usr

这个选项也一定要选,否则 make install 后 busybox 将安装在原系统的 /usr 下,这将覆盖系统原有的命令。选择这个选项后,make install 后会在 busybox 目录下生成一个叫 _install 的目录,里面有 busybox 和指向他的链接。

其他选项都是一些 linux 基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。编译 BusyBox,如果能成功编译 BusyBox,就将编译好的 busybox 复制到 CramFS 文件系统的 /bin 目录下,然后创建常用命令的建立快捷方式。建立快捷方式很简单,只要建一个符号链接,比方 ln -s /bin/busybox /bin/ls,那么,执行 /bin/ls 的时候,busybox 就会执行 ls 的功能,也会按照 ls 的方式处理命令行参数

(2)、拷贝一些管理员控制程序到 /sbin 目录下,最重要的就是要包含一个 init 命令,可以使用 busybox 提供的系统工具。比如 ln -s /bin/busybox /sbin/init,这样我们就有了系统运行不可或缺的 /sbin/init 程序了。

(3)、拷贝应用程序运行时所需要的库到 /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。

4.3 、利用 mkcramfs 工具生成 cramfs 压缩文件系统

一般情况下都要把已经规划好的目录结构转换成一个映象文件,创建 Cramfs 文件系统需要 mkcramfs 工具,mkcramfs 能把相应的 Cramfs 目录树压缩成为单一的映象文件,这个映象文件就是我们需要移植的文件系统。Mkcramfs 的命令格式为:

Mkcramfs [-h] [--e edition] [-I file] [-n name] DirName OutFile

#mkcramfs root cramfs.Img

用以上的命令就可以生成我们需要的 cramfs 文件系统映象文件,我们可以发现原本为 2.36Mbytes 大小的目录内容,被压缩成一个 1.08Mbytes 的 CramFS 文件系统映象文件, 通过 vivi 或测试程序将其写入 Flash 中就可以验证是否移植成功。

五、小结

CramFS 是一个压缩格式的文件系统,如果系统存储资源比较紧张的话,采用 CramFS 作为嵌入式 Linux 系统的根文件系统是一个不错的选择。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9097

    浏览量

    367602
  • uClinux
    +关注

    关注

    3

    文章

    75

    浏览量

    42905
收藏 人收藏

    评论

    相关推荐

    利用Arm Kleidi技术实现PyTorch优化

    PyTorch 是一个广泛应用的开源机器学习 (ML) 库。近年来,Arm 与合作伙伴通力协作,持续改进 PyTorch 的推理性能。本文将详细介绍如何利用 Arm Kleidi 技术提升 A
    的头像 发表于 12-23 09:19 150次阅读
    利用<b class='flag-5'>Arm</b> Kleidi<b class='flag-5'>技术</b>实现PyTorch优化

    相位噪声分析仪的技术原理和应用

    相位噪声分析仪是一种用于信息科学与系统科学、电子与通信技术、计算机科学技术、航空、航天科学技术等领域的电子测量仪器。以下是对其
    发表于 12-13 14:21

    数字通信分析仪的技术原理和应用

    :数字通信分析仪还可以用于系统脉冲响应的校正和校准,确保系统的准确性和可靠性。 综上所述,数字通信分析仪是一种功能强大的通信测试仪器,其技术
    发表于 12-10 14:32

    Cadence推出基于Arm系统Chiplet

    近日,Cadence宣布其首款基于 Arm系统级小芯片(Chiplet)开发成功并流片,这是一项突破性成就。这项创新标志着芯片技术的关键进步,展现了 Cadence 致力于通过其芯片架构和框架推动行业领先解决方案的承诺。
    的头像 发表于 11-28 15:35 251次阅读
    Cadence推出基于<b class='flag-5'>Arm</b>的<b class='flag-5'>系统</b>Chiplet

    导航分析仪的技术原理和应用场景

      导航分析仪的技术原理  信号接收与处理:信号接收:导航分析仪能够接收来自导航卫星、地面导航基站等发射的导航信号。这些信号包含了卫星的位置、时间等信息,以及地面基站的相关导航指引信息。例如
    发表于 11-19 15:13

    ARM技术是什么?国内有哪些ARM厂家呢?一起来了解一下!

    。通过采用动态功耗管理技术,如动态电压频率调控(DVFS)等,ARM处理器可以根据系统负载情况动态调整功耗水平,以达到性能和功耗的平衡。 高度可定制 :ARM提供IP核授权模式,芯片厂
    发表于 11-18 16:35

    Arm加入OpenCloudOS操作系统开源社区

    从 5G 基础设施和软件定义汽车,到移动端和嵌入式设备,Arm 的开源工作覆盖全球技术生态系统的方方面面。持续的开源合作与技术创新赋能全球超过 2,000 万开发者在
    的头像 发表于 11-15 11:34 355次阅读

    RISC-V和arm指令集的对比分析

    RISC-V和ARM指令集是两种不同的计算机指令集架构,它们在多个方面存在显著的差异。以下是对这两种指令集的详细对比分析: 一、设计理念 RISC-V :RISC-V的设计理念是简化指令集,提高指令
    发表于 09-28 11:05

    NFC协议分析仪的技术原理和应用场景

    NFC协议分析仪的技术原理和应用场景可以详细阐述如下:技术原理NFC(Near Field Communication,近场通信)协议分析仪是一种用于
    发表于 09-25 14:45

    Arm精锐超级分辨率技术解析

    近日,Arm 推出了 Arm 精锐超级分辨率技术 (Arm Accuracy Super Resolution, Arm ASR),这是一款
    的头像 发表于 09-03 11:28 950次阅读
    <b class='flag-5'>Arm</b>精锐超级分辨率<b class='flag-5'>技术</b>解析

    ArmArm Neoverse计算子系统(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

    Arm宣布了两款新的Arm Neoverse计算子系统(CSS),它们基于“迄今为止最好的一代Neoverse技术”。是什么让这些新产品在拥挤的计算
    的头像 发表于 04-24 17:53 1074次阅读
    <b class='flag-5'>Arm</b>新<b class='flag-5'>Arm</b> Neoverse计算子<b class='flag-5'>系统</b>(CSS):<b class='flag-5'>Arm</b> Neoverse CSS V3和<b class='flag-5'>Arm</b> Neoverse CSS N3

    fpga封装技术arm架构的优缺点

    FPGA封装技术ARM架构是两个不同的概念,分别属于硬件设计的不同领域。
    的头像 发表于 03-26 15:51 871次阅读

    Arm Helium技术诞生的由来 为何不直接采用Neon?

    经过 Arm 研究团队多年的不懈努力,Arm 于 2019 年推出了适用于 Armv8‑M 架构的 Arm Cortex-M 矢量扩展技术 (MVE)——
    的头像 发表于 02-29 17:01 2251次阅读
    <b class='flag-5'>Arm</b> Helium<b class='flag-5'>技术</b>诞生的由来 为何不直接采用Neon?

    如何使用Arm SPE进行芯片数据采集和性能分析呢?

    Arm Statistical Profiling Extension (SPE, 统计分析扩展) 是一种架构级功能,旨在增强 Arm CPU 的指令执行分析
    的头像 发表于 01-24 18:16 1824次阅读

    高速公路机电系统技术方案分析

    电子发烧友网站提供《高速公路机电系统技术方案分析.doc》资料免费下载
    发表于 01-03 10:22 2次下载