您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > Linux 根文件系统制作流程 20160308
如何制作根文件系统1概述如何制作一个最小的根文件系统,能让内核在该文件系统中运行?该文章是读《嵌入式Linux应用开发完全手册》韦东山书籍简要总结。制作最小的根文件系统的主要分为五个部分:①编译Busybox得到常用命令与工具集(生成bin,sbin,usr,linuxrc);②构建dev目录(/dev/console,/dev/null等设备节点);③构建etc目录(/etc/inittab,/etc/fstab,/etc/init.d/rcS等);④构建lib目录(C库函数uclibc,glibc);⑤创建其他空目录,配置需求相关文件程序;书籍《深入浅出嵌入式底层软件开发》扬铸中总结的过程:①编译安装busybox,生成/bin、/sbin、/usr目录及其内容;②利用交叉编译工具链,构建/lib目录;③手工构建/etc目录;④手工构建最简化/dev目录;⑤创建其他空目录;⑥配置系统自动生成/proc和/sys目录;⑦利用udev构建完整的/dev目录;⑧制作根文件系统的Jffs2镜像文件;2编译Busybox注】编译的时候如果遇到有错误的地方,可以根据提示进行修改,一般的情况下,是某个命令的配置上有错误,这个时候可以选择重新执行makemenuconfig进行重新配置,去掉出错的命令,重新编译即可。安装Busybox把这些编译好的命令可执行文件直接放到某一个指定的目录中去。具体操作:然后执行如下命令:makeCONFIG_PREFIX=/opt/rootfsinstall。此时在rootfs根目录中产生bin,sbin,usr,linuxrc目录。3构建dev目录/dev目录下存放的跟设备有关的文件,一些驱动程序的设备节点文件就在此目录下。sudomknodconsolec51(如果忘记,可通过查看已经安装好的linux机器/dev/console文件得知)sduomknodnullc133.1静态创建设备文件创建/dev/mtdblock*(块设备),/dev/ttySAC*(串口设备),/dev/console,/dev/null,即可启动系统。其他设备文件可以等到系统启动后,使用“cat/proc/devices”命令查看内核中注册了哪些设备,再一一创建。3.2使用mdev创建设备文件,动态更新mdev是通过init进程来启动的,在使用mdev构造/dev目录前,init进程至少要建立设备文件/dev/console、/dev/null。mdev是通过读取内核信息来创建设备文件,支持热插拔动态更新/dev目录。mdev需要设置内核支持sysfs文件系统,还有支持tmpfs文件系统。4构建etc目录etc目录取决于要运行的程序,一般最小创建文件/etc/inittab,/etc/init.d/rcS,/etc/fstab。vi/etc/inittab#/etc/inittab::sysinit:/etc/init.d/rcS::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount-a-r::restart:/sbin/initttySAC0::askfirst:-/bin/sh/*根据情况需要修改,‘-’表示与用户可交互的*/inittab文件中条目格式为id:runlevel:action:process。特别注意action字段表示init进程如何控制这个子进程,action字段可使用关键字:sysinit、wait、once、respawn、askfirst、shutdown、restart、ctrlaltdel。vi/etc/init.d/rcS#!/bin/shmount-a/*挂接/etc/fstab文件指定的所有文件系统*/echo/sbin/mdev/proc/sys/kernel/hotplug/*设置内核,当有设备拔插时调用/sbin/mdev程序*/mdev-s/*在/dev目录下生成内核支持的所有设备的结点*/修改文件属性,使之能执行chmod+x/etc/init.d/rcSvietc/fstabfstab的格式如下:#devicemount-pointtypeoptionsdumpfsckoderproc/procprocdefaults00tmpfs/tmptmpfsdefaults00sysfs/syssysfsdefaults00tmpfs/devtmpfsdefaults005构建lib目录拷贝编译工具下的动态库文件。具体操作:执行arm-linux-gcc-v命令,参看交叉编译工具安装在什么目录下,然后拷贝该编译工具的arm-linux目录的lib库下的所有动态文件。或者自己编译glibc源码、uclibc源码制作c库。例如:我的交叉编译工具安装在opt/tools目录下。在自己做的根文件系统下,建立lib目录。mkdirlibcd/opt/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/libls-lcp*so*/opt/first_fs/lib–d-d的作用,原来是一个链接文件的还拷贝成一个链接文件。到目前为止一个最小的根文件系统已经制作好了。6构建其他目录其他目录可以为空目录,创建:proc、mnt、tmp、sys、root等。此时即可作为网络根文件系统直接启动,烧写到开发板还需要制作为镜像文件(例如yaffs文件系统镜像文件、jffs2、ubi等)。问题集:1.内核启动之后,执行的第一个脚本文件是哪一个?答:在嵌入式系统(ubuntu9.04之前),内核启动的第一个(也是唯一的一个)用户进程init进程,init进程的执行程序通常是/sbin/init。/sbin/init解析inittab文件,inittab文件中sysinit指定的脚本为第一个执行脚本文件。嵌入式系统中通常命名它为rcS。2.内核启动的第一个用户进程init进程,该进程执行的程序一定是/sbin/init吗?如果不一定,有哪些可能是被执行的程序?3.Busybox中init程序执行流程简单描述一下?4.NandFlash的擦写寿命是有限的,如何延长Nand使用寿命?答:将/dev、/tmp、/var三个目录挂载为tmpfs文件系统。5.如何让linux中dev目录支持热插拔U盘,插拔U盘时自动创建或删除设备节点文件/dev/sda文件?6.在产品研发阶段,所有根文件系统采用NFS挂载以方便开发,由于在u-boot中我们指定了开发板的IP地址为192.168.1.17,所以我们必须在rcS中指定相同的IP地址,否则在启动过程中,会因为IP地址的缘故,在执行rcS后,导致开发板无法和NFS服务器通信,也就无法进入shell。但在最终产品的根文件系统中,也许要求开发板的IP地址是别的IP,而不是192.168.1.17。应该如何做,才能做出一个即可以用于开发阶段,又可以用于最终产品的统一的根文件系统呢?答案:提示查看/proc/mounts(深入浅出嵌入式底层软件开发有具体答案)。7.在linux终端输入ps看不到任何进程的存在原因分析?答案:ps机制是通过查看/proc中的内容来获得进程信息的,如果/proc目录为空则ps显示看不到任何进程。/proc是用来提供内核和进程信息的虚拟文件系统,由内核自动生成的。我们需要挂载执行mount-tprocnone/proc命令。查考文案:1.《嵌入式Linux应用开发完全手册》韦东山编著2.构建嵌入式Linux根文件系统启动过程《深入浅出嵌入式底层软件开发》扬铸编著
本文标题:Linux 根文件系统制作流程 20160308
链接地址:https://www.777doc.com/doc-2884621 .html