jffs2根文件系统制作笔记

p { margin-bottom: 0.21cm; }

1.linux内核配置

目的:在内核中添加对 jffs2 文件系统的支持

  想要在系统中提供 jffs2 文件系统的能力,我们必须要在编辑 liunx 内核时把支持 jffs2 的选项加入。尽管 Linux 可以以模块的形式加载各种类型的设备驱动上,但我们选择直接把设备驱动及 jffs2 文件系统静态地编译进内核中。( 1 MTD 相关选项

  在 Memory Technology Devices (MTD) 选项中进行配置,具体选那些选项以后再说。  

2 )文件系统选项

  在 File Systems 选项中进行配置,选中 jffs2 相关选项,具体选那些选项以后再说。

 

2.busybox 的配置

下面是需要编译进 busybox 的功能选项 , 其他的可以根据需要自选。

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

  这个选项是一定要选择的 , 这样才能把 busybox 编译成静态链接的可执行文件 , 运行时才独立于其他函数库,否则必需要其他库文件才能运行 , 在单个 linux 内核不能使他正常工作。
[*] Do you want to build BusyBox with a Cross Compiler
选择你自己定义的交叉编译环境。

我的设置: /usr/local/arm/3.4.1/bin/arm-linux-

   Installation Options
   [*] don’t use /usr

  这个选项也一定要选,否则 make install busybox 将安装在原系统的 /usr 下,这将覆盖系统原有的命令。选择这个选项后 ,make install 后会在 busybox 目录下生成一个叫 _install 的目录,里面有 busybox 和指向他的链接。

  其他选项都是一些 linux 基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。

 

3.制作根文件系统

根文件系 的组成 :目录、 Shell、库、脚本
1. 目录
   根文件系统要包含的目录: /dev /lib /etc /proc
   /dev:设备文件系统的挂接点
   /lib:用于存放动态链接库
   /etc:用来存放初始化脚本和其他配置文件的
   /proc:用来挂载存放系统信息虚拟文件系统

未列举完 ......

 

2. Shell
   Shell 就是 Busybox,从网上下载来 busybox-1.00-pre10.tar.bz2,并解压。

#cd busybox-1.00-pre10

   # make menuconfig(busybox 的配置很关键,在后面细说
   # make
   # make install

   编译后安装在 Busybox 下的 _install 目录里。

 

3. 建立跟文件系统

我们可以在 Busybox生成的 Shell 基础上建根文件系统了,以命令示之,如下:

   # mkdir /home/lin/rootfs
   # cd /home/lin/busybox-1.00-pre10/_install
   # cp -r ./ /home/lin/rootfs

   # cd /home/lin/rootfs
   # mkdir dev
   # mkdir etc
   # mkdir lib
   # mkdir proc
   # mkdir sys
   # mkdir tmp

未列举完 ......

   以 root 身份执行(可通过 su 切换):
   # cd dev
   # mknod -m 660 console c 5 1
   # mknod -m 660 null c 1 3

# mknod -m 660 zero c 1 5

 

4. 库
   可拷贝开发板自带的文件系统的库,如果开发板的文件系统是映像,只需把映像挂载在某个目录下访问即可。 假设映像为 root_tmp.cramfs,如下:

   # mkdir /home/lin/cramfs
   # mount -o loop demo.cramfs /home/lin/cramfs
   # cd /home/lin/cramfs/lib
   # cp -r ./ /home/lin/rootfs/lib

 

5. 脚本
   要使 Shell 正常工作, 还要设置初始化脚本。

   (1) /etc/inittab;

# This is run first except when booting

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

# Start an "askfirst" shell on the console

#::askfirst:-/bin/bash

#::askfirst:/bin/bash

tts/0::askfirst:-/bin/sh

#ttyS1::respawn:-/bin/sh

#tty1::respawn:-/bin/sh

#::respawn:/bin/sh

# Stuff to do when restarting the init process

::restart:/sbin/init

#::once:/sbin/raja.sh

#::respawn:/sbin/iom

::once:/usr/sbin/inetd

::once:/usr/etc/rc.local

#::respawn:/bin/sh

# Stuff to do before rebooting

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r


(2)设置文件系统的挂载表 /etc/fstab

# <file system> <mount pt> <type> <options> <dump> <pass>

none /proc proc defaults 0 0

none /dev/pts devpts mode=0622 0 0

tmpfs /dev/shm tmpfs defaults 0 0

none /sys sysfs defaults 0 0

#192.168.1.13:/home/export/nfs /tmp nfs rsize=2048,wsize=8192 0 0

 

(3)设置 /etc/init.d/rcS

#!/bin/bash

/bin/mount -a

/bin/mount -t usbdevfs none /proc/bus/usb

/bin/hostname pxa270

/usr/etc/profile

ln -s /dev/tts/1 /dev/ttyS1

#echo "make /var,/tmp in /dev/shm"

#mkdir /dev/shm/tmp

#cp -a /etc/var /dev/shm

#/bin/batt_blite

grep -q 'dnmode=multi' /proc/cmdline 2>/dev/null

if [ "$?" = "0" ]; then

/bin/canna

exit 0

fi

grep -q 'dnmode=single' /proc/cmdline 2>/dev/null

if [ "$?" = "0" ]; then

/bin/canna -s

exit 0


6.生成根文件系统映像

命令:

./mkfs.jffs2 -r rootfs -o root_lb.jffs2 -e 0x40000

释:

-r : 指定要做成 image 的源资料目录 .
-o :
指定输出 image 镜像 的文件名 .
-e :
每一块要擦除的 block size ,預設是 64KB. 要注意,不同的 flash, block size 會不一樣 . YLE270是 intel TE28F128 FLASH 的块大小为 256K (即 0x00040000 .

 

你可能感兴趣的:(jffs2根文件系统制作笔记)