嵌入式Linux内核启动首要分为这三个阶段
1) 挪用setup_arch()函数举办与系统布局相干的第一个初始化事变;对差异的系统布局来说该函数有差异的界说。对付ARM平台而言,该函数界说在 arch/arm/kernel/setup.c。它起首通过检测出来的处理赏罚器范例举办处理赏罚器内核的初始化,然后 通过bootmem_init()函数按照体系界说的meminfo布局举办内存布局的初始化,最后挪用 paging_init()开启MMU,建设内核页表,映射全部的物理内存和IO空间。 2) 建设非常向量表和初始化间断处理赏罚函数; 3) 初始化体系焦点历程调治器和时钟间断处理赏罚机制; 4) 初始化串口节制台(console_init); ARM-Linux 在初始化进程中一样平常城市初始化一个串口做为内核的节制台,而串口Uart驱动却把串口装备名写死了,如本例中linux2.6.37串口装备名为ttyO0,而不是常用的ttyS0。有了节制台内核在启动进程中就可以通过串口输出信息以便开拓者或用户相识体系的启动历程。 5) 建设和初始化体系cache,为各类内存挪用机制提供缓存,包罗;动态内存分派,假造文件体系(VirtualFile System)及页缓存。 6) 初始化内存打点,检测内存巨细及被内核占用的内存环境; 7) 初始化体系的历程间通讯机制(IPC); 当以上全部的初始化事变竣事后,start_kernel()函数会挪用rest_init()函数来举办最后的初始化,包罗建设体系的第一个历程-init历程来竣事内核的启动。 挂载根文件体系并启动init Linux内核启动的下一进程是启动第一个历程init,但必需以根文件体系为载体,以是在启动init之前,还要挂载根文件体系。 四、挂载根文件体系 根文件体系至少包罗以下目次: /etc/:存储重要的设置文件。 /bin/:存储常用且开机时必需用到的执行文件。 /sbin/:存储着开机进程中所需的体系执行文件。 /lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。 /dev/:存储装备文件。 注:五大目次必需存储在根文件体系上,缺一不行。 以只读的方法挂载根文件体系,之以是回收只读的方法挂载根文件体系是由于:此时Linux内核仍在启动阶段,还不是很不变,假如回收可读可写的方法挂载根文件体系,万一Linux不警惕宕机了,一来也许粉碎根文件体系上的数据,再者Linux下次开机时得花上很长的时刻来搜查并修复根文件体系。 挂载根文件体系的而目标有两个:一是安装恰当的内核模块,以便驱动某些硬件装备或启用某些成果;二是启动存储于文件体系中的init处事,以便让init处事接办后续的启动事变。 执行init处事 Linux内核启动后的最后一个举措,就是从根文件体系上找出并执行init处事。Linux内核会依照下列的次序探求init处事: 1)/sbin/是否有init处事 2)/etc/是否有init处事 3)/bin/是否有init处事 4)假如都找不到最后执行/bin/sh 找到init处过后,Linux会让init处事认真后续初始化体系行使情形的事变,init启动后,就代表体系已经顺遂地启动了linux内核。启动init处事时,init处事会读取/etc/inittab文件,按照/etc/inittab中的配置数据举办初始化体系情形的事变。/etc/inittab界说init处事在linux启动进程中必需依序执行以下几个Script: /etc/rc.d/rc.sysinit /etc/rc.d/rc /etc/rc.d/rc.local /etc/rc.d/rc.sysinit首要的成果是配置体系的根基情形,当init处事执行rc.sysinit时 要依次完成下面一系列事变: (1)启动udev (2)配置内核参数 执行sysctl –p,以便从/etc/sysctl.conf配置内核参数 (3)配置体系时刻 将硬件时刻配置为体系时刻 (4)启用互换内存空间 执行swpaon –a –e,以便按照/etc/fstab的配置启用全部的互换内存空间。 (5)搜查并挂载全部文件体系 搜查全部必要挂载的文件体系,以确保这些文件体系的完备性。搜查完毕后以可读可写的方法挂载文件体系。 (6)初始化硬件装备 Linux除了在启动内核时以静态驱动措施驱动部门的硬件外,在执行rc.sysinit时,也会试着驱动剩余的硬件装备。rc.sysinit驱动的硬件装备包括以下几项: a)界说在/etc/modprobe.conf的模块 b)ISA PnP的硬件装备 c)USB装备 (7)初始化串行端口装备 Init处事会打点全部的串行端口装备,好比调制解调器、不绝电体系、串行端口节制台等。Init处事则通过rc.sysinit来初始化linux的串行端口装备。当rc.sysinit发明linux才气在这/etc/rc.serial时,才会执行/etc/rc.serial,借以初始化全部的串行端口装备。因此,你可以在/etc/rc.serial中界说怎样初始化linux全部的串行端口装备。 (8)破除逾期的锁定文件与IPC文件 (9)成立用户接口 在执行完3个首要的RC Script后,init处事的最后一个事变,就是成立linux的用户界面,好让用户可以行使linux。此时init处事会执行以下两项事变 (10)成立假造节制台 Init会在多少个假造节制台中执行/bin/login,以便用户可以从假造节制台登岸linux。linux默认在前6个假造节制台,也就是tty1~tty6,执行/bin/login登岸措施。当全部的初始化事变竣事后,cpu_idle()函数会被挪用来使体系处于闲置(idle)状态并守候用户措施的执行。至此,整个Linux内核启动完毕。整个进程见图4。 图4:linux内核启动及文件体系加载全进程 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |