嵌入式系统第二讲研嵌入式Linux开发环境.ppt
文本预览下载声明
内核启动第2阶段 init_IRQ();//初始化系统IRQ sched_init(); //进程调度机制的初始化 ……. console_init(); //控制台设备的初始化 fork_init(mempages);// 根据系统物理内存的大小计算运行创建线程(包括进程)的数量。 …… 内核启动第2阶段 最后,在rest_init()中调用kernel_thread()产生产生第一个核心线程init(位于linux/init/main.c),然后调用cpu_idle(),等待系统调度init线程,从而完成KERNEL的启动过程。 内核启动第2阶段 — init()函数 init()函数主要完成如下工作: do_basic_setup():完成外设及其驱动程序的加载和初始化。 prepare_namespace:为系统准备好命名空间,并挂载根文件系统。 execve():在/sbin、/etc、/bin目录下查找init程序并执行。 内核启动第2阶段 源代码 内核启动第二阶段源代码位于: linux/init/main.c 内核启动第3阶段 内核启动第二阶段完成后,一般会在/sbin、/etc、/bin等目录下查找init程序并执行,init的执行过程如下: init从配置文件/etc/inittab中获取所有信息; /etc/inittab中会定义一个启动教本,如sysinit、rc、rcS等; PXA270开发系统中启动运行脚本文件/etc/rc.d/rc.sysinit,将完成驱动模块的动态加载、配置网络等工作。 2.2.3 根文件系统 根文件系统的基本结构 由于多数嵌入式系统并不需要多用户支持,因此嵌入式Linux的根文件系统通常要比普通Linux的目录树精简得多。 一般来说,目录/bin, /dev, /etc, /lib, /proc, /sbin, 和 /usr等顶层目录都是不可缺省少的 根文件系统的基本结构 /bin:必要的用户命令(二进制文件); /dev:设备文件和其他特殊文件; /etc:系统配置文件,包括启动文件; /lib:必要的链接库,例如C链接库、内核模块等; /proc:用来提供内核与进程信息的虚拟文件系统; /sbin:必要的系统管理员命令(二进制); /usr:在第二层目录中包含对大多数用户都有用的大量应用程序和文件。 根文件系统的基本结构 一般来说,目录/boot, /home, /mnt, /opt, /root, /tmp, /var等顶层目录则是可以选择的 根文件系统的基本结构 /boot:引导加载程序使用的静态文件,如内核镜像; /home:用户主目录,包括供FTP等服务使用的主目录; /mnt:安装点,用于暂时安装文件系统; /opt:附加的软件套件; /root:root用户的主目录; /tmp:暂时性的文件; /var:监控程序和工具程序所存放的可变数据。 构建根文件系统框架—目录 创建顶层目录 $ cd ${PRJROOT}/rootfs $ mkdir bin dev etc lib proc sbin tmp usr var $ chmod 1777 tmp 然后,可以建立/usr的目录结构 $mkdir usr/bin usr/lib usr/sbin 最后,还可以建立/var的目录结构: $ mkdir var/lib var/lock var/log var/run var/tmp $ chmod 1777 var/tmp 构建根文件系统 内核模块 在编译ARM-Linux内核镜像时,可能会有一部分以核心可加载模块的形式编译为内核模块; 这里需要将该部分模块复制到根文件系统的/lib目录中。 设备文件 /dev目录中的每个设备文件都可以用mknod命令建立 也可以用从桌面Linux中直接复制需要的dev条目以节省时间。 构建根文件系统—主要的系统应用程序(命令集) 可以复制若干需要的标准命令(二进制文件)来实现必要的系统应用程序, 或者引入集多个命令功能于一身的应用程序到根文件系统,如BusyBox工具。 根据配置BusyBox可以执行ash shell的功能, 具有多个应用程序的功能,其中包括vi编辑器,/sbin/init,以及其他诸如sed、ifconfig、reboot、mkdir、mount、ls、cat等。 构建根文件系统 定制应用程序 如果应用程序包含相对较少的二进制文件,可以将它们放到/bin目录; 如果应用程序包含了一组错综复杂的二进制文件,并且可能包括数据文件,可以考虑为它们在根文件系统中创建一个新目录,如/project 文件系统的类型选择 文件系统的特性描述参数: 可被写入:文件系统
显示全部