1. 根文件系统结构

/bin 存放二进制可执行命令的目录
/dev 存放设备文件的目录
/etc 存放系统管理和配置文件的目录
/home 用户主目录
/lib 存放动态链接共享库的目录
/sbin 存放系统管理员使用的管理程序的目录
/tmp 公用的临时文件存储点
/root 系统管理员的主目录
/mnt  系统临时挂载其他文件系统的目录
/proc 虚拟文件系统,可直接访问来获取系统信息
/var 某些大文件的溢出区
/usr 最庞大的目录

2.嵌入式根文件系统框架 — busybox

最小的文件系统


1)创建终端设备

mknod console c 5 1

2)添加可执行文件依赖库ld-linux.so.3

cp ld-linux.so.3 lib/

3) 查看依赖库ld-linux.so.3 是否有其他依赖

readelf -d linuxrc |grep NEEDED

busybox项目:http://www.busybox.net

3.编译busybox源码

make defconfig;make
make menuconfig
make CONFIG_PREFIX = ../mini_rootfs/ install

4.交叉编译busybox

配置交叉编译:

make menuconfig-busybox setting-build option-cross cpmpilerprefix   第一步设置交叉编译器-path to sysrootb          第二步设置交叉编译器路径

嵌入式常用的工具命令:

设备驱动管理:

 fdisk   fsck    hwclock     mkdosfsinsmod   rmmod   rmmod       lsmod   mknod   modprobelsusb   mdev    mount       umount

文件编辑处理:

 mkdir   mkfifo  ln      mv      cp      touch       rm      unlink  awk     cat     cut     find    vi      sed         wc      tar     grep    head    tail    less    more    xargs   od  stat

网络信息管理:

 udhcpc      udhcpd      route       netstat     ping        ifconfig

系统信息管理:

 chmod       clear       date        dd      df      echo        freeipcrm       ipcs            ls      ps      pwd     top     uptimekill      killall     reboot      sleep       sysctl      usleep

5.busybox的启动脚本分析

init.c

① 信号处理
②初始化控制终端
③环境变量配置
④单用户模式
⑤解析inittab文件

new_init_atcion :

  • sysiniit: /etc/iniit.d/rcS
  • askfirst
  • ctrl_alt_del
  • shutdown
  • restart

⑥运行action::sysiniit、wait、once、respawn
⑦系统重启

/etc/iniittab文件:

sysinit ——为init提供初始化命令行的路径及脚本程序
respawn ——每当相应的进程终止执行便重启
askfirst ——类似respawn ,不过它的主要用途是减少系统上执行的终端应用程序的数量。
wait ——告诉init必须等到相应的进程一次,而且不会等待它完成
once —— 仅执行相应的进程一次,而且不会等待它完成
restart——当init重启时,执行相应的进程,通常此处所执行的进程就是init本身
shutdown——当系统关机时,执行相应的进程

/etc/init.d 目录下的文件:

初始化脚本:rcS -> 系统环境准备与配置

应用及服务脚本:

K(kill)开头的文件:系统初始化过程中不启动该服务
S(start)开头的文件:系统初始化过程中启动该服务
数字越大,优先级越低

6.常见的嵌入式文件系统


1)procfs

procfs 是linux内核信息的抽象文件借口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中/proc。通过echo或cat命令可对系统信息 进行查取和调整。系统工具也通过procfs获取内核参数,如:ps、lspci等。

procfs的内容: 进程信息和系统信息

procfs信息查看: cat /proc/cmdline

2)tmpfs

tmpfs是一种虚拟内存文件系统,使用内存作为存储分区进行文件的临时性存取,掉电会丢失,创建时不需要使用mkfs等进行格式化。

tmpfs的挂载:

mount -t tmpfs -0 size = 10M tmpfs /tmp
df -h

tmpfs的作用:

提高存存效率,存在ram的
避免对flash存储设备的频繁读写,提高使用寿命

3)devfs

为设备文件提供一种类似于文件的方法来管理位于/dev目录下的所有设备。

4)sysfs

挂载于 /sys目录下,把实际连接到系统上的设备和总线组织成一个分级的文件。

5) nfs
挂载远程主机的目录,访问该目录就像访问本地目录一样。

nfs挂载格式:mount -o nolock [server IP]:/[share dir] [local mount dir]

6) ramdisk

占据一块固定的内存,虚拟化成ram的快设备。事先要使用特定的工具如mke2fs格式化,还需要一个文件系统驱动来固定容量空间。

7)initramfs

过渡根文件系统机制:将加载真正的根文件系统所需的设备驱动、工具以及初始化程序先加载到内存运行 . iniitramfs 就是过渡根文件系统的一种。

initramfs : initial ram file system
在内核启动完成后把它复制到rootfs中,作为内核初始化的根文件系统,完成挂载系统真正根文件系统。

使用initramfs

  • init 程序文件:hello

    交叉编译:arm-linux -gcc -static hello -o hello.c
    修改命名:mv hello init

  • 打包initramfs镜像

    find .|cpio -o -H newc |gzip > ~myinitramfs.cpio.gz

8)只读压缩文件系统

提高文件系统的可靠性安全性与降低文件系统的空间占用:只读 + 压缩

cramfs文件系统: compressed ROM filesystem

特性:
支持 最大分区: 272MB (256MB + 16MB)
支持最大文件:16M
压缩格式:zlib ,压缩比一般可以达到1:2,美页单独进行压缩处理
动态解压:访问数据时实时解压访问到的页到内存,节省内存空间
使用透明:解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护,对外部使用透明

squashfs文件系统:

特性:
支持 最大分区: 16EB
支持最大文件:2TB
支持多种压缩格式:GZIP LZMA /L2MA2(XZ) LZO


9)Flash 文件系统:


嵌入式系统开发-麦子学院(15)-根文件系统相关推荐

  1. 嵌入式系统开发-麦子学院(4)——Linux C初级编程2

    上篇文章讲到了Linux C初级编程的C语言基础部分:https://blog.csdn.net/QiHsMing/article/details/84947781 下面接着Linux C初级编程的L ...

  2. 嵌入式系统开发-麦子学院(12)——ARM Cortex A8 硬件基础(2)

    S5PV210启动原理 ARM启动顺序 BL0(IROM)的作用 初始化系统时钟,设置看门狗,初始化栈和堆 加载BL1 BL1的作用 初始化RAM,关闭Cache,设置栈 加载BL2 BL2的作用 初 ...

  3. 嵌入式系统开发-学习路线

    嵌入式系统开发 课程链接 随着嵌入式设备的普及,嵌入式应用的需求量也随之增大,本课程将重点培养基于linux系统下的嵌入式应用开发,包括5个阶段,其中课程涵盖了linux系统下的多进程.多线程嵌入式开 ...

  4. 嵌入式系统开发学习如何起步、如何深入?(转)

    学习有捷径吗?俺认为是有的,正确的道路就是捷径. 就好象是爬山,如果有导游图,那就能找到一条最正确的路线:如果没有导游图,自己瞎琢磨,东问西问,也未必能找到最佳的路线. 有时候回首前尘,会谓叹,要是当 ...

  5. 《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——第1章 系统•嵌入•硬件 01-01 Welcome on board!...

    本节书摘来自异步社区<嵌入式系统开发之道--菜鸟成长日志与项目经理的私房菜>一书中的第1章,第01-01节,作者 邱毅凌,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  6. 嵌入式系统开发怎样快速度入门

    http://wenda.tianya.cn/wenda/thread?tid=392a249d9d6856c5 实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条 ...

  7. 《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——02-04项目范围(Scope)管理...

    本节书摘来异步社区<嵌入式系统开发之道--菜鸟成长日志与项目经理的私房菜>一书中的第2章,第2.4节,作者:邱毅凌,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  8. 嵌入式系统开发学习步骤(Linux高级编程学习顺序)

    2019独角兽企业重金招聘Python工程师标准>>> 嵌入式系统开发学习步骤(Linux高级编程学习顺序) 1.Linux 基础 安装Linux操作系统 Linux文件系统 Lin ...

  9. 嵌入式系统开发笔记0_0:目录

    本系列文章将向大家介绍嵌入式系统开发的各方面知识. 本系列文章所介绍的知识和内容,除电路图设计外,其它均采用开源系统,所以你不会在这个系列文章中看到Keil.IAR等软件. 本系列文章涉及C.C++. ...

  10. 嵌入式系统开发期末复习

    嵌入式系统开发 嵌入式系统概述 ARM技术及体系结构 ARM7TDMI指令系统 嵌入式系统概述 1.什么是嵌入式系统?有何特点? 嵌入式系统是以应用为中心,以计算机技术为基础,且软.硬件可裁剪的, 适 ...

最新文章

  1. 【Dijkstra算法】未优化版+优先队列优化版
  2. 被黑客们使用的代码混淆技术
  3. 智能车竞赛技术报告 | 节能信标组 - 华南理工大学 - 华工雨花队
  4. sql对应C#的类型
  5. Go语言 Redis的使用
  6. 7-Flink的分布式缓存
  7. python自动化办公excel-Python自动化办公之操作Excel文件
  8. 区块链项目开发最容易受区块链技术影响的行业
  9. 自然语言处理-错字识别(基于Python)kenlm、pycorrector
  10. 服务器主机本地系统服务受限,Win10系统出现服务主机本地系统网络受限怎么办 如何解决...
  11. 【笔记】uniapp APP运行到夜神模拟器
  12. uva10246- Asterix and Obelix
  13. LeetCode.495 Teemo Attacking
  14. 微信小程序,短信验证码登录,设置密码,密码强度校验
  15. 游戏电影——《落花辞》
  16. 网上交易的卫兵—数字证书和数字签名
  17. TiDB 实战优化之 SQL 常见问题与优化案例
  18. 对抗样本方向(Adversarial Examples)2018-2020年最新论文调研
  19. 【Scratch】《零基础入门学习Scratch》(小甲鱼)笔记二
  20. VMware安装安卓模拟器

热门文章

  1. 21张手机壁纸,送给我爱的你们~
  2. python:实现牛顿法算法(附完整源码)
  3. 为Windows Live Writer写一个简单的插件
  4. 今天16:00 | 中科院计算所研究员孙晓明老师带大家走进量子的世界
  5. java subject类的作用_RxJava2 系列-3:使用 Subject
  6. 如何选一款软件助力企业腾飞
  7. 鬼迷心窍 歌词翻译 中译日
  8. EasyExcel导出设置表头字体样式和批注
  9. Cesium 加载地形数据
  10. 在c语言程序中添加背景音乐,怎么给你的C语言程序添加BGM背景音乐?