文章首发于公众号:焊死车门
一、概念:
固件是一种写入硬件设备的软件,作用是对应用和各项系统功能实时控制。是担任着一个系统最基础最底层工作的软件。而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。运行固件的设备称为嵌入式系统,比如:智能手机、路由器、无人机、机顶盒都是运行固件的嵌入式设备。大家听过做多的固件就是BIOS。
简单来说,固件就是一个操作系统,比如路由器的固件,就是指路由器的操作系统,MP4的固件就是MP4的操作系统等。
二、固件的组成:
一般要使开发板成功运行固件,需要完成以下三个方面的开发工作:
1、bootloader(启动装载)
2、内核
3、根文件系统
Bootloader:
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。
内核:
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。
根文件系统:
根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
现在大部分固件使用的系统为linux系统,而嵌入式linux根文件系统中一般有一下几个必须存在的目录:
/bin目录
该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。
/dev目录
该目录下存放的是设备与设备接口的文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。
/etc目录
该目录下存放着系统主要的配置文件,例如人员的账号密码文件、各种服务的其实文件等。一般来说,此目录的各文件属性是可以让一般用户查阅的,但是只有root有权限修改。
/lib目录
该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。
/var目录
/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。
/proc目录
空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。
/usr目录
系统核心所在,包含了所有的共享文件。它是 unix 系统中最重要的目录之一,涵盖了二进制文件,各种文档,各种头文件,还有各种库文件;还有诸多程序,例如 ftp,telnet 等等。
其他常见目录
/sbin目录
该目录下存放系统命令,即只有系统管理员(俗称最高权限的root)能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
/tmp目录
用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。
/www目录、htdocs目录
存放web文件。
/home目录
家目录,新增用户账号时,用户的家目录都存放在bai此目录下
三、固件常见的文件类型
固件可以采用的文件类型有很多种,常见的有squashfs、cramfs、ext2、jeffs2等。其中设备最常采用的文件系统是squashfs,分析人员可以使用unsqushfs工具对文件系统提取数据。
四、固件获取途径:
1、官网公开固件包或升级包下载。
2、设备在线升级,抓包获取下载地址进行下载。
3、硬件接口调试,读取功能。
4、拆设备,用编程器或其他读取设备获取固件。
来源:freebuf.com 2021-05-14 22:25:17 by: hahali
请登录后发表评论
注册