全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

制作YAFFS2文件系统

发布时间:2022-12-28 11:59:47
发布人:wjy

  如果开发板只有Nand Flash,那么选择最合适的文件系统为YAFFS文件系统。mini2440 只有 Nand Flash 没有 Nor Flash,因此选择的文件系统为 YAFFS2 文件系统。

  1.制作文件系统时准备的源代码

  关于内核源代码和交叉编译器,读者可以根据自己的实际情况选择具体的对应版本, yaffs2.tar.gz 源码是必需的。

制作 YAFFS2 文件系统179

  2.解压源码

  解压内核源码和交叉编译器的源码,并将 yaffs2.tar.gz 复制到内核源码的 fs 目录下进行解压。如果是第一次使用交叉编译器,那么应该在环境变量中添加交叉编译器的路径或者在/etc/profile 中添加交叉编译器路径,并重新启动计算机。文件/etc/profile 中的交叉编译 器的设置,例如:

  # Path manipulation

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

  pathmunge /sbin

  pathmunge /usr/sbin

  pathmunge /usr/local/sbin

  pathmunge /usr/local/arm/4.3.2/bin

  fi

  3.修改内核顶层Makefile

  在 Makefile 中设置目标平台为 arm,交叉编译器为 arm-linux。

  # vi Makefile

  ARCH ?= $(SUBARCH)

  CROSS_COMPILE ?=

  修改为

  ARCH ?=arm

  CROSS_COMPILE ?=arm-linux-

  4.修改机器码

  在 vivi 启动时如果机器码与设置的不一致会出现提示,在文件 arch/arm/tools/mach-types

  中进行下面的修改。

  # vi arch/arm/tools/mach-types

  s3c2440 ARCH_S3C2440 S3C2440 362

  修改为

  s3c2440 ARCH_S3C2440 S3C2440 782

  5.修改时钟频率

  修改 arch/arm/mach-s3c2440/mach-smdk2440.c 中的时钟为 12MHz,具体修改如下:

  static void __init smdk2440_map_io(void)

  {

  s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

  //s3c24xx_init_clocks(16934400);

  s3c24xx_init_clocks(12000000);//将频率设置为 12MHz

  s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

  }

  6.使内核支持YAFFS2

  解压 yaffs2.tar.gz 后进入 YAFFS2 目录,在 YAFFS2 目录下有可执行文件 patch-ker.sh,

  执行如下命令:

  # ./patch-ker.sh c /usr/local/arm/linux-2.6.29.6

  执行该命令后,就会在 fs 的 Kconfig 和 Makefile 中增加对 YAFFS2 的编译选项的支持。

  在 fs/Kconfig 会自动添加:

  # Patched by YAFFS

  source "fs/yaffs2/Kconfig"

  在 fs/Makefile 中会自动添加:

  # Patched by YAFFS

  obj-$(CONFIG_YAFFS_FS) += yaffs2/

  注意:这两部分内容也可以进行手动添加。添加的目的是在内核的文件系统选项中增加 对 YAFFS2 的支持选项。

  回到内核的一级目录下运行 make menuconfig,对内核进行配置,配置中多了对 YAFFS2 文件系统支持的选项。进入内核配置界面后,依次选择命令 File systems ---> Miscellaneous filesystems --->,进入 Miscellaneous filesystems 配置窗口,选择对 YAFFS2 文件系统的支持

制作 YAFFS2 文件系统1783

  7.使内核支持Mini2440

  在内核的 System Type-->ARM system type 选项下,选择 Samsung S3C24xx 系列。如果读者的开发板不是 mini2440,那么就应该选择对应的处理器类型。然后 在 S3C2440 Machines 中选择 Mini2440 支持选项。

