嵌入式系统为什么需要根文件系统

从两个角度来理解根文件系统的作用

运行用户应用程序
以目录+文件名的方式访问块存储设备
PS:内容参考韦东山嵌入式 linux 视频

应用程序存在根文件系统中

从无到有在 ARM 开发板中搭建 linux 系统需要三个部分

  • uboot:启动内核
  • 内核:启动应用程序
  • 根文件系统:被内核挂载、存放应用程序

那么如何理解应用程序?

类比在 ubuntu 中如何编写打印 “hello world” 应用程序

  1. 创建hello.c,编写如下代码
	#include <stdio.h>
	int main(void)
	{
	        printf("hello world\n");
	        return 0;
	}
  1. 使用命令 gcc -o hello hello.c 编译生成 hello 应用程序
  2. 在命令行中输入 ./hello 运行 hello 这个应用程序,控制台就会显示 hello world
	# gcc -o hello hello.c
	#./hello
	hello world             

同样的原理,如何在 ARM 开发板中运行上述的应用程序呢?

  1. 在 ubuntu 虚拟机中,假设已经安装好交叉编译环境(在 ubuntu 环境中生成在 ARM 平台上运行的程序)。使用命令 arm-linux-gcc -o hello hello.c 编译生成适合在开发板中运行的 hello 应用程序
  2. 将 hello 应用程序保存在根文件系统 app 文件夹中,并烧录到存储设备中去。调试好开发板和电脑之间的串口通信。开发板启动完毕后,在串口控制台输入 ./hello 运行应用程序。
	/ # ls                  //根文件系统目录 ‘/’ 表示根目录
	app         etc         linuxrc     sbin        usr
	bin         hello       lost+found  sys         var
	dev         lib         proc        tmp

	/ # cd app	        	// 进入到 app 文件夹中
	/app # ls				
	hello    hello.c
	/app # ./hello		    // 在串口控制台运行 hello
	hello world				// 运行结果,说明可以正常运行

其次,我们在串口控制台中运行的 shell 命令集本质也是应用程序,譬如 ls、cp、cd 等等。这些应用程序并不需要我们一个一个编写,使用 busybox 工具生成即可,后续文章会更新从 0 一步一步搭建根文件系统,运行打印"hello world"的应用程序。

所以基于 ARM 开发板做应用开发,比如摄像头需要启动摄像头相关的用户应用程序,而这些应用程序存放的载体–根文件系统。

用目录+文件名的方式访问块存储设备

块存储设备,比如硬盘、SD 卡、Nandflash,是分块(扇区)的,物理上从底层访问这类存储设备是按扇区号来访问的,比如一次只能擦写 512 字节。和内存的字节访问方式不同(比如用指针对内存中某一地址进行读写操作)。而文件系统封装了这些底层操作,可以以目录+文件名的方式来访问这些扇区。

猜你喜欢

转载自blog.csdn.net/qq_33626994/article/details/88759687
今日推荐