深入Linux,Unix系统引导过程
嵌入式linux系统的启动流程

嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。
同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。
如何安装和使用Linux操作系统

如何安装和使用Linux操作系统第一章:引言和背景知识Linux操作系统是一种免费开源的操作系统,以其稳定性和安全性而闻名。
本章将介绍Linux操作系统的背景知识,包括其起源、发展和主要特点。
第二章:选择适合您的Linux发行版Linux操作系统有许多不同的发行版本,每个版本都具有自己的特点和用途。
本章将指导您选择适合您需求的Linux发行版,并对常见发行版进行介绍。
第三章:准备安装所需材料在安装Linux操作系统之前,您需要准备一些必要的材料和设备。
本章将介绍您需要准备的硬件设备、安装介质和其他必要的准备步骤。
第四章:安装Linux操作系统本章将详细介绍如何安装Linux操作系统。
涵盖的内容包括从镜像文件创建安装介质、启动计算机并进入安装程序、分区和格式化磁盘、选择安装选项、设置用户账户和密码等。
第五章:初次启动和基本配置当安装完成后,您需要进行一些初次启动和基本设置,以确保Linux操作系统正常运行。
本章将介绍如何进行初次启动、配置网络连接、更新软件包、设置系统时区等。
第六章:使用Linux命令行界面Linux操作系统以其强大的命令行界面而著名,熟练使用命令行界面是运维人员的必备技能。
本章将介绍基本的Linux命令,包括文件和目录操作、用户和权限管理、进程管理等。
第七章:安装和配置常用应用程序本章将介绍如何安装和配置常用的Linux应用程序,例如Web 服务器、数据库、邮件服务器等。
同时,还将介绍如何使用包管理器进行软件的安装和更新。
第八章:远程访问和文件传输远程登录和文件传输是管理Linux系统的常见任务之一。
本章将介绍如何通过SSH协议远程登录Linux系统,并使用SCP或SFTP实现文件的传输和管理。
第九章:系统监控和故障排除在运维过程中,系统监控和故障排除是非常重要的。
本章将介绍常用的系统监控工具和技术,以及处理常见故障的方法。
第十章:安全性和更新Linux操作系统以其高度的安全性而闻名,但仍然需要采取一些额外的措施来确保系统的安全。
unix linux 系统管理技术手册 第5版

unix linux 系统管理技术手册第5版《Unix/Linux系统管理技术手册》第5版是一本经典的Unix/Linux系统管理技术权威指南,对于系统管理员和Linux用户而言,是一部不可或缺的参考资料。
该书分为8个章节,涵盖了Unix/Linux系统管理的方方面面,包括基础知识、系统安装、文件系统管理、用户和用户组管理、网络管理、进程管理、安全性和备份恢复等。
下面将对每个章节进行简要介绍。
第一章介绍了Unix/Linux的起源和发展历史,阐述了Unix/Linux 的基本概念和特点,以及Unix/Linux系统管理的基本原则和任务。
同时,还介绍了常用的Unix/Linux版本和发行版。
第二章讲解了Unix/Linux系统的安装和升级,包括硬件要求、分区的设计和创建、安装介质的制作和安装过程的详细步骤。
此外,还包括如何进行系统的升级和补丁的安装。
第三章主要涉及文件系统管理,包括文件系统的组织和层次结构、文件系统类型、文件系统的创建和管理、文件和目录的权限设置和修改、磁盘配额的管理等。
第四章介绍了用户和用户组的管理。
这包括用户账号的创建和管理、用户组的创建和管理、用户账号的权限和环境设置、sudo权限的管理等内容。
第五章讨论了网络管理,包括网络配置、主机名的设置、网络接口的配置和管理、网络服务的配置和管理、路由的配置和管理等。
还介绍了如何使用网络工具进行网络故障排除和监控。
第六章详细讲解了进程管理,包括进程的创建和管理、进程的优先级和调度、进程的监控和控制、进程间的通信等。
此外,还介绍了shell脚本编程和作业调度。
第七章涉及系统安全性,包括用户权限管理、文件权限管理、防火墙和入侵检测系统的配置和管理、日志的监控和审计、系统漏洞的修补等内容。
最后一章介绍了备份和恢复技术,包括备份策略的制定、备份工具的选择和使用、备份文件的恢复和验证、灾难恢复和数据恢复等。
总的来说,《Unix/Linux系统管理技术手册》第5版全面而深入地介绍了Unix/Linux系统管理的各个方面,无论是初学者还是有经验的系统管理员,都可以从中获得宝贵的知识和技巧。
Linux引导与配置文件加载过程

