移植常用命令到linux linux riscv移植( 六 )


启动模块包含足以装入操作系统的代码,或者是第二步的加载代码的位置 。启动模块需要使用BIOS调用来从磁盘装入数据,而这些中断调用,如INT 13h等,限制了最大磁盘柱面号为1023 。这也就是说启动模块需要加载的一切内容 , 如初始内存磁盘、内核、启动的时间信息等,必须存放在1024个柱面以内 。
在MBR中只有四个分区表项,每个表项的格式如下:
地址偏移 内容 大小
+00h 分区状态:00代表非启动分区,80h代表启动分区 1字节
+01h 分区的起始位置 磁头 1字节
+02h 分区的起始位置 柱面和扇区 1字节
+04h 分区的类型 1字节
+05h 分区的结束位置 磁头 1字节
+06h 分区的结束位置 柱面和扇区 1字节
+08h 在主引导区和本分区的第一个扇区间的扇区数目 4字节
+0Ch 分区内的扇区数目 4字节
5.2 Linux的启动过程
1启动的命令行参数
在Linux启动时 , 它处理所有传递给它的命令行参数 。这可以影响Linux的运行方式 。命令行参数包括:
QUOTE:
mem=xxxM:定Linux可以使用的内存大小 。这在用户的计算机系统有超过64MB的内存时才需要 。因为从前的主板只对第一个64MB内存进行缓存 , 使用超过64MB的内存会使整个计算机的性能下降,所有内存均按无缓存的速度运行 。
single:使Linux按单用户方式启动,缺省方式是多用户方式 。
root=/dev/xxx:指定Linux要安装为根文件系统的设备 。
init=file;:指定作为初始化进程的文件 。
initrd=dev;:指定作为初始内存磁盘的设备 。
ro:指定根文件系统为只读 。
rw:指定根文件系统为可读可写 。
2 Init进程
在内核初始化自身和找到的硬件设备后 , 在后台启动进程init(/ *** in/init) , init进程号1运行 。
在UNIX世界中有许多启动过程的版本 , 一些是基于系统V,一些是基于BSD 。大多数Linux版本使用系统V的实现方法,在这里描述的就是这样 。
init是由文件/etc/inittab内容和功能控制的,随启动模式是单用户或多用户而不同 。
QUOTE:
单用户模式:init进程忽略/etc/inittab文件,在执行少数几个脚本程序后调用/dev/console shell 。这样 , 用户就可以有了一个shell , 而且可以执行一定限度的任务 。
多用户模式:init进程把系统带入/etc/inittab文件指定的运行级别 。Init通过标准的Linux方法进入一个指定的进行级别 。
3.进行级别
Linux与其他UNIX操作系统一样,可以任何时刻处于任何一个运行级别 。这些运行级别提供的功能不同 , 为主要是由于其运行的服务方程序(后台daemon)的不同造成的 。Linux共有6种运行级别 。
QUOTE:
0:关闭计算机或终止计算机运行,这个级别就是系统停止运行 。
1:单用户启动级别,系统只有一个用户 , 就是root,该用户在控制台登录 。
2:多用户运行级别,但无网络功能 。在这个运行级别,网络功能没有启动,但是系统允许多个用户登录,可以通过虚拟控制台或串行线路 。
3:多用户模式,有网络功能 。在这个运行级别,所有标准网络服务均被启动 。
4:目前没有实现 。
5:X11运行级别,在这个运行级别,X服务器软件运行,提供图形界面的登录方式 。
6:系统重新启动 。
查询当前运行级别:runlevel;
4在启动过程中运行的脚本
在init进程运行时 , 它负责查看缺省的运行级别,并进入该运行级别 。这是通过运行在/etc/rc.d/rcX.d目录下的脚本程序来实现的,其中X代表运行的级别 , 即一个运行级别对应一个目录 。不同的字母开头的文件有不同的作用 。其中:

推荐阅读