文件系统 1 之 根文件系统制作
来源:互联网 发布:单兵口粮淘宝卖犯法吗 编辑:程序博客网 时间:2024/05/21 17:42
原创:kylin_zeng ;http://blog.chinaunix.net/uid/23795897.html 参考国嵌教育,再次感谢各位国嵌的老师。
1、嵌入式Linux系统由Linux内核与根文件系统两部分构成,两者缺一不可。
2、制作嵌入式平台使用的Linux内核,方法和制作PC平台的Linux内核基本一致,下面使用对比的方式介绍如何制作用于mini2440开发板的内核。
1)清除原有配置与中间文件 x86: make distclean arm: make distclean
2)配置内核x86: make menuconfig arm: make menuconfig ARCH=arm /*nfs与ramdisk启动的区别*/
3)编译内核 x86: make bzImage arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-
二、根文件系统
根文件系统是Linux启动时使用的第一个文件系统。没有根文件系统,Linux将无法正常启动。根文件系统由一系列目录组成,目录中包含了应用程序、C库、以及相关的配置文件。
1)创建根文件系统的目录
mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules
2)创建设备文件
cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..
3)安装/etc
tar etc.tar.gz –C /xxx/rootfs
4)编译内核模块
进入Linux内核目录(linux 2.6.29)
make modules ARCH=arm
CROSS_COMPILE=arm-linux-
5)安装内核模块
make modules_install ARCH=arm
INSTALL_MOD_PATH=/xxx/rootfs
6)配置busybox
进入busybox目录执行 make menuconfig
a.进入Busybox Settings ->
build Options->
选中“Build busybox as a static binary”, 静态链接
Cross Compiler prefix (arm-linux-)
Installation Options->
选中“Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的
/usr目录下,破坏宿主系统
Busybox Installation Prefix (/xxx/rootfs)
该选项表明编译后的busybox的安装位置
7)编译、安装busybox
vmake ARCH=arm CROSS_COMPILE=arm-linux-
vmake install
三、ramdisk
基于前面步骤制作好的根文件系统,可进
一步制作ramdisk,步骤如下:
1)genext2fs-b 8192 -d /xxx/rootfsramdisk
** genext2fs 为产生ramdisk的工具**
2)gzip -9 -f ramdisk
四、linux文件系统:
Linux支持多种文件系统类型,包括ext2、ext3、vfat、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的应用编程接口。
图:
五、文件系统类型
根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM 和FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, ramdisk, ramfs等。
1)基于FLASH的文件系统:Flash(闪存)作为嵌入式系统的主要存储媒介,主要有NOR和NAND两种技术。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统。
2)JFFS文件系统:JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0内核为嵌入
式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。
3)Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)主要用于NOR型flash,基于MTD驱动层,特点是:可读写、支持数据压缩的日志型文件系统,并提供了崩溃/掉电安全保护等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。
4)jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大。另外,jffsx文件系统在挂载时需要扫描整个FLASH,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。
5)Yaffs:yaffs/yaffs2 (Yet Another Flash File System)是专为NAND型flash而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。
yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。
6)Cramfs:Cramfs是Linux的创始人Linus 参与开发的一种只读的压缩文件系统,它也基于MTD驱动程序。Cramfs文件系统以压缩方式存储,在运行时解压缩,所有的应用程序要求被拷到RAM里运行。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
7)基于RAM的文件系统:Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统(如ext2)装入内存的机制。将一些经常被访问而又无需更改的文件通过Ramdisk放在内存中,可以明显地提高系统的性能。
8)NFS:NFS (Network File System)是由Sun开发的一种在不同机器之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
*******************************************************************************
以下装载:http://ccgang1989.blog.163.com/blog/static/499261762012422104624972/
1.nfs
2) Device Driver -->Block device -->选中如下选项
在Initial RAM filesystem and RAM disk (initramfs/initrd) support下面的Initramfs source file(s) 中输入根文件的目录/home/chen/guoqian/4-3-2/rootfs
1、嵌入式Linux系统由Linux内核与根文件系统两部分构成,两者缺一不可。
2、制作嵌入式平台使用的Linux内核,方法和制作PC平台的Linux内核基本一致,下面使用对比的方式介绍如何制作用于mini2440开发板的内核。
1)清除原有配置与中间文件 x86: make distclean arm: make distclean
2)配置内核x86: make menuconfig arm: make menuconfig ARCH=arm /*nfs与ramdisk启动的区别*/
3)编译内核 x86: make bzImage arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-
二、根文件系统
根文件系统是Linux启动时使用的第一个文件系统。没有根文件系统,Linux将无法正常启动。根文件系统由一系列目录组成,目录中包含了应用程序、C库、以及相关的配置文件。
1)创建根文件系统的目录
mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules
2)创建设备文件
cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..
3)安装/etc
tar etc.tar.gz –C /xxx/rootfs
4)编译内核模块
进入Linux内核目录(linux 2.6.29)
make modules ARCH=arm
CROSS_COMPILE=arm-linux-
5)安装内核模块
make modules_install ARCH=arm
INSTALL_MOD_PATH=/xxx/rootfs
6)配置busybox
进入busybox目录执行 make menuconfig
a.进入Busybox Settings ->
build Options->
选中“Build busybox as a static binary”, 静态链接
Cross Compiler prefix (arm-linux-)
Installation Options->
选中“Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的
/usr目录下,破坏宿主系统
Busybox Installation Prefix (/xxx/rootfs)
该选项表明编译后的busybox的安装位置
7)编译、安装busybox
vmake ARCH=arm CROSS_COMPILE=arm-linux-
vmake install
三、ramdisk
基于前面步骤制作好的根文件系统,可进
一步制作ramdisk,步骤如下:
1)genext2fs-b 8192 -d /xxx/rootfsramdisk
** genext2fs 为产生ramdisk的工具**
2)gzip -9 -f ramdisk
四、linux文件系统:
Linux支持多种文件系统类型,包括ext2、ext3、vfat、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的应用编程接口。
图:
五、文件系统类型
根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM 和FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, ramdisk, ramfs等。
1)基于FLASH的文件系统:Flash(闪存)作为嵌入式系统的主要存储媒介,主要有NOR和NAND两种技术。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统。
2)JFFS文件系统:JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0内核为嵌入
式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。
3)Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)主要用于NOR型flash,基于MTD驱动层,特点是:可读写、支持数据压缩的日志型文件系统,并提供了崩溃/掉电安全保护等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。
4)jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大。另外,jffsx文件系统在挂载时需要扫描整个FLASH,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。
5)Yaffs:yaffs/yaffs2 (Yet Another Flash File System)是专为NAND型flash而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。
yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。
6)Cramfs:Cramfs是Linux的创始人Linus 参与开发的一种只读的压缩文件系统,它也基于MTD驱动程序。Cramfs文件系统以压缩方式存储,在运行时解压缩,所有的应用程序要求被拷到RAM里运行。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
7)基于RAM的文件系统:Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统(如ext2)装入内存的机制。将一些经常被访问而又无需更改的文件通过Ramdisk放在内存中,可以明显地提高系统的性能。
8)NFS:NFS (Network File System)是由Sun开发的一种在不同机器之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
*******************************************************************************
以下装载:http://ccgang1989.blog.163.com/blog/static/499261762012422104624972/
1.nfs
(1)创建实验目录
# mkdir -p /home/chen/guoqian/4-3-3
将国嵌光盘的linux-2.6.29(在源代码4-3-1目录下)内核拷贝到当前目录
#pwd
/home/chen/guoqian/4-3-3/
# cp -r ../4-3-1/linux-2.6.29 ./
(2)清理内核中间文件、配置文件
# pwd
/home/chen/guoqian/4-3-3/linux-2.6.29
# make distclean
(3)选择参考配置文件
将配置文件config-mini2440改成.config
#cp config-mini2440 .config
修改.config将下面一行改成:
CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=192.168.2.103:/home/chen/mini2440share/rootfs ip=192.168.2.102 console=ttySAC0 mem=64M"
注:CMDLINE ==>命令行启动参数定义了内核挂载根文件系统的方式
root=/dev/nfs ==>表示内核采用nfs的方式起根文件系统
rw ==>文件可读可写
nfsroot=192.168.2.103:/home/chen/mini2440share/rootfs ==>表示nfs的根文件系统位于nfs服务器/home/chen/mini2440share/rootfs目录,服务器的IP为192.168.2.103 console=ttySAC0 mem=64M ==>ttySAC0做为控制台,内存64M
(4)配置内核
# pwd
/home/chen/guoqian/4-3-3/linux-2.6.29
# make menuconfig ARCH=arm
进入File systems --> Network File Systems -->
<*> NFS client support
[*] NFS client support for NFS version 3
[*] Root file system on NFS
上面三项必须选上,保存后退出。
(5) 编译内核
# pwd
/home/chen/guoqian/4-3-3/linux-2.6.29
# make uImage ARCH=arm CROSS_COMPILE=arm-linux-
编译后内核映像位于arch/arm/boot目录下
在uboot下通过tftp下载uImage到开发板后启动内核就可以看到被nfs挂载的根文件系统
Mini2440# tftp 31000000 uImage
Mini2440# bootm 3100000
2. ramdisk
(1)创建实验目录
# mkdir -p /home/chen/guoqian/4-3-4
将国嵌光盘的linux-2.6.29(在源代码4-3-1目录下)内核拷贝到当前目录
#pwd
/home/chen/guoqian/4-3-4/
# cp -r ../4-3-1/linux-2.6.29 ./
(2)清理内核中间文件、配置文件
# pwd
/home/chen/guoqian/4-3-4/linux-2.6.29
# make distclean
(3)选择参考配置文件
将配置文件config-mini2440改成.config
# cp config-mini2440 .config
修改.config将下面一行改成:
CONFIG_CMDLINE="root=/dev/ram rw initrd=0x32000000,0x200000 console=ttySAC0 mem=64M"
注:root=/dev/ram ==>表示内核采用ramdisk的方式起根文件系统
rw ==>文件可读可写initrd=0x32000000,0x200000 ==>表示内核从0x32000000开始读取,读取0x200000大小的ramdisk
console=ttySAC0 mem=64M ==>ttySAC0做为控制台,内存64M
(4)配置内核
# pwd
/home/chen/guoqian/4-3-4/linux-2.6.29
# make menuconfig ARCH=arm
1) General setup -->选中下面的选项
(5) 编译内核
# pwd
/home/chen/guoqian/4-3-4/linux-2.6.29
# make uImage ARCH=arm CROSS_COMPILE=arm-linux-
编译后内核映像位于arch/arm/boot目录下
(6) ramdisk文件制作
#pwd
/home/chen/guoqian/4-3-4/
# ls
genext2fs linux-2.6.29
用genext2fs 工具产生ramdisk文件,rootfs中不要的文件可以事先删除,如lib/modules/2.6.29.4-FriendlyARM/*下的文件暂时用不上可以删除。
#./genext2fs -b 8192 -d ../4-3-2/rootfs/
压缩ramdisk生成 ramdisk.gz
# gzip -9 -f ramdisk
在uboot下通过tftp先后下载uImage和ramdisk.gz到开发板后启动内核就可以看到ramdisk方式的根文件系统
Mini2440# tftp 31000000 uImage
Mini2440# tftp 32000000 ramdisk.gz
Mini2440# bootm 3100000
3.initramfs
(1)创建实验目录
# mkdir -p /home/chen/guoqian/4-3-5
将国嵌光盘的linux-2.6.29(在源代码4-3-1目录下)内核拷贝到当前目录
#pwd
/home/chen/guoqian/4-3-5/
# cp -r ../4-3-1/linux-2.6.29 ./
(2)修改根文件系统,将init软链接到busybox
#pwd /home/chen/guoqian/4-3-2/rootfs
# ln -s ./bin/busybox init
linux kernel在自身初始化完成后,需要能够找到并运行第一个用户程序(通常叫做init程序)。用户程序库存在于文件系统中,因此内核必须找到并挂载一个文件系统文件系统才可以成功完成系统的引导过程。
(3)清理内核中间文件、配置文件
# pwd
/home/chen/guoqian/4-3-5/linux-2.6.29
# make distclean
(3)选择参考配置文件
将配置文件config-mini2440改成.config
#cp config-mini2440 .config
修改.config将下面一行改成:
CONFIG_CMDLINE="console=ttySAC0 mem=64M"
注:CMDLINE ==>命令行启动参数定义了内核挂载根文件系统的方式
console=ttySAC0 mem=64M ==>ttySAC0做为控制台,内存64M
(4)配置内核
# pwd
/home/chen/guoqian/4-3-5/linux-2.6.29
# make menuconfig ARCH=arm
进入General setup -->选中如下选项
(5) 编译内核
# pwd
/home/chen/guoqian/4-3-5/linux-2.6.29
# make uImage ARCH=arm CROSS_COMPILE=arm-linux-
编译后内核映像位于arch/arm/boot目录下
在uboot下通过tftp下载uImage到开发板后启动内核就可以看到根文件系统
Mini2440# tftp 31000000 uImage
Mini2440# bootm 3100000
Initramfs起根文件系统编译产生的内核映像uImage包括kernel和文件系统,相当于将内核和文件系统合在一起。
0
上一篇:指针
下一篇:linux下的 fdisk
相关热门文章
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- xmanager 2.0 for linux配置
- 什么是shell
- linux socket的bug??
- 请问Linux默认shell的是什么 ...
- 谁能够帮我解决LINUX 2.6 10...
- 现在的博客积分不会更新了吗?...
- shell怎么读取网页内容...
- ssh等待连接的超时问题...
给主人留下些什么吧!~~
评论热议
0 0
- 文件系统 1 之 根文件系统制作
- S3C2440之制作根文件系统
- 根文件系统制作之initramfs
- zedboard----------linux之根文件系统制作
- linux系统之根文件系统树制作
- 制作ramdisk根文件系统
- 根文件系统的制作
- 根文件系统的制作
- 根文件系统的制作
- Jffs2根文件系统制作
- 根文件系统制作
- 根文件系统制作
- 根文件系统制作
- linux根文件系统制作
- 制作ramdisk根文件系统
- ARM根文件系统制作
- ramdisk根文件系统制作
- 根文件系统的制作
- linux 实时时钟(RTC)驱动 .
- Qt之界面实现技巧
- RTC设备驱动
- IOS 字符串中去除特殊符号 stringByTrimmingCharactersInSet 应该用于账号登录等
- 【BZOJ1822】【JSOI2010】Frozen Nova 冷冻波
- 文件系统 1 之 根文件系统制作
- linux下的 fdisk
- Single-source shortest paths in directed graphs
- Cluster(Load-Balance) Oracle EBS Components
- UIWindow
- gpio操作
- WEB安全实战(六)防止浏览器记住用户名和密码
- 如何使用iFunbox读取下载app的包名bundle ID
- 文件系统 2 之 嵌入式Linux文件系统详细介绍
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
儿子发育迟缓怎么办
左右身体不协调怎么办
婴幼儿入睡困难怎么办
婴儿入睡难怎么办
孩子文化课不行怎么办
孩子不好学习怎么办
婴儿锌过量怎么办
娃娃高烧怎么办
宝宝肋外翻怎么办
孩子语迟怎么办
宝宝大动作落后怎么办
新生儿腹痛怎么办
吃饱打嗝怎么办
婴幼儿吃饱打嗝怎么办
幼儿记忆力差怎么办
毛衣出线头怎么办
毛衣有线头怎么办
老被宫本武藏秒怎么办
游泳手脚不协调怎么办
遇到李白怎么办
李白遇到猴子怎么办
dnf剑魂移速慢怎么办
打拳打死了怎么办
错过填报志愿怎么办
牙本质黄怎么办
磨牙磨损严重怎么办
儿子沉迷二次元怎么办
损伤到了牙本质怎么办
牙本质外露怎么办
成年锯齿牙怎么办
锯齿牙怎么办
梦见黑社会要钱怎么办
眉眼距离大怎么办
网贷讨到家了怎么办
黑社会上门打架怎么办
找人家要钱怎么办
被要债人打了怎么办
欠钱不还还打人怎么办
黑社会打人怎么办
惹到混混怎么办
惹了混混怎么办