Linux引导及配置文件加载过程解读文章分类:操作系统??本文包括3部分内容1、 Linux的引导过程2、 Linux 的运行级别3、 /etc/inittab与/etc/rc.d/ 与/etc/rc.d/init.d的关系关键词:Linux引导过程、运行级别、inittab与 init.d 与 rc.d一、 Linux的引导过程系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。
内核被加载到内存中之后,就开始执行我们的系统设置了。
一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。
从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。
内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。
二、运行级别(run level)Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。
init 进程上来首先做的事是去读取/etc/目录下 inittab文件中initdefault id值,这个值称为运行级别(run-level)。
它决定了系统启动之后运行于什么级别。
运行级别决定了系统启动的绝大部分行为和目的。
这个级别从0到 6 ,具有不同的功能。
不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有 NFS# 3 - 完全多用户模式(标准的运行级)# 4 –系统保留的# 5 - X11 (x window)# 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启)三、 /etc/rc.d/与/etc/rc.d/init.d的关系先解释一下init.d。
这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。
arm版本linux系统的启动流程

arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。
在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。
本文将详细介绍ARM版本Linux系统的启动流程。
一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。
在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。
引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。
二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。
内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。
内核需要设置异常向量表,以便正确处理异常。
2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。
3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。
init进程是系统中所有其他进程的父进程,负责系统的初始化工作。
三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。
在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。
设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。
它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。
四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。
启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。
2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本在Linux操作系统中,有许多系统服务需要在启动时按照一定的顺序进行启动。
为了确保这些服务能够正确地依赖关系启动,我们可以使用Shell脚本来管理它们的启动顺序。
本文将介绍一种用Shell脚本来实现Linux系统服务启动顺序的方法。
一、背景介绍在Linux系统中,服务是一种在后台运行的程序,用于提供特定功能或服务。
在系统启动时,许多服务需要按照一定的顺序启动,以满足它们之间的依赖关系。
例如,数据库服务可能需要在网络服务启动之后才能正常工作。
通过Shell脚本管理服务启动顺序可以确保它们能够按照正确的依赖关系启动,避免冲突和错误。
二、Shell脚本的编写编写Shell脚本来管理服务的启动顺序需要遵循一定的规范。
下面是一种常用的方法:1. 定义服务启动顺序首先,我们需要定义每个服务的启动顺序。
可以将服务按照其依赖关系进行排序,确保依赖关系较低的服务先启动。
这样可以避免启动时的冲突和错误。
例如,假设我们有三个服务需要启动:A、B和C。
服务A不依赖于其他服务,服务B依赖于服务A,而服务C依赖于服务B。
因此,启动的顺序应为A、B、C。
2. 编写Shell脚本创建一个新的Shell脚本文件,例如`startup.sh`,并使用文本编辑器打开它。
在脚本中,先使用`#!/bin/bash`指定脚本使用的Shell解释器。
然后,按照定义的服务启动顺序,逐个启动每个服务。
下面是一个示例脚本,用于按照上述定义的服务启动顺序启动服务:```#!/bin/bash# 启动服务Aservice A start# 等待一段时间,确保服务A已经启动完成sleep 5# 启动服务Bservice B start# 等待一段时间,确保服务B已经启动完成sleep 5# 启动服务Cservice C start```在脚本中,使用`service`命令来启动每个服务。
在每个服务启动之后,可以使用`sleep`命令来等待一段时间,以确保服务已经完全启动。
unix安装教程

unix安装教程Unix是一种多用户、多任务操作系统,被广泛应用于服务器和工作站。
在Unix系统中,通过命令行对系统进行操作和管理。
本文将介绍Unix系统的安装教程。
1. 下载Unix系统镜像文件:在官方网站或其他可靠页面下载需要的Unix系统镜像文件。
根据自己的需求选择合适的版本,比如最新稳定版或特定用途的版本。
2. 创建安装媒介:将下载的Unix镜像文件刻录到合适的介质上,比如CD、DVD或USB闪存驱动器。
使用相关软件,选择“镜像刻录”或“创建启动盘”的选项,按照提示完成刻录过程。
3. 设置启动顺序:将计算机的启动顺序改为从刚刚创建的安装媒介启动。
进入计算机的BIOS设置界面,找到“启动顺序”或“启动设备”这个选项,将光盘或USB设备移到首位。
4. 进入安装程序:重启计算机后,系统将从安装媒介启动。
进入安装程序界面后,按照提示进行操作。
可能需要选择语言、键盘布局和许可协议等。
5. 磁盘分区:在安装程序中,有一个磁盘分区的步骤。
这个步骤是为了将磁盘划分为不同的区域,以便存储操作系统和数据。
可以选择自动分区或手动分区。
自动分区会根据系统要求划分磁盘空间,而手动分区需要手动设置各个分区的大小和挂载点。
6. 系统安装:完成磁盘分区后,安装程序将会开始复制系统文件到磁盘中。
这个过程可能需要一些时间,耐心等待即可。
7. 用户设置:在安装程序中,会要求设置管理员(root)用户的用户名和密码。
此外,还可以创建其他用户账号,以便多用户的操作。
8. 完成安装:安装程序最后会给出安装完成的提示。
此时可以选择重启计算机,从磁盘启动已安装的Unix系统。
9. 初始设置:重启计算机后,系统会要求输入用户名和密码登录。
登录后,可以进行初始设置,比如语言设置、网络配置等。
10. 更新系统:安装完成后,如果系统版本比较旧,建议更新系统,以获得更好的性能和安全性。
可以使用unix系统自带的软件包管理器,通过命令行进行系统更新。
Linux操作系统和Unix操作系统介绍

Linux操作系统和Unix操作系统介绍linux的操作系统和Unix操作系统很多人都不清楚之间的区别,下面由店铺为大家整理了linux操作系统和unix操作系统的介绍的相关知识,希望对大家有帮助!Linux操作系统和Unix操作系统介绍:UnixUNIX操作系统(尤尼斯),是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、DennisRitchie和DouglasMcIlroy于1969年在AT&T的贝尔实验室开发。
目前它的商标权由国际开放标准组织所拥有,只有符合单一UNIX 规范的UNIX系统才能使用UNIX这个名称,否则只能称为类UNIX(UNIX-like)。
操作系统,是美国AT&T公司于1971年在PDP-11上运行的操作系统。
具有多用户、多任务的特点,支持多种处理器架构,最早由肯·汤普逊(Kenneth Lane Thompson)、丹尼斯·里奇(Dennis MacAlistair Ritchie)于1969年在AT&T的贝尔实验室开发。
UNIX系统是一个多用户,多任务的分时操作系统。
UNIX的系统结构可分为两部分:操作系统内核(由文件子系统和进程控制子系统构成,最贴近硬件),系统的外壳(贴近用户)。
外壳由Shell解释程序,支持程序设计的各种语言,编译程序和解释程序,实用程序和系统调用接口等组成UNIX系统大部分是由C语言编写的,这使得系统易读,易修改,易移植。
UNIX提供了丰富的,精心挑选的系统调用,整个系统的实现十分紧凑,简洁。
UNIX提供了功能强大的可编程的Shell语言(外壳语言)作为用户界面具有简洁,高效的特点。
UNIX系统采用树状目录结构,具有良好的安全性,保密性和可维护性。
UNIX系统采用进程对换(Swapping)的内存管理机制和请求调页的存储方式,实现了虚拟内存管理,大大提高了内存的使用效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最近一直在专注的学习一样技术,主要就是Linux/Unix系统的引导过程,从最基本的机器加电一直到最终系统能够正确的使用为止,这个过程中涉及到了相当多的技术,以及各种技术的推陈出新,都在这个重要的过程中得以体现。
我之所以对这部分进行了分析,主要是工作上面需要这方面的知识,同时觉得很有意思,所以广泛的深入研究了一下。
好了,废话不多说了,开始来点干货吧,本文并非全部原创,参考了一些文章,具体请查看“参考”部分。
深入Linux/Unix系统引导过程Linux/Unix系统的引导过程包含了很多阶段,但是对于一个标准的系统的引导,大致的阶段是类似的,不同的平台会有一些不同之处(x86平台下主要使用LILO、SYSLINUX或是grub,SPARC平台下主要使用OBP作为loader)。
在接下来的章节中,我将从系统加电开始直至Linux/Unix内核被正式加载运行。
1 概述首先从高层的架构分析一下Linux/Unix引导流程,下面的图作为一种更加形象的说明,这样你可以从上次梗概的了解整个流程,为下面深入的分析打下基础。
从这张图中,总结一下大概的流程,分别是:系统启动、阶段1引导、阶段2引导、内核加载和用户态的初始化。
在系统启动阶段主要用的技术包括BIOS(最新的发展为EFI),阶段1引导主要用的技术包括Master Boot Record(最近的发展为GPT),阶段2引导主要用的技术包括LILO、GRUB、SYSLINUX、GRUB2(x86平台下)和OBP(SPARC平台下)。
这张图属于比较古老的一种介绍,在目前的技术发展下,每个阶段都有了一些变化。
这里。
2.2 EFI启动与传统MBR相比,GPT采用了不同的分区方式。
对于传统MBR,其结构主要如下:上图即对上文中所述的很形象的说明,在图中看到MBR被分成三个部分,分别是:Bootloader、分别表以及Magic Number。
其中Bootloader部分为stage1中被执行的起始部分,程序在这里被作为GRUB程序执行,详细的关于GRUB的内容将再下面章节中进行详细阐述。
相反,对于EFI系统中所采用的GPT分区方式,则采用了不同于MBR分区方式的形式,从下图中可以发现:如上图所示,GPT分区表主要包括:保护MBR、首要GPT头、首要GPT、备用GPT、备用GPT头和磁盘数据区。
保护MBR与正常的MBR区别不大,主要是分区表上的不同,在保护MBR中只要一个表示为0xEE的分区,以此来表示这块硬盘使用GPT分区表。
首要GPT头包含了众多信息,具体内容如下:偏移字节长度说明0x008签名,固定为ASCII码"EFI PART",16进制表示0x5452415020494645。
0x084版本号,目前的版本为V1.0,16进制表示0x00010000。
0x0C4分区表头的大小(单位是字节,通常是92字节,即5C 00 00 00)0x104GPT头中字节的CRC32校验0x144固定值00 00 00 000x188当前LBA(这个分区表头的位置)0x208备份LBA(另一个分区表头的位置)0x288第一个可用于分区的LBA(主分区表的最后一个LBA + 1)0x308最后一个可用于分区的LBA(备份分区表的最后一个LBA−1)0x3816磁盘GUID0x488分区表项的起始LBA0x504分区表项的数量0x544一个分区表项的大小(通常是128)0x584分区表CRC32校验0x5C420保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。
分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。
它还存储着它本身和分区表的CRC32校验。
固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否有错误,如果出错了,可以使用软件从硬盘最后的备份GPT分区表恢复整个分区表,如果备份GPT也校验错误,那么磁盘将不可用,系统拒绝启动。
接下来主要是128个分区表项,GPT分区表使用简单而直接的方式表示分区。
一个分区表项的前16字节是分区类型GUID。
例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。
接下来的16字节是该分区的唯一的GUID(这个指的是该分区本身,而之前的GUID指的是该分区的类型)。
在接下来是分区其实和末尾的64位LBA编号,以及分区的名字和属性。
具体结构如下表:偏移字节长度说明0x0016分区类型GUID 0x1016唯一的分区GUID 0x208开始LBA0x288结束LBA0x308分区属性0x3872分区名称(Unicode 码)3 阶段1的引导(GRUB中stage1过程)接下来开始真正的引导过程了,主要说明GRUP的引导。
总体上GRUB更像是一个mini os,只不过这个mini os的作用只是加载其他的操作系统,在GRUB中包括stage1、stage1.5(可选)和stage2,其中stage1和stage1.5属于boot loader,stage2属于mini os的内核部分。
GRUB 中stage1过程主要位于MBR的前446字节中(对于支持GPT分区的磁盘,同样有最开始的512字节作为保护MBR,保护MBR与正常的MBR区别不大,主要是分区表上的不同,在保护MBR中只要一个表示为0xEE的分区,以此来表示这块硬盘使用GPT分区表,不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作),之后的64字节为硬盘的分区表,最后两个字节为MBR结束标志位(0xAA55)。
stage1部分占用了446字节,其代码文件是源码目录下stage1/stage1.S文件,汇编后生成一个512字节的boot.img,被写在硬盘的0面0道1扇区中,作为硬盘的MBR。
stage1的工作很简单,就是加载0面0道2扇区上的512字节到0x8000,然后跳转到0x8000执行。
在0面0道2扇区上的512字节内容为stage1/start.S文件汇编后生成。
该扇区上的内容的作用是加载stage1.5或是stage2过程,并将控制权转交。
至于代码,这里就不进行分析了,感兴趣的读者可以去查看源码,不过对于GRUB和GRUB2,其stage1的源码位置不尽相同。
4 阶段2的引导(GRUB中stage1.5或stage2过程)在start过程将控制权转交后,接下来就是GRUB的核心过程了。
该过程之所以区分stage1.5和stage2,主要原因是GRUB和GRUB2的区别。
在GRUB2中,将stage1.5过程集成到了stage2的过程中,所以stage1.5过程仅仅是针对GRUB的。
下面将会分别介绍两种GRUB版本的两种过程。
4.1 GRUB中stage1.5过程Stage1.5过程很无辜,它的作用很单一,但是非常关键。
它的主要功用就是构造一个boot分区系统对应的文件系统,这样可以通过文件系统的路径(/boot/grub/)寻找stage2过程需要的core.img,进而加载到内存中开始执行。
Stage1.5存在于0面0道3扇区开始的地方,并一直延续十几k字节的区域,具体的大小与相应的文件系统的大小有关(文中涉及到了0面0道1-3+x扇区,这部分扇区为保留扇区,BIOS不会放置任何数据。
正因为如此如果转换到GPT分区形式,系统将不能被正确引导,如上文所示,MBR后面的扇区都被其他内容所占据)。
Stage1.5过程被构建成多种不同类型,但是功能类似,下面简单介绍一下基本的stage1.5过程的文件系统。
e2fs_stage1_5(针对ext2fs,可引导ext2和ext3文件系统)、fat_stage1_5(针对fat文件系统,可引导fat32和fat16)、ffs_stage1_5、jfs_stage1_5、minix_stage1_5、reiserfs_stage1_5、vstafs_stage1_5和xfs_stage1_5,这些文件被称为stage1.5过程,这些文件每个至少都在11k以上。
除此之外还有两个比较特殊的文件,分别为nbgrub和pxegrub,这两个文件主要是在网络引导时使用,只是格式不同而已,他们很类似与stage2,只是需要建立网络来获取配置文件。
由于stage1.5过程中会涉及到多个文件系统对应的文件,因此本文中主要以ext2fs为例进行说明,其他文件系统与此类似,可以同样进行分析理解。
对于ext2fs文件系统,用于生成该文件系统的stage1.5过程文件(e2fs_stage1_5)的代码为stage2/fsys_ext2fs.c文件。
在stage2/filesys.h文件中定义了每个文件系统对外的接口,用于上层调用,作为stage2过程寻找核心代码使用,文件系统一般被定义的接口主要就是三个函数,分别是mount、read和dir��数。
对应ext2fs,其定义的函数为:#ifdef FSYS_EXT2FS#define FSYS_EXT2FS_NUM 1int ext2fs_mount (void);int ext2fs_read (char *buf, int len);int ext2fs_dir (char *dirname);#else#define FSYS_EXT2FS_NUM 0#endif针对ext2fs有如上的函数名称,每个函数将具体在stage2/fsys_ext2fs.c文件中被定义,这里面没有包含任何的写的过程,对于bootloader而言仅仅读就可以完成任务了,没必要对其系统进行写操作。
其中ext2fs_mount函数用于检查文件系统类型,并将superblock读入到内存中;ext2fs_read函数和ext2fs_dir函数用于对文件系统具体的操作。
在stage2/fsys_ext2fs.c文件中除了需要对这三个函数的定义之外,还需要文件系统的属性的数据结构(superblock、inode和group结构,这些结构最初被定义在include/linux/ext2_fs.h文件中),通过这些数据结构描述一个文件系统。
如果读者有兴趣可以试着创建新的文件系统的支持,可以参照目前存在的一些文件系统的模板(实例)编写。
4.2 GRUB中stage2过程GRUB中的核心过程也就是stage2过程了,该过程主要是在文件系统建立以后选择合适的操作系统进行加载并转交控制权,达到最后引导操作系统的目标。