嵌入式linux根文件系统制作(经典) 下载本文

No such file or directory的错误

二是只将模块简单地放在根目录或其它文件夹,没有将其拷贝到指定的lib/modules/2.6.26.6目录,

将出现

insmod: module 'gpio_driver' not found错误

不过这种方法不是很奏效

根本原因是insmod的问题,在busybox编译的时候参考下面的选项,不要使用

Linux Module Utilities ---> [ ] Simplified modutils

//该选项不要选择

[*] Support version 2.6.x Linux kernels

//此选项选上 参考如下: 10、不能执行”-h”命令

在执行xxx –h时没有任何反应。是在lib目录下缺少常见的库文件

参考如下:

[root@vm-dev rootfs]# ls lib/

ld-2.3.6.so libc-2.3.6.so libgcc_s.so libnsl.so.1 libnss_files.so.2

libnss_nis.so.2 librt-2.3.6.so libthread_db.so.1

ld-linux.so.2 libcrypt-2.3.6.so libgcc_s.so.1 libnss_compat-2.3.6.so libnss_hes

iod-2.3.6.so libpcprofile.so librt.so.1 libutil-2.3.6.so

libanl-2.3.6.so libcrypt.so.1 libm-2.3.6.so libnss_compat.so.2 libnss_hesio

d.so.2 libpthread-0.10.so libSegFault.so libutil.so.1

libanl.so.1 libc.so.6 libmemusage.so libnss_dns-2.3.6.so libnss_nis-2.

3.6.so libpthread.so.0 libtermcap.so.2 modules

libBrokenLocale-2.3.6.so libdl-2.3.6.so libm.so.6 libnss_dns.so.2 libnss_nisp

lus-2.3.6.so libresolv-2.3.6.so libtermcap.so.2.0.8

libBrokenLocale.so.1 libdl.so.2 libnsl-2.3.6.so libnss_files-2.3.6.so libnss_nispl

us.so.2 libresolv.so.2 libthread_db-1.0.so

[root@vm-dev rootfs]#

本文来自CSDN博客,转载请标明出处:

http://blog.csdn.net/kernel_32/archive/2009/02/03/3860756.aspx

嵌入式根文件系统的移植和制作(二)

北京顶嵌嵌入式培训机构 2009-10-15 15:13:28 作者:SystemMaster 来源:顶嵌(TOP-E)

文字大小:[大][中][小]

嵌入式根文件系统的移植和制作(二)

2. 基于RAM的文件系统

(1) Ramdisk

Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。

在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。

(2)ramfs/tmpfs

Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)

Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。

Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。

Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。

3. 网络文件系统NFS (Network File System)

NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。

以上讨论的都是基于存储设备的文件系统(memory-based file system),它们都可用作Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical or pseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。 我们要移植的开发板的存储设备为Nandflash,我们可以用应用比较广泛的cramfs文件系统。 二.移植准备 1.目标板

我们还是使用之前移植过程一直使用的开发板参数请参考上文的地址: http://bbs.eeworld.com.cn/thread-80832-5-1.html。 2.软件准备 (1)Busybox

Busybox被形象的称为嵌入式linux系统中的瑞士军刀,可以从这个称呼中看到busybox是一个集多种功能于一身的东西,它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中,已经足够了。

Busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一

个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如最终生成的可执行文件为busybox,当为它建立一个符号链接ls的时候,就可以通过执行这个新命令实现列目录的功能。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。 在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。 编译busybox

Busybox的编译过程与内核的编译过程很接近都是先make menuconfig进行配置,然后在make进行编译。

【1】从http://www.busybox.net/downloads/下载busybox工具。这里我们选择busybox-1.13.4.tar.bz2

【2】解压busybox-1.13.4.tar.bz2使用命令 tar jxvf busybox-1.13.4.tar.bz2

【3】进入busybox目录,修改Makefile 在164行 CROSS_COMPILE=arm-linux-

【4】Make menuconfig进行配置,可以选择静态编译,如果是动态编译的话要拷贝相应的库文件,默认配置保存即可。

【5】make all install

这是会在busybox目录下生成_install文件夹。 (2)文件系统打包工具

【1】从http://prdownloads.sourceforge.net/cramfs/下载cramfs工具。 【2】解压cramfs-1.1.tar.gz使用命令:tar zxvf cramfs-1.1.tar.gz 【3】进入cramfs工具的根目录执行make。

【4】Make后在cramfs工具的根目录中就会生成一个mkcramfs文件,这个就