内核启动的最后阶段启动了三个进程 进程0:进程0其实就是刚才讲过的idle进程,叫空闲进程,也就是死循环。 进程1:kernel_init函数就是进程1,这个进程被称为init进程。 进程2:kthreadd函数就是进程2,这个进程是linux内核的守护进程。这个进程是用来保证linux内核本身自己能正常工做的。 在嵌入式操做系统中通常会指定/linuxrc为init进程 |
一、/linuxrc是一个可执行的应用程序linux
(1)/linuxrc是应用层的,和内核源码一点关系都没有shell
(2)/linuxrc在开发板当前内核系统下是可执行的。所以在ARM SoC的linux系统下,这个应用程序就是用arm-linux-gcc编译连接的;若是是在PC机linux系统下,那么这个程序就是用gcc编译链接的。ubuntu
(3)/linuxrc若是是静态编译链接的那么直接能够运行;若是是动态编译链接的那么咱们还必须给他提供必要的库文件才能运行。可是由于咱们/linuxrc这个程序是由内核直接调用执行的,所以用户没有机会去导出库文件的路径,所以实际上这个/linuxrc无法动态链接,通常都是静态链接的。函数
二、/linuxrc执行时引出用户界面操作系统
(1)操做系统启动后在一系列的本身运行配置以后,最终会给用户一个操做界面(也许是cmdline,也许是GUI),这个用户操做界面就是由/linuxrc带出来的。blog
(2)用户界面等不少事并非在/linuxrc程序中负责的,用户界面有本身专门的应用程序,可是用户界面的应用程序是直接或者间接的被/linuxrc调用执行的。用户界面程序和其余的应用程序就是进程二、三、4·····,这就是咱们说的进程1(init进程,也就是/linuxrc)是其余全部应用程序进程的祖宗进程。进程
三、/linuxrc负责系统启动后的配置开发
(1)就好像一个房子建好以后不能直接住,还要装修同样;操做系统启动起来后也不能直接用,要配置下。get
(2)操做系统启动后的应用层的配置(通常叫运行时配置,英文简写etc)是为了让咱们的操做系统用起来更方便,更适合我我的的爱好或者实用性。cmd
四、/linuxrc在嵌入式linux中通常就是busybox
(1)busybox是一个C语言写出来的项目,里面包含了不少.c文件和.h文件。这个项目能够被配置编译成各个平台下面能够运行的应用程序。咱们若是用arm-linux-gcc来编译busybox就会获得一个能够在咱们开发板linux内核上运行的应用程序。
(2)busybox这个程序开发出来就是为了在嵌入式环境下构建rootfs使用的,也就是说他就是专门开发的init进程应用程序。
(3)busybox为当前系统提供了一整套的shell命令程序集。譬如vi、cd、mkdir、ls等。在桌面版的linux发行版(譬如ubuntu、redhat、centOS等)中vi、cd、ls等都是一个一个的单独的应用程序。可是在嵌入式linux中,为了省事咱们把vi、cd等全部经常使用的shell命令集合到一块儿构成了一个shell命令包,起名叫busybox。
根目录rootfs中还应该有什么
一、/linuxrc
二、dev目录下的设备文件。在linux中一切皆是文件,所以一个硬件设备也被虚拟化成一个设备文件来访问,在linux系统中/dev/xxx就表示一个硬件设备,咱们要操做这个硬件时就是open打开这个设备文件,而后read/write/ioctl操做这个设备,最后close关闭这个设备。
在最小rootfs中/dev目录也是不可少的,这里面有一两个设备文件是rootfs必须的。
三、sys和proc目录。在最小rootfs中也是不可省略的,可是这两个只要建立了空文件夹便可,里面是没东西的,也不用有东西。这两个目录也是和驱动有关的。属于linux中的虚拟文件系统。
四、usr是系统的用户全部的一些文件的存放地,这个东西未来busybox安装时会自动生成。
五、etc目录是很关键很重要的一个,目录中的全部文件所有都是运行时配置文件。/etc目录下的全部配置文件会直接或者间接的被/linuxrc所调用执行,完成操做系统的运行时配置。etc目录是制做rootfs的关键,因此后面下一个课程专门讲这个etc目录。
六、lib目录也是rootfs中很关键的一个,不能省略的一个。lib目录下放的是当前操做系统中的动态和静态连接库文件。咱们主要是为了其中的动态连接库。