nucleus操作系统内存池模块移植的研究与应用 Linux系统移植(上)——Linux系统组成

Linux系列目录:

Linux基础(一)——GCC及Makefile编译流程

Linux 基础知识(第 2 部分)- 静态链接和动态链接

ARM裸机部分(一)——i.MX6ULL介绍

ARM裸机部分(二)——i.MX6ULL启动过程

ARM裸机部分(第三部分)——i.MX6ULL的第一个裸机程序

ARM裸机(四)——重定位与地址无关的代码

ARM 裸机第 5 部分 – 异常和中断

Linux系统移植(上)——Linux系统组成

Linux系统移植(二)——Uboot介绍

Linux系统移植(三)——Linux内核使用介绍

Linux系统移植(四)——根文件系统使用介绍

Linux驱动开发(上)——Linux内核模块介绍

Linux驱动开发(下)——字符设备驱动框架

Linux驱动开发(三)——总线设备驱动模型

Linux驱动开发(第四部分)——平台设备驱动

目录

1.Linux系统组成

在移植Linux之前,我们需要移植一份bootloader代码,这份bootloader代码是用来启动Linux内核的。bootloader有很多种,最常用的就是U-Boot。移植完U-Boot之后,我们再移植Linux内核。移植完Linux内核之后,Linux还是不能正常启动,我们需要移植一份根文件系统(rootfs),根文件系统里面包含了最常用的一些命令和文件。所以,U-Boot和Linux内核、rootfs一起构成了一个完整的Linux系统,一个可以正常使用的、功能齐全的Linux系统。

一个完整的Linux系统通常包括Uboot、内核、设备树和根文件系统。

2.Uboot

U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机体系结构,包括 PPC、ARM、AVR32、MIPS、x86、68k、Nios 和 MicroBlaze,也是一套遵循 GNU 通用公共许可证发布的自由软件。Uboot 的全称是 Universal Boot Loader,是一个遵守 GPL 条款的开源项目。U-Boot 的主要功能是启动操作系统内核,分为两个阶段nucleus操作系统内存池模块移植的研究与应用,分别是 boot+loader。boot 阶段启动系统,初始化硬件设备,建立内存空间映射图nucleus操作系统内存池模块移植的研究与应用,使系统的软件和硬件处于合适的状态。loader 阶段将操作系统内核文件加载到内存中,然后跳转到内核所在的地址运行。

另外,有的BootLoader可能包含一些高级功能,比如对操作系统映像进行验证、从多个操作系统映像中选择一个合适的操作系统进行引导,或者增加网络功能让系统自主地从互联网上找到一个合适的映像并进行引导等等。

3.Linux内核

Linux 是一个开源的计算机操作系统内核,是一个用 C 语言编写的类 Unix 操作系统,符合 POSIX 标准。Linux 内核是用于与硬件交互并为用户程序提供一组有限的服务的低级支持软件。计算机系统是硬件和软件的共生体,它们相互依赖、密不可分。计算机的硬件,包括外设、处理器、内存、硬盘和其他电子设备,构成了计算机的引擎。但如果没有软件来操作和控制它,它就无法自行工作。完成这种控制工作的软件称为操作系统,在 Linux 术语中称为“内核”,或“核心”。Linux 内核的主要模块(或组件)分为以下几个部分:进程管理子系统、内存管理子系统、文件子系统、网络子系统、设备子系统等。

4.设备树

设备树是描述硬件的一个数据结构,它存储了这些硬件设备的信息,这个文件就是设备树。设备树包括设备树源文件(DTS)、设备树编译器(DTC)和二进制设备树(DTB)。DTS中包含的头文件格式是DTSI。

node1 {
   a-string-property = "A string";
   a-string-list-property = "first string", "second string";
   a-byte-data-property = [0x01 0x23 0x34 0x56];
   child-node1 {
      first-child-property;
      second-child-property = ;
      a-string-property = "Hello, world";
   };
};

当Uboot启动内核的时候,会先把DTB读入内存,然后启动内核,内核可以从设备树中获取硬件信息。

5. 根文件系统

根文件系统(rootfs)是Linux初始化时第一个加载的文件系统。根文件系统包括根目录和真实文件系统,包含了系统启动所必需的文件,以及挂载其他文件系统所必需的文件。根文件系统包含了Linux启动所必需的目录和关键文件,比如Linux启动所必需的初始化文件,就在init目录中。此外,根文件系统还包括许多应用程序的bin目录等。任何Linux系统启动所必需的文件都可以成为根文件系统。

在Linux内核启动的初始阶段,内核会先初始化一个基于内存的文件系统,比如initramfs、initrd等,然后以只读的方式加载根文件系统(load rootfs),读取并运行/sbin/init初始化文件,并根据/etc/inittab配置文件完成系统初始化工作(提示:/sbin/init为二进制可执行文件,即系统初始化程序,/etc/inittab为其配置文件)。在初始化过程中,会以读写方式重新挂载根文件系统。系统启动后,就可以使用根文件系统来存储数据了。根文件系统的存在是Linux启动的必要条件。

我们常见的根文件系统制作工具有buildroot、Ubuntu、Debian、yocto、busybox等,下面列举一下这些工具的优缺点

© 版权声明
THE END
喜欢就支持一下吧
点赞284赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容