【ACCESS精品源码栏目提醒】:以下是网学会员为您推荐的ACCESS精品源码-ARM_Linux_JFFS2文件系统的制作 - 软件工程,希望本篇文章对您学习有所帮助。
使用新的 busybox-1.13.3 制作 jffs2 文件系统由于之前使用的文件系统中的 busybox 是 1.5 版本,结果很多工具都没有完善,这一次,在www.busybox.net 上下载了当前的最新稳定版本,busybox-1.13.3 来制作,总算搞定了,但也出现了一些问题,贴出我的过程跟大家分享一下,也给有需要的人一点帮助,希望如此。
全文如下:2009-3-26陈纪煌今天尝试了移植新的文件系统,使用的是 busybox-1.13.3 稳定版本由于之前所使用的版本是 busybox-1.5.0,结果发现很多东西无法支持,比如 nfs 无法挂在,并且 clear 等工具无法正常使用所以下了一个新的版本进行尝试1.解压该包tar xf busybox-1.13.3.tar.bz2cd busybox-1.13.32.修改 Makefile找到CROSS_COMPILE 修改为 CROSS_COMPILE arm-linux-找到ARCH SUBARCH修改为ARCH arm3.进行默认配置make defconfig4.对配置信息进行修改make menuconfig检查 Miscellaneous Utilities--- taskset 是否已经去除同时设置如下:Busybox Settings --- Build Options --- Build BusyBox as a static binry no shared libs Cross Compiler prefix/usr/local/arm/3.4.1/bin/ Installation Options --- Dont use /usr BusyBox installationPROJECT/rootfs/rootfs_1.13这几个设置对于之前做过相关
工作的人来说是比较熟悉的,都很容易知道为何如此做。
makemake install编译出错修改 networking/interface.c 818 行改为 .type -1这样编译就能通过。
我使用 gcc 来编译是能通过的,但是用 arm-linux-gcc 编译就无法通过,应该是编译起的函数库的问题。
因为报错信息是关于
网络协议中一个宏的定义,就好像socket 中的 AF_I
NET 差不多。
编译结束后,在PROJECT/rootfs/下建立 rootfs_1.13 文件夹并在其中建立如下路径mkdir bin sbin lib etc dev mnt usr/bin usr/sbin usr/lib proc sys -p并执行 make install 则将 busybox 安装5.加入运行需要的库文件写了一个脚本,把这个放在/usr/local/arm/3.4.1/arm-linux/lib/下执行,目的是将一些
程序运行时需要的函数库复制到目标文件系统的 lib 路径下=========以下是脚本内容===================/bin/bashYou should put this file cp.sh in CROSS-COMPILE/lib/ROOTFS_LIBPROJECT/rootfs/rootfs_1.13/lib/for file in libc libcrypt libdl libm libpthread libresolv libutildocp file-.so ROOTFS_LIBcp -d file.so.0-9 ROOTFS_LIBdonecp -d ld.so ROOTFS_LIBend script=============脚本结束========================6.在PROJECT/rootfs/rootfs_1.13/etc/下建立如下文件或者路径vi fstab内容是:proc /proc proc defaults 0 0sysfs /sys sysfs defaults 0 0vi priflie内容是:/bin/shYou should put this file profile into your CONFIG_PREFIX/etc/echo Set seaech library in /etc/profileexport LD_LIBRARY_PATH/lib:/usr/libecho Set user path in /etc/profileexport PATH/bin:/sbin:/usr/bin:/usr/sbinalias llls -l/sbin/ifconfig eth0 218.192.161.80 netmask 255.255.255.0/sbin/ifconfig lo 127.0.0.0echo Configure net donemkdir init.dcd init.dvi rcS内容是/bin/sh/bin/mount -a这样就差不多大功告成了7.制作 jffs2 文件系统使用 mkfs.jffs2mkfs.jffs2 -r rootfs_1.13/ -o rootfs.jffs2 -p -l -n -e 0x8000 -m size生成的文件 rootfs.jffs2 就是要烧写的文件系统8.烧写过程将生成的 rootfs.jffs2 放到 tftpd 服务路径下,我的是在/tftpboot/启动 u-boottftp 0x30008000 rootfs.jffs2nand erase 0x600000 0x3a00000这里清除哪里就跟板的设置有关了nand write 0x30008000 0x600000 xxxxxxxxxx 表示你下载的 rootfs.jffs2 的大小,16 进制表示,当然,肯定是比 0x3a00000 小了9.启动后,总是出现如下提示cant open /dev/tty2: No such file or directorycant open /dev/tty3: No such file or directorycant open /dev/tty4: No such file or directory在
源码路径下 grep cant open -r最后发现在 init/init.c 文件中有
问题经过分析,原因在于如下 3 句,694 new_init_actionASKFIRSTbb_default_login_shellVC_2695 new_init_actionASKFIRSTbb_default_login_shellVC_3696 new_init_actionASKFIRSTbb_default_login_shellVC_4这三句会启动三个虚拟终端,可是在我的板上没这个必要,所以注释掉,重新编译,制作文件系统这样问题就解决了而且新的 busybox 不会显示很多 CRC 的错误信息,而且工具的功能得到了增强,还能挂在nfs。
10.如果你遇到进入系统后狂输出without ECC is “之类的信息,可以把 linux
源码中关于这一部分的信息屏蔽掉。
具体在哪,交给 grep 搞定吧需要 MTD 设备的工具包,从 http://www.linux-mtd.infradead.org/下载 mtd-utils 的 tarball,可以下载最新的。
解压编译生成 mkfs.jffs2 工具,用它来将一个目录制作成 jffs2 文件系统映像文件。
两个 可以参考的命令:mkfs.jffs2 -n -s 512 -e 16KiB -d rootfs -o rootfs.jffs2-n 表示不要在每个擦除块上都加上清除标志。
-s 512 指明一页大小为 512 字节-e 16KiB 指明一个擦除块大小为 16KB-d 表示根文件系统目录-o 表示输出文件mkfs.jffs2 -r rootfs -o rootfs.jffs2 -e 0x4000 --pad0x500000 -s 0x200-n-r : 指定要做成 image 的源资料夹.--pad (-p): 用 16 进制来表示所要输出档案的大小,也就是 root.jffs2 的 size。
很重要的是 为了不浪费 flash 空间 这个值最好符合 flash driver 所规划的区块大小.以我的板子来说,就是 5MB.如果挂载后会出现类似:CLEANMARKER node found at 0x0042c000 has totlen 0xc normal0x0 的警告,则加上 -n 就会消失。
如何制作和使用 jffs2 文件系统如何制作和使用 jffs2 文件系统如何制作和使用 jffs2 文件
系统本文主要介绍如何在 AT91SAM9261EK 板子上制作和使用 jffs2 文件系统,使用的是 linux-2.6.21 内核。
首先:配置 MTD make menuconfig进入 MemoryTechnology Devices MTD ---Memory Technology Device MTD support Debugging MTD partitioning support Command line partition tableparsing Direct char device
access to MTDdevices Caching block device
access to MTDdevicesRAM/ROM/Flash chip drivers -----Detect non-CFIAMD/JEDEC-compatible flash chipsSupport forAMD/Fujitsu flash chipsMapping drivers for chip
access --- Supportnon-linear mappings of flash chipsSelf-contained MTD device drivers --- Support forAT45... DataFlashNAND Flash Device Drivers ---- NAND DeviceSupport Support forNAND Flash /SmartMedia on AT91File systems ----Second extended fssupport Inotify file changenotification support Inotify support for userspaceFilesystem inUserspace supportMiscellaneous filesystemsJournallingFlash File System v2 JFFS2 support JFFS2write-buffering supportCompressed ROMfile system support cramfs以上配置中没有列出的都没选;其配置仅做参考,可根据自己的需要自行配置。
make all其次:制作 mtd-util 工具 从网上下载 zlib-1.2.3.tar.gz 解压缩 cd zlib-1.2.3 ./configure –prefix/usr/local/arm/3.4.1/arm-linux --shared修改 Makefile 如下:CCarm-linux-gccLDSHAREDarm-linux-ld -shared make all make install注意:这里是安装在/usr/local/arm/3.4.1/arm-
linux 目录下由于交叉编译 mtd 工具时需要 zlib.h 文件,所以在编译之前先安装 zlib 库文件。
从网上下载 mtd-snapshot-20050519.tar.bz2 解压缩 cd mtd/util修改该目录下的 Makefile:CROSSarm-linux- make all然后将该目录下生成的flash_eraseflash_eraseall mkfs.jffs2 工具放在 ramdisk 文件系统中(我这里放在/bin 目录下),另外在 ramdisk 文件系统的 dev 目录下要保证有mtd0mtd9mtdblock0mtdblock9 这些设备, 如果没有可参考 ramdisk 文件系统的制作,也可从 pc 机相同目录下拷贝,要加上文件属性。
另外,需要将/arm-linux/lib 目录下的 libz.so libz.so.1libz.so.1.2.3 文件拷贝到 ramdisk 文件系统的/lib 目录下,否则 mkfs.jffs2工具不能使用。
最后将新生成的 uImage 和 ramdisk 文件下载到板子上,起动系统,使用命令 cat/proc/mtd 可以看到dev: size erasesize namemtd0: 00040000 00020000 Partition 1mtd1: 0ffc0000 00020000 Partition 2mtd2: 00420000 00000210 spi0.0-AT45DB321x这里 mtd0mtd1 是 nandflash 上的分区; mtd2 是 dataflsh 上的分区,该分区上放有 u-bootuImage.imgramdisk.img所以我们这里可以使用空的nandflash 上的两个分区。
使用之前要先用工具 flash_erase 或者flash_eraseall 擦除 nandflash,具体使用的步骤如下: flash_erase /dev/mtd1制作 jffs2 映像 cd /var/tmp mkdir jffs2 jffs2 下的目录可以任意建 mkfs.jffs2 –d jffs2/ -o jffs2.img cp /var/tmp/jffs2/jffs2.img/dev/mtdblock1最后 mount -t jffs2 /dev/mtdblock1/mnt/mtd 即可,使用结束可使用 umount/mnt/mtd 卸载.如果只是当作普通的 jffs2 来使用 dataflash 或者 nandflash,可不必制作jffs2 映像,只需要最后一步 mount -t jffs2 /dev/mtdblock1/mnt/mtd 即可如何制作和使用 jffs2 文件系统本文主要介绍如何在 AT91SAM9261EK 板子上制作和使用 jffs2 文件系统,使用的是 linux-2.6.21 内核。
首先:配置 MTD make menuconfig进入 MemoryTechnology Devices MTD ---Memory Technology Device MTD support Debugging MTD partitioning support Command line partition tableparsing Direct char device
access to MTDdevices Caching block device
access to MTDdevicesRAM/ROM/Flash chip drivers -----Detect non-CFIAMD/JEDEC-compatible flash chipsSupport forAMD/Fujitsu flash chipsMapping drivers for chip
access --- Supportnon-linear mappings of flash chipsSelf-contained MTD device drivers --- Support forAT45... DataFlashNAND Flash Device Drivers ---- NAND DeviceSupport Support forNAND Flash /SmartMedia on AT91File systems ----Second extended fssupport Inotify file changenotification support Inotify support for userspaceFilesystem inUserspace supportMiscellaneous filesystemsJournallingFlash File System v2 JFFS2 support JFFS2write-buffering supportCompressed ROMfile system support cramfs以上配置中没有列出的都没选;其配置仅做参考,可根据自己的需要自行配置。
make all其次:制作 mtd-util 工具 从网上下载 zlib-1.2.3.tar.gz 解
压缩 cd zlib-1.2.3 ./configure –prefix/usr/local/arm/3.4.1/arm-linux --shared修改 Makefile 如下:CCarm-linux-gccLDSHAREDarm-linux-ld -shared make all make install注意:这里是安装在/usr/local/arm/3.4.1/arm-linux 目录下由于交叉编译 mtd 工具时需要 zlib.h 文件,所以在编译之前先安装 zlib 库文件。
从网上下载 mtd-snapshot-20050519.tar.bz2 解压缩 cd mtd/util修改该目录下的 Makefile:CROSSarm-linux- make all然后将该目录下生成的flash_eraseflash_eraseall mkfs.jffs2 工具放在 ramdisk 文件系统中(我这里放在/bin 目录下),另外在 ramdisk 文件系统的 dev 目录下要保证有mtd0mtd9mtdblock0mtdblock9 这些设备,如果没有可参考 ramdisk 文件系统的制作,也可从 pc 机相同目录下拷贝,要加上文件属性。
另外,需要将/arm-linux/lib 目录下的 libz.so libz.so.1libz.so.1.2.3 文件拷贝到 ramdisk 文件系统的/lib 目录下,否则 mkfs.jffs2工具不能使用。
最后将新生成的 uImage 和 ramdisk 文件下载到板子上,起动系统,使用命令 cat/proc/mtd 可以看到dev: size erasesize namemtd0: 00040000 00020000 Partition 1mtd1: 0ffc0000 00020000 Partition 2mtd2: 00420000 00000210 spi0.0-AT45DB321x这里 mtd0mtd1 是 nandflash 上的分区; mtd2 是 dataflsh 上的分区,该分区上 放 有 u-bootuImage.imgramdisk.img 所 以 我 们 这 里 可 以 使 用 空 的nandflash 上 的 两 个 分 区 。
使 用 之 前 要 先 用 工 具 flash_erase 或 者flash_eraseall 擦除 nandflash,具体使用的步骤如下: flash_erase /dev/mtd1制作 jffs2 映像 cd /var/tmp mkdir jffs2 jffs2 下的目录可以任意建 mkfs.jffs2 –d jffs2/ -o jffs2.img cp /var/tmp/jffs2/jffs2.img/dev/mtdblock1最后 mount -t jffs2 /dev/mtdblock1/mnt/mtd 即可,使用结束可使用 umount/mnt/mtd 卸载.如果只是当作普通的 jffs2 来使用 dataflash 或者 nandflash,可不必制作jffs2 映像,只需要最后一步 mount -t jffs2 /dev/mtdblock1/mnt/mtd 即可