linux根文件系统构建

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.首先一个嵌入式linux产品开发大致分为以下几个流程:

1.硬件工程师:硬件规划,硬件设计,制板,焊接,硬件调试

2.系统工程师或驱动工程师:bootloader移植到1中所开发出来的硬件平台,移植linux内

核,制作供内核启动的根文件系统

3.驱动工程师:按照产品规划书,要求,移植必备的驱动

4.应用工程师:业务相关的应用程序,开发和产品密切相关的应用程序,驱动程序

5.功能测试,性能测试,系统集成此时

6.实验(系统设备)发布

二.根文件系统分析

1.根文件系统简介

Windows操作系统可以将硬盘划分为C,D,E,F等各个盘分别访问,linux同理将MTD设备划分为若干个分区,在不同的分区存放不同类别的文件。与windows的C盘类似,linux 一样要在一个分区上存放系统启动所必需的文件如下图所示:

内核启动后运行的第一个程序init,给用户提供操作界面的shell脚本程序,应用程序所依赖的库等,这些必需、基本的文件合称为根文件系统,存放在一个分区中,linux系统启动后首先挂接这个分区,称为挂接根文件系统。其他分区上所有的目录,文件的集合,也称为文件系统。有此可见linux启动时使用的第一个文件系统便是根文件系统,若此文件系统挂接不成功或者参数配置不正确则linux内核无法正常启动。

按照FHS标准,根文件系统顶层下一般有如下几个目录:

bin:存放所有用户都可以使用的,基本的命令

sbin:存放基本的系统命令,用于启动系统,修复系统

dev:存放设备文件和其它特殊文件

etc:存放系统配置文件,包括启动文件

usr:存放共享,只读的程序和数据

proc:空目录,常作为proc文件系统的挂接点

lib:存放共享库和可加载模块,共享库用于启动系统,运行根文件系统中的可执行程序boot:引导加载程序使用的静态文件

home:用户目录,可选的,包括供服务帐号锁使用的主目录,如FTP

mnt:用于临时挂接某个文件系统的挂接点,通常是空目录

opt:给主机额外安装软件所摆放的目录

root:root用户的主目录

tmp:存放临时文件,通常是空目录

var:存放可变数据

2.根文件系统制作工具Busybox

Busybox俗称嵌入式开发中的瑞士军刀,将众多的unix命令集合进一个很小的可执行程序中,可以用来替换GNUfileutils,shellutils等工具集,支持uclibc库和glibc库,官方网站为进行下载。

下载完毕,解压后会发现有如下一些配置选项如图:

进入第一个目录如图:

第一项是一些通用的设置第二项是链接方式,编译选项,接下来是调试选项等等。

主目录下

Archival utilities:各种压缩,截压缩工具

Coreutils:核心的命令,比如ls,cp等

Console utiities:控制台相关的命令,比如清屏指令clear等

Debian utilities:debian命令

Editors:编辑命令,一般都选用vi

Finding utilities:查找命令

Init utilities:init程序的配置选项

。。。到networking utilities:网络方面的命令,可以选择一些可以方便调试的命令,如telnetd,ping,tftp等

修改根目录下的makefile 指定交叉编译工具然后执行make编译

最后执行CONFIG_PREFIX=dir_path install 就可以将编译好的busybox安装在dir_name指定的目录下。

使用 Busybox 可以自动生成根文件系统所需的bin、sbin、usr 目录和 linuxrc 文件。3.文件系统分类,2张图互相弥补如图:

Jffs2:主要用于norflash,基于MTD驱动层,可读写,支持数据压缩的日志型文件系统Yaffs:专为nandflash设计的一种文件系统不支持数据压缩,速度更快,挂载时间更短cramfs:一种只读的压缩文件系统,基于MTD程序,速度快,效率高

ramdisk:将一部分固定大小的内存当作分区来使用

nfs:网络共享文件技术,用于开发调试阶段,挂载到嵌入式设备,可非常方便的修改根文件系统的内容。

三.根文件系统的制作

1.根文件系统的制作

a.首先进入一个你想创建根文件系统rootfs的目录创建一shell脚本文件,取名只要自己便于

识别即可这里取名为create_rootfs_bash,打开后输入以下内容

#!/bin/sh //脚本解析命令

echo "------Create rootfs directons start...--------"

mkdir rootfs //在当前目录创建rootfs目录

cd rootfs //进入rootfs目录

echo "--------Create root,dev....----------"

mkdir root dev etc boot tmp var sys proc lib mnt home usr//创建一系列必备子目录mkdir etc/init.d etc/rc.d etc/sysconfig //同上

mkdir usr/sbin usr/bin usr/lib usr/modules//同上

echo "make node in dev/console dev/null"

mknod -m 600 dev/console c 5 1 //创建设备节点,若失败则启动时找不到console mknod -m 600 dev/null c 1 3 //同上

mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp

mkdir var/lib var/lock var/run var/tmp

chmod 1777 tmp //改变使用权使得只有用户有权删除他

chmod 1777 var/tmp

echo "-------make direction done---------"

b.因为这里使用动态链接库也可使用静态链接库(也可使用静态库,但静态库比较大,实际开发时往往使用动态库),这里直接拷贝友善之臂的动态库,root_qtopia下载后打开将lib 下的所有文件复制到rootfs目录下的lib目录

在这里我的为 cp /home/root_qtopia/lib* /home/filesystem/rootfs/lib

c.配置busybox,进入busybox目录修改makefile文件指定交叉编译器和平台

CROSS_COMPILE ?=arm-linux- //大约在164行

ARCH ?=arm //大约在189行

接下来执行make menuconfig开始配置若你有友善的默认配置的话可以直接参考拷贝

配置过程如下(1)Busybox Settings--->

一项项配置如下打开第一项

相关文档
最新文档