九鼎创展论坛
标题: x4412&ibox项目实战9-搭建最简单的linux文件系统(3.8秒瞬间启... [打印本页]
作者: armeasy 时间: 2014-9-23 11:26
标题: x4412&ibox项目实战9-搭建最简单的linux文件系统(3.8秒瞬间启...
Linux文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。有了文件系统,用户就可以很方便的和Linux设备进行数据交互了。
随着实际需求的不断提高,Linux文件系统也变得越来越庞大。无论它如何千变万化,归根结底,都是基于最基本的linux文件系统不断丰富而来。因此,我们完全有必要了解最基本的文件系统的搭建过程,更加复杂的文件系统可以举一反三,各个击破,真正做到一通百通。下面我们将逐步讲解最简单的linux文件系统的制作方法。
第一步:在ubuntu的用户目录下新建一个文件系统的总目录,如rootfs_x4412:
第二步:编译安装busybox
从busybox官网(
www.busybox.net)下载最新的busybox源码包,这里以1.22.1版本为例,源码包名称为busybox-1.22.1.tar.bz2。
解压源码包,打开busybox根目录的Makefile文件,指定交叉编译工具链以及体系架构,注意,请以自己的实际交叉编译工具安装路径为准:
- CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
- ARCH ?= arm
复制代码在busybox根目录下执行make menuconig配置busybox:
进入Busybox Settings目录,
再进入Build Options目录,
选中第一项,即将Busybox编译成静态的二进制文件。使用静态的文件,可以不依赖于共享库,后面我们将会进一步说明。其他选项暂且默认,当然我们也可以根据自己的实际需要添加或是删剪一些busybox指令,以及其他的一些特色选项。
退出menuconfig并保存配置后,在busybox根目录下执行如下指令编译安装:
这时在busybox根目录会生成_install目录,里面存放着bin,sbin,usr三个目录以及linuxrc文件。这些文件构成了busybox的各种指令集。
前面我们提到,将busybox编译成静态文件后,不再依赖共享库。进入busybox的根目录,使用如下指令查看busybox依赖的共享库:
- arm-none-linux-gnueabi-readelf -d busybox
复制代码 可以看到如下打印提示:
- There is no dynamic section in this file.
复制代码 说明我们编译的busybox文件确实不依赖于任何的动态库。
提示:这里如果找不到arm-none-linux-gnueabi-readelf文件,请在ubuntu用户目录的.bashrc文件的最后面声明PATH环境变量,声明内容如下:
- PATH=/usr/local/arm/arm-2009q3/bin:$PATH
- export PATH
复制代码 再执行如下指令即可:
第三步:填充文件系统内容
将上一步_install目录下bin,sbin目录全部复制到文件系统目录rootfs_x4412,注意在bin和sbin目录下有很多都是软链接,复制时千万不要丢失了文件属性:
- cp -a _install/bin ../rootfs_x4412
- cp -a _install/sbin ../rootfs_x4412
复制代码 进入文件系统目录rootfs_x4412,新建其他目录:
- mkdir dev etc lib mnt proc sys tmp usr var
复制代码 在etc下新建init.d目录,然后在init.d目录下新建rcS文件:
- cd etc
- mkdir init.d
- cd init.d
- touch rcS
- chmod 777 rcS
复制代码 编辑rcS文件,添加内容如下:
- #!/bin/sh
- /bin/mount -a #mount all stuff from /etc/fstab
- /sbin/ifconfig eth0 192.168.1.15 up #开机自动设置eth0的IP地址
- /sbin/ifconfig eth1 192.168.1.16 up #开机自动设置eth1的IP地址
复制代码 在etc目录下新建fstab文件,该文件将会被rcS中的mount –a语句调用。编辑fstab文件内容如下:
- none /proc proc defaults 0 0
复制代码这里表示分别将proc文件系统挂载到相应的目录,第二列为所挂载的目录,第三列为要挂载的文件系统,第四列为挂载所使用的属性。
在文件系统根目录下建立linuxrc文件,编辑内容如下:
- #!/bin/sh
- /bin/mount -t proc proc /proc
- /bin/mount -t sysfs sysfs /sys
- /sbin/mdev -s
-
- exec /sbin/init
复制代码 这里将proc和sysfs文件系统分别挂载到proc和sys目录。
proc文件系统是一个伪文件系统,它只存在内存当中,而 不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于 系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
sysfs 把连接在系统上的设备和总线组织成为一个分级的文件,它们可以被从用户的空间存取到。这是被设计用来处理那些以前驻留在 /proc/ 的设备和驱动程序指定的选件以及用来处理那些以前由 devfs 提供支持的动态加载设备。注意一定要修改linuxrc文件的属性为777,否则会提示failedto execute /linuxrc的错误。
在/etc下建立mdev.conf文件,内容为空即可。如果不建立这个文件,将会提示下面的错误:
- mdev: /etc/mdev.conf: No such file or directory
复制代码使用下面命令创建即可:
在/dev下建立console,null,tty2,tty3,tty4等五个字符设备文件:
- mknod console c 5 1
- mknod null c 1 3
- mknod /dev/tty2 c 4 2
- mknod /dev/tty3 c 4 3
- mknod /dev/tty4 c 4 4
复制代码c表示创建没有缓冲的字符特殊文件,后面的两个数字分别表示主设备号和次设备号。
第四步:制作ext4文件系统
本实验基于x4412或ibox开发平台,对应硬件设备存储器均为emmc,并不是传统的nand flash,因此文件系统格式也不再是传统的yaffs或是jffs文件系统了。
在ubuntu用户目录下新建目录rootfs_tmp文件,用于临时挂载文件系统:
制作一个12M的ext4空白文件:
- dd if=/dev/zero of=rootfs.ext4 bs=1024 count=12288
复制代码 再将新建的rootfs.ext4文件格式化为ext4格式:
将rootfs.ext4文件挂载到前面我们新建的临时目录rootfs_tmp,注意这里我们要使用mount –o loop的属性,表示我们要把rootfs.ext4当作硬盘分区挂载到rootfs_tmp:
- sudo mount -o loop rootfs.ext4 ./rootfs_tmp
复制代码 这时,我们就可以给rootfs.ext4填充内容了。执行如下指令拷贝文件系统内容:
- cp rootfs_x4412/* ./rootfs_tmp -ar
复制代码 拷贝完后,卸载挂载的rootfs.ext4文件,即完成了文件系统的制作:
我们可以将rootfs.ext4文件烧写到开发板,测试是否可以正常挂载。实际测试界面如下:
执行到如下语句,说明文件系统已经挂载起来了。
- Please press enter to activate this console
复制代码 从上面我们可以看到,整个x4412的启动过程,只花了3.58秒。当然随着文件系统的逐渐庞大,启动开销也会不断增加。
第五步:我们做好文件系统后,经常要打包文件系统,烧写测试。即第四步经常要重复操作。为此,我们可以编写打包文件系统的脚本。参考脚本如下:
- # Description : Build linux filesystem Script.
- # Authors : lqm
- # Version : 0.01
- # Notes : None
- #
-
- # must root user
- echo "making ext4 rootfs now,wait a moment..."
-
- if [ -d rootfs_tmp ]; then
- rm -rf rootfs_tmp
- fi
-
- if [ -f rootfs.ext4 ]; then
- rm -rf rootfs.ext4
- fi
-
- mkdir -p rootfs_tmp
-
- dd if=/dev/zero of=rootfs.ext4 bs=1024 count=12288
- mkfs.ext4 rootfs.ext4
- mount -o loop rootfs.ext4 ./rootfs_tmp
- cp ./rootfs_x4412/* ./rootfs_tmp -ar
- umount ./rootfs_tmp
-
- rm -rf rootfs_tmp
-
- echo "^_^ make x4412 rootfs.ext4 successful!"
复制代码 附做好的脚本文件及文件系统:
作者: zyx19870529 时间: 2014-9-24 17:48
{:2_28:}赞一个
作者: deny2010 时间: 2014-9-28 10:08
好,需要
作者: QQ_04E889 时间: 2014-9-28 11:20
x4412&ibox项目实战 不错
作者: hardjet 时间: 2014-9-29 18:15
正需要呢~~~
作者: zgkxzx 时间: 2014-9-30 13:31
非常好写的!
作者: guitou 时间: 2014-10-1 15:43
学习了~~
作者: 紫幻 时间: 2014-10-7 15:43
下载下来看看
作者: hyl1718 时间: 2014-10-23 15:27
&ibox项目实战9-搭建最简单的linux文件系统(3.8秒瞬间启...
作者: zjdada 时间: 2014-10-25 09:03
不错,写的很好,支持一下!
作者: zhengxi 时间: 2014-10-31 22:35
下载看看,怎么样啊
作者: yaogen11 时间: 2014-11-21 11:31
看看,学习学习
作者: Beijixiong_433 时间: 2014-12-10 11:25
学已至此,继续前行
作者: mzucore 时间: 2014-12-12 12:10
非常感谢您的分享~~~~~~~~
作者: maorain 时间: 2015-1-5 08:38
回复恢复
作者: siyrra 时间: 2015-1-5 15:01
不得不承认,相当不错的学习东东
作者: 1670739974 时间: 2015-3-2 22:31
thanks,仔细看看
作者: piaoxueboy 时间: 2015-5-13 12:20
有自己的文件了 但是还是有必要学习一下
作者: tsy360 时间: 2015-5-21 17:35
不错,很好的学习资料

作者: studylinuxlong 时间: 2015-9-16 14:43
非常棒的教程~~~~~~
作者: buyuan123 时间: 2015-10-28 18:58
谢谢分享,看下
作者: D404D404 时间: 2015-12-8 15:22
好帖 必须要顶一个!
作者: D404D404 时间: 2015-12-8 15:23
好帖 必须要顶一个!
作者: hong_hong789 时间: 2015-12-14 22:30
学习试做下落。。。。
作者: rockefeller 时间: 2016-1-7 16:17
正在参考中
作者: 摩斯电码 时间: 2016-1-20 16:00
支持,我的板子是tiny4412
作者: 北极冰晨123 时间: 2016-4-11 17:24
1234567890
作者: jilux 时间: 2016-4-14 14:46
挺号的东西
作者: betterManzZ 时间: 2016-5-8 21:01
和之前其它网站上看到的不一样,学习一下!
作者: 398597069 时间: 2016-5-22 18:03
好东东--------------------
作者: zmy12138 时间: 2016-12-12 17:32
谢谢谢谢谢谢谢谢谢谢谢谢谢谢
作者: foverfure 时间: 2017-5-14 18:44
多谢多谢
作者: 红酒里的小鱼 时间: 2017-7-5 13:26
第五步:我们做好文件系统后,经常要打包文件系统,烧写测试。即第[quote][/quote]
作者: Fine_ii 时间: 2018-2-1 13:34
搭建最简单的linux文件系统
欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/) |
Powered by Discuz! X3.2 |