Busybox文件系统的移植

相关软件下载地址:http://pan.baidu.com/s/16yo8Y

fsc100开发板

交叉编译器:arm-cortex_a8-linux-gnueabi-gcc

busybox-1.17.3.tar.bz2

一、根文件系统制作

1、  源码下载

我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:

http://busybox.net/downloads/

2、  解压源码

$ tar  xvf  busybox-1.17.3.tar.bz2

3、  进入源码目录

$ cd  busybox-1.17.3

4、  配置源码

$ make menuconfig

Busybox Settings --->

Build Options --->

[*] Build BusyBox as a static binary (no shared libs)

[ ] Force NOMMU build

[ ] Build with Large File Support (for accessing files > 2 GB)

(arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix

() Additional CFLAGS

5、  编译

$ make

6、  安装

busybox默认安装路径为源码目录下的_install

$ make  install

7、  进入安装目录下

$ cd  _install

$ ls

bin  linuxrc  sbin  usr

8、  创建其他需要的目录

$ mkdir  dev  etc  mnt  proc  var  tmp  sys  root

9、  添加库

  • 将工具链中的库拷贝到_install目录下

$ cp  /home/linux/toolchain/arm-cortex_a8-linux-gnueabi/lib   ./  -a

  • 删除静态库和共享库文件中的符号表

$ rm  lib/*.a

$ arm-cortex_a8-linux-gnueabi-strip  lib/*

  • 删除不需要的库,确保所有库大小不超过4M

$ rm  lib/libstdc++*

$ du  -mh   lib/

10、 添加系统启动文件

在etc下添加文件inittab,文件内容如下:

#this is run first except when booting in single-user mode.

:: sysinit:/etc/init.d/rcS

# /bin/sh invocations on selected ttys

# start an "askfirst" shell on the console (whatever that may be)

::askfirst:-/bin/sh

# stuff to do when restarting the init process

::restart:/sbin/init

# stuff to do before rebooting

::ctrlaltdel:/sbin/reboot

在etc下添加文件fstab,文件内容如下:

#device     mount-point     type        options         dump     fsck order

proc         /proc             proc           defaults     0                0

tmpfs         /tmp                   tmpfs         defaults         0                 0

sysfs           /sys                    sysfs           defaults           0                 0

tmpfs     /dev                   tmpfs         defaults         0                 0

这里我们挂载的文件系统有三个proc、sysfs和tmpfs。在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持

修改内核配置:

File systems --->

Pseudo filesystems --->

[*] Virtual memory file system support (former shm fs)

[*] Tmpfs POSIX Access Control Lists

重新编译内核

在etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:

#!/bin/sh

# This is the first script called by init process

/bin/mount  -a

echo  /sbin/mdev  >  /proc/sys/kernel/hotplug

/sbin/mdev  -s

为rcS添加可执行权限:

$ chmod   +x  init.d/rcS

在etc下添加profile文件,文件内容为:

#!/bin/sh

export HOSTNAME=farsight

export USER=root

export HOME=root

export PS1="[[email protected]$HOSTNAME \W]\# "

PATH=/bin:/sbin:/usr/bin:/usr/sbin

LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH

export PATH  LD_LIBRARY_PATH

11、 设备文件创建

根文件系统中有一个设备节点是必须的,在dev下创建console节点

$ sudo  mknod   dev/console  c  5  1

重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件

       二、NFS测试

1、删除原先的/source/rootfs

$ sudo  rm  -rf  /source/rootfs

2、将我们新建的根文件系统拷贝到/source/rootfs目录下

$sudo  mkdir  /source/rootfs

$ sudo  cp  _install/*   /source/rootfs   –a

3、设置uboot环境变量

# setenv  bootcmd  tftp  20008000  zImage\; go  20008000

# setenv  bootargs  root=nfs  nfsroot=192.168.1.100:/source/rootfs  init=/linuxrc console=ttySAC0,115200  ip=192.168.1.200

# saveenv

重新启动开发板,查看是否能够正常挂载,功能是否正常

三、制作ramdisk文件系统

通过NFS测试以后,就可以制作ramdisk文件系统了,具体如下:

1、制作一个大小为8M的镜像文件

$ cd  ~

$ dd  if=/dev/zero  of=initrd.img  bs=1k  count=8192 (initrd.img为8M)

2、格式化这个镜像文件为ext2

$ mkfs.ext2  -F  initrd.img

3、在mount下面创建initrd目录作为挂载点

$ sudo  mkdir  /mnt/initrd

4、将这个磁盘镜像文件挂载到/mnt/initrd下

注意这里的initrd.img不要和ubuntu根目录下的initrd.img弄混了,同时initrd.img不能存放在rootfs目录中

$ sudo  mount  -t  ext2   -o  loop  initrd.img  /mnt/initrd

5、将我们的文件系统复制到initrd.img中

将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面

$ sudo  cp  /source/rootfs/*   /mnt/initrd  –a

6、卸载initrd

$ sudo  umount  /mnt/initrd

7、压缩initrd.img为initrd.img.gz并拷贝到/tftpboot下

$ gzip  --best  -c  initrd.img  >  initrd.img.gz

$ cp  initrd.img.gz  /tftpboot

8、配置内核支持RAMDISK

制作完 initrd.img.gz后,需要配置内核支持RAMDISK作为启动文件系统

Device Drivers

SCSI device support  --->

<*> SCSI disk support

Block devices  --->

<*>RAM  block  device  support

(1)Default number of RAM disks

(8192) Default RAM disk size (kbytes)   (修改为8M)

General setup  --->

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

重新编译内核,复制到/tftpboot

9、在U-BOOT命令行重新设置启动参数:

# setenv  bootcmd  tftp  20008000  zImage \; tftp  20800000  initrd.img.gz \; go  20008000

# setenv  bootargs  root=/dev/ram  rw  init=/linuxrc  initrd=0x20800000,8M console=ttySAC0,115200

# saveenv

重新启动开发板查看能否正常启动

四、制作cramfs文件系统

1、cramfs文件系统镜像制作

由于系统提供制作cramfs文件系统的工具,可以直接使用。具体操作如下;

$ mkfs.cramfs  /source/rootfs  rootfs.cramfs

2、将rootfs.cramfs拷贝到/tftpboot目录下

$ sudo  cp  rootfs.cramfs  /tftpboot

3、将rootfs.cramfs烧写到nand flash的第三个分区上

u-boot下执行如下命令

# tftp  20008000  rootfs.cramfs

# nand  erase  400000  400000

# nand  write  20008000  400000  400000

4、重新设置u-boot启动参数

# setenv  bootcmd  tftp  20008000  zImage\; go  20008000

# setenv  bootargs  root=/dev/mtdblock2   init=/linuxrc  console=ttySAC0,115200

# saveenv

启动开发板,测试是否成功。

[[email protected] /root] # ls /

bin       etc      linuxrc     sbin     tmp      var

dev      lib      mnt      proc     test     usr

[[email protected] /root] # mkdir test

mkdir: Cannot create directory `test‘: Read-only file system

注意:cramfs格式的文件系统是只读

       五、制作jffs2文件系统

1、配置内核支持jffs2文件系统

File systems  --->

[*] Miscellaneous filesystems  --->

<*>   Journalling  Flash  File  System  v2  (JFFS2)  support

重新编译内核并拷贝到/tftpboot下

2、zlib的编译

解压zlib-1.2.3.tar.bz2并进入zlib-1.2.3配置编译安装

$ tar  xvf  zlib-1.2.3.tar.bz2

$ cd  zlib-1.2.3

$ ./configure

$ make

$ sudo  make install

3、mtd工具编译

解压mtd-snapshot-20050519.tar.bz2 并进入mtd/util编译安装

$ tar  xvf  mtd-snapshot-20050519.tar.bz2

$ cd  mtd/util

$ make

$ sudo  make  install

这样我们的系统里就有了mkfs.jffs2这个工具了

4、jffs2文件系统镜像制作

$ mkfs.jffs2   -r  /source/rootfs  -o  rootfs.jffs2  -e  0x20000  --pad=0x400000  -n

$ sudo  cp  rootfs.jffs2  /tftpboot

5、jffs2文件系统烧写

# tftp  20008000  rootfs.jffs2

# nand  erase  400000  400000

# nand  write  20008000  400000  400000

6、设置u-boot启动参数

# setenv  bootcmd  tftp  20008000  zImage\; go  20008000

# setenv  bootargs  root=/dev/mtdblock2   rootfstype=jffs2  rw  init=/linuxrc

console=ttySAC0,115200

# saveenv

重新启动开发板,查看是否成功

时间: 2024-10-12 10:50:24

Busybox文件系统的移植的相关文章

JFFS2文件系统的移植

Linux文件系统的移植-JFFS2 JFFS2是JFFS的后继者,由Red Hat重新改写而成.JFFS2的全名为JournallingFlash File System Version 2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统.与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层.它只会直接在MTD设备上实现日志结构的文件系统.JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本

linux文件系统的移植-制作JFFS2文件系统

JFFS2全名是 Journalling Flash File System Version2,是Redhat公司开发的快闪存储器(简称:闪存:英文: Flash Memory)的档案系统[1],其前身是JFFS, 最早只支援NOR Flash, 自2.6版以后开始支援NAND Flash, 极适合使用于嵌入式系统. JFFS2 功能如下: 支援 NAND flash 装置. 硬连结(Hard links).这是JFFS 碍于文件格式所无法支援的功能. 压缩.有三种算法: zlib, rubin

FatFs文件系统的移植

FatFs 的底层可以写一次命令,读写多个扇区.FatFs的设计的读写的思想就很好,小块的数据,我就经过Buffer来存储,大块的数据,我就直接进行存取,那样速度,效率高了很多,看图: FatFs文件系统的结构也很清晰,也是看图: 补充一点,FatFs的作者写了两个,一个是正宗的FatFs,比较适合大的RAM的设备,另一个是FatFs/Tiny,比较适合小RAM的系统,比如单片机,FatFs/Tiny占用较小的RAM,代价是更慢的读写速度和更少的API函数.不过两个都支持FAT12,FAT16,

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

转自 http://www.mcuos.com/thread-3822-1-10.html 一.文件系统简介 理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目录结构,由于linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结构也就是文件系统,文件系统是为用户反映系统的一种形式,为用户提供一个检测控制系统的接口. 根文件系统,我认为根文件系统就是一种特殊的文件系统,那

linux系统移植和根文件系统制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5.

用Busybox构建Linux根文件系统(转载)

注:本文转载自http://blog.sina.com.cn/u/2478597014 用Busybox构建Linux根文件系统 (2015-07-05 14:25:02)   虚拟机:Virtual Box4.2.6 和VMware Workstation6.5.2(这两种虚拟机都成功实作过) 开发环境:Linux版本2.6.32,采用Ubuntu10.04 arm-linux-gcc版本:3.4.1 Busybox版本:1.7.0 开发板:飞凌嵌入式S3C2440 开发板linux内核版本:

linux 内核移植和根文件系统的制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其 中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5

关于linux kernel及文件系统在jz2440的移植

结合网上及书上的讲解,记录下linux kernel及yaffs2文件系统的移植过程及问题,以便以后查询! 部分转自:http://blog.sina.com.cn/s/blog_9d7f02120101gvnk.html 一,内核移植 修改晶振 修改arch/arm/mach-s3c2440/mach-smdk2440.c    static void __init smdk2440_map_io(void){    s3c24xx_init_io(smdk2440_iodesc, ARRAY

FL2440移植LINUX-3.4.2(四)-- 添加支持YAFFS文件系统

1.修改 MTD 驱动源码以支持 yaffs 文件系统 在/drivers/mtd/nand/s3c2410.c的846行修改chip->ecc.mode        = NAND_ECC_SOFT;为chip->ecc.mode        = NAND_ECC_NONE;    /* by zhutao */ 2.获得yaffs方法1):(这个版本的yaffs2没有成功)官网http://www.yaffs.net/download-yaffs-using-git 获得命令:git c