制作 YAFFS2 文件系统1943

  8.编译内核映像文件

  执行 make zImage 生成内核的映像文件,如果遇到下面的错误可以执行 make distclean 进行清理,然后重新生成映像文件。

  # make distclean

  # make zImage

  9.编译Busybox

  编译 Busybox 的配置细节可以参考制作 《Ramdisk 文件系统》。这里可以将 Busybox 交叉编译安装在 _install 文件中,

制作 YAFFS2 文件系统2151

  在/usr/local 目录下新建 yaffs_root 文件夹,将 Busybox 的安装目录_install 中的文件 bin、linuxrc、sbin、usr 复制到 yaffs_root 目录下。

  # mkdir /usr/local/yaffs_root

  # cd /usr/local/busybox-1.21.1/_install

  # cp –rf bin linuxrc sbin usr /usr/local/yaffs_root

  10.为YAFFS文件系统准备lib库

  将交叉编译器目录下的库文件全部复制到 lib 库目录下,-d 表示复制的时候包括链接 文件一起复制过来。

  #cp -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/*so* ./lib

  11.制作etc目录下必要的文件

  etc 目录是文件系统中最重要的目录,系统配置的启动信息都在该目录下,下面分别给出必要的几个文件。

  (1)/etc/inittab 文件。

  ::sysinit:/etc/init.d/rcS #调用系统初始化文件

  s3c2410_serial0::askfirst:-/bin/sh #文件 drivers/serial/s3c2410.c 中指定了串口驱动名字 s3c2410_serial

  ::ctrlaltdel:/sbin/reboot #重启

  ::shutdown:/bin/umount -a -r #关机

  该文件为 init 进程的配置文件。

  (2)etc/init.d/rcS 文件。

  #!/bin/sh

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

  runlevel=S

  prevlevel=N

  umask 022

  export PATH runlevel prevlevel

  mount -a

  mkdir /dev/pts

  mount -t devpts devpts /dev/pts

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

  mdev -s

  mkdir -p /var/lock

  /bin/hostname -F /etc/sysconfig/HOSTNAME

  该文件为可执行文件,完成后还要修改其权限为可执行。该文件功能包括指定环境变量、运行级别和挂载设备等。

  (3)etc/profile 文件。

  USER="`id -un`"

  LOGNAME=$USER

  PS1='[Yaffs_LiuG]# '

  PATH=$PATH

  HOSTNAME='/bin/hostname'

  export USER LOGNAME PS1 PATH

  如果不配置 profile,移植完文件系统后,进入系统命令行头为空,效果如下:

  # ls

  bin home lost+found proc sys var

  dev lib mnt root tmp

  etc linuxrc opt sbin usr

  配置 profile 文件后,其效果如下:

  ]# ls

  bin home lost+found proc sys var

  dev lib mnt root tmp

  etc linuxrc opt sbin usr

  (4)etc/sysconfig/HOSTNAME 文件。

  Yaffs@LiuG #指定 HOSTNAME,rcS 中调用该文件

  (5)etc/fstab 文件。

  proc /proc proc defaults 0 0

  tmpfs /tmp tmpfs defaults 0 0

  sysfs /sys sysfs defaults 0 0

  tmpfs /dev tmpfs defaults 0 0

  var /dev tmpfs defaults 0 0

  该文件指明需要挂载的文件系统。

  12.制作YAFFS映像文件

  解压制作文件系统工具 mkyaffs2image.tar,解压后该工具自动安装在目录 usr/sbin/下。 使用 mkyaffs2image 将上面制作的文件系统制作成映像文件。

  # tar xvf mkyaffs2image.tar

  # mkyaffs2image yaffs_root yaffs_root.img

  本文摘自《linux系统移植(第2版)》

相关文章

黑石服务器是什么?

黑石服务器是什么?

2023-10-14
Rx和Tx是什么?

Rx和Tx是什么?

2023-10-14
重大应急管理(MME)是什么?

重大应急管理(MME)是什么?

2023-10-14
直播系统使用什么语言编写的?

直播系统使用什么语言编写的?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取