Linux
内核映像文件有两种:一种是非压缩版本,叫Image;另一种是它的压缩版本,叫zImage。zImage是Image经过压缩形成的,所以它的大小比Image小。为了能使用zImage这个压缩版本,必须在它的开头加上解压缩的代码,将zImage
解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般都比较小,内核要常驻内存,采用zImage可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的,所以一般嵌入式系统均采用压缩的内核映像文件,即zImage。
zImage是ARM
Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。
本文介绍几种常用的Linux内核映像的区别。
vmlinux :Linux内核编译出来的原始的内核文件, elf 格式,未做压缩处理。
该映像可用于定位内核问题,但不能直接引导Linux系统启动。
使用 readelf 命令查看RockPI 4A单板Linux内核编译的 vmlinux ,内容如下:
Image :Linux内核编译时,使用 objcopy 处理 vmlinux 后生成的二进制内核映像。
该映像未压缩,可直接引导Linux系统启动。
RockPI 4A单板Linux内核编译 vmlinux 和 Image 过程如下:
objcopy 命令的用法后续介绍。
zImage :使用 gzip 压缩 Image 后,使用 objcopy 命令生成的Linux内核映像。
该映像一般作为 uboot 的引导映像文件。 uboot 引导命令后续介绍。
uImage :在 zImage 前面增加一个64字节的头,描述映像文件类型,加载位置,大小等信息。
该映像是老版本 uboot 专用的引导映像。
下图是基于 imx6 处理器Linux内核编译出的 zImage 和 uImage 的差异,区别如下:
imx6 单板Linux内核编译 zImage 和 uImage 过程如下:
下图展示了不同类型的Linux映像生成过程。
注:zImage和uImage用于32位内核。
在Ubuntu的根目录/boot/目录下。
Ubuntu根目录下各文件的功能介绍:
/bin/ 用以存储二进制可执行命令文件,/usr/bin/也存储了一些基于用户的命令文件。
/sbin/ 许多系统命令的存储位置,/usr/sbin/中也包括了许多命令。
/root/ 超级用户,即根用户的主目录。
/home/ 普通用户的默认目录,在该目录下,每个用户拥有一个以用户名命名的文件夹。
/boot/ 存放Ubuntu内核和系统启动文件。
/mnt/ 通常包括系统引导后被挂载的文件系统的挂载点。
/dev/ 存储设备文件,包括计算机的所有外部设备,如硬盘、是、键盘、鼠标等。
/etc/ 存放文件管理配置文件和目录。
/lib/ 存储各种程序所需要的共享库文件。
/lost+found/ 一般为空,当非法关机时,会存放一些零散的文件。
/var/ 用于存放很多不断变化的文件,例如日志文件等。
/usr/ 包括与系统用户直接有关的文件和目录。
/media/ 存放Ubuntu系统自动挂载的设备文件。
/proc/ 这是一个虚拟目录,它是内存的映射,包括系统信息和进程信息。
/tmp/ 存储系统和用户的临时信息。
/initrd/ 用来加载启动时临时挂载的initrd.img映像文件,以及载入所要的设备模块目录。
/opt/ 作为可选文件和程序的存放目录,否则将无法引导计算机进入 *** 作系统。
/srv/ 存储系统提供的服务数据。
/sys/ 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)