课程列表

基本问题

开源资源

好好学习天天向上

联大大纲—通信电子 ;教师介绍; 单片机课程学习经验- 学习路线图; 1.概述 -应用 -定义 -特点 -构成; 2.嵌入式处理器 —DIY CPU处理器ARM处理器Cortex-A8S5PV210讨论; 3.汇编语言 -作业 4.Bootloader -作业 5.Linux内核移植 6.嵌入式Linux程序设计 7.图形用户接口QT 8.其他框架介绍; 9.嵌入式物联网应用系统设计

建立Yaffs文件系统:在内核源码中添加yaffs2补丁

Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash.  It is widely used with Linux, RTOSs, or no OS at all, in consumer devices. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.

网址:http://www.yaffs.net

一、在内核源码中添加yaffs2补丁

 

Linux默认不支持Yaffs2文件系统,因此需要为内核添加yaffs2文件补丁,具体步骤如下。

1.获取yaffs2 源代码

yaffs2源码:\书附光盘\9 系统文件\yaffs2.tar.bz2

yaffs2官网:http://www.yaffs.net

将yaffs2.tar.bz2复制到/JY-CBT/目录下。在终端窗口中进入到/JY-CBT/目录下,执行解压命令完成yaffs2文件源码文件的解压过程,在/JY-CBT/目录下建有yaffs2文件夹,内含源码文件。随后书中将/JY-CBT/yaffs2/目录称为文件系统源码根目录。

[root@/jy-cbt]# tar -jxvf yaffs2.tar.bz2                               

[root@/jy-cbt]# ls                                                     

Linux-2.6.34.14  Linux-2.6.35.7  yaffs2                                

2.获得操作权限

进入文件系统源码根目录。为了后续操作需要获取patch-ker.sh文件的读、写和运行三项权限。执行chmod命令,获取文件权限。

[root@/jy-cbt]# cd yaffs2                                              

[root@localhost yaffs2]# chmod 777 patch-ker.sh            

[root@localhost yaffs2]# ls -l patch-ker.sh                            

-rwxrwxrwx. 1 root root 3013 Jan 21  2009 patch-ker.sh

 

3.添加补丁

当前路径下运行patch-ker.sh文件。

[root@localhost yaffs2]# ./patch-ker.sh c /jy-cbt/linux-2.6.35.7/   

Updating /jy-cbt/ linux-2.6.35.7/fs/Kconfig              

Updating /jy-cbt/ linux-2.6.35.7/fs/Makefile              

通过运行patch-ker.sh,附加参数“c”且指定内核根目录后后,会自动完成以下三件事情,实现在内核文件中添加yaffs2补丁过程。

(1/3)更新linux-2.6.35.7/fs/Kconfig配置文件文件。

在Kconfig文件中添加以下内容:

menuconfig MISC_FILESYSTEMS

if MISC_FILESYSTEMS

# Patched by YAFFS

source "fs/yaffs2/Kconfig"

在/linux-2.6.35.7/fs/Kconfig配置文件中新增加一行,使得Kconfig树包含子目录yaffs2下的Kconfig文件。

在fs/yaffs2/Kconfig配置文件中定义了yaffs2文件系统“YAFFS2 file system support” 选项。该选项在配置菜单中的位置由当前Kconfig位置决定。依据Kconfig的当前位置路径,可以在配置选项主菜单中的对应位置见到所添加的选项内容。

File systems ---> [*] Miscellaneous filesystems---> <*>YAFFS2 file system support

(2/3)更新/linux-2.6.35.7/fs/Makefile文件

在Makefile文件中添加以下内容:

:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/ 

功能释义:

Makefile递归遍历到yaffs2目录。

(3/3)在/linux-2.6.35.7/fs/目录下创建yaffs2目录

将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie。

将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下。

将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下。

此时进入/linux-2.6.35.7/fs目录,可以看到已经多了一个yaffs2目录。

4.查看内核配置菜单

在内核根目录下执行make menuconfig

[root@localhost Linux-2.6.34.14]# make menuconfig                      

可以看到在“File systems”下新添加的YAFFS2文件系统配置选项。

File systems ---> [*] Miscellaneous filesystems ---> < > YAFFS2 file system support

 

 

二、配置内核支持yaffs2文件系统

在编译系统内核之前,需要借助核配置菜单选取合适的文件系统。

1.在宿主机Linux环境进入内核配置菜单

[root@localhost /]# cd ..                                              

[root@localhost /]# cd jy-cbt/Linux-2.6.34.14/                          

[root@localhost Linux-2.6.34.14]#                                      

[root@localhost Linux-2.6.34.14]# make menuconfig                      

2.有效YAFFS2 文件系统选项

进入File systems -à [*] Miscellaneous filesystems-à< > YAFFS2 file system support

通过空格键选中“<*> YAFFS2 file system support”,配置内核来支持Yaffs2文件系统

3.保存配置

完成修改后,保存配置,退出。此时完成内核中添加yaffs2 文件系统支持。

4.编译内核

2.6以后的Linux版本内核中只需使用make 命令,即可完成内核编译过程。最终可在内核源码根目录生成支持yaffs2文件系统的内核镜像文件uImage。

 

三、定制yaffs2格式文件系统(rootfs.img)

1.获取源代码

将busybox-1.17.2.tgz复制到/JY-CBT/目录下。在终端窗口中进入到/JY-CBT/目录下,执行解压命令完成busybox文件源码文件的解压过程,在/JY-CBT/目录下建有busybox-1.17.2文件夹,内含源码文件。

[root@/jy-cbt]# tar xzvf busybox-1.17.2.tgz

[root@/jy-cbt]# ls                                                     

busybox-1.17.2  Linux-2.6.34.14  netpbm-10.35.81                       

fblogo-0.5.2    Linux-2.6.35.7   yaffs2                                

2.修改编译选项

进入busybox-1.17.2目录修改root@/jy-cbt/busybox-1.17.2/Makefile文件中的ARCH ?和CROSS_COMPILE ?=  两项宏定义后退出保存。

Makefile文件修改内容:

164 #CROSS_COMPILE ?  =        

164 CROSS_COMPILE ?= arm-Linux-         

190 #ARCH ?= $(SUBARCH)                      

190 ARCH ?= arm

3.定制文件系统

利用bosybox工具可以制作文件系统所需的工具及命令。如可以借助busybox生成which 命令,并将其复制到文件系统根目录的usr/bin目录下,这样根文件系统就可以支持which命令。

使用bosybox过程如下

(1)运行make menuconifg。

 [root@/jy-cbt/busybox-1.17.2]# make menuconfig

(2)定制。

添加以下选项:Busybox Settings --->Busybox Library Tuning --->[*] Fancy shell prompts

去除以下选项:Miscellaneous Utilities ---> [ ] inotifyd(NEW)

(3)退出保存设置。

(4)编译busybox。

[root@/jy-cbt/busybox-1.17.2]# make                   

(5)安装busybox。

[root@/jy-cbt/busybox-1.17.2]# make installs              

最终会在当前目录下生成默认的安装目录_install。里面存放着制作好的工具集和命令。

[root@/jy-cbt/busybox-1.17.2]# ls _install/              

bin  Linux  rc  sbin  usr                                              

[root@localhost busybox-1.17.2]#                                       

可以看到_install 目录下生成了根文件系统常用的命令及工具,接下来可以根据需要将_install 目录下生成的命令复制到文件系统根目录下。

(6)制作YAFFS2 格式的根文件系统镜像

将mkyaffs2image工具软件复制到在/jy-cbt/目录下,下利用mkyaffs2image工具将根文件系统目录yaffs2 打包制作成YAFFS2 格式的根文件系统镜像,得到rootfs.img文件。

[root@localhost jy-cbt]# ./mkyaffs2image yaffs2/ rootfs.img

 

、下载Linux 根文件系统

1.准备系统文件

拷贝生成的根文件系统rootfs.img 内核至宿主机tftpboot下载目录。

[root@localhost rootfs]# cp rootfs.img /tftpboot/

确保宿主机Linux系统使用网卡为桥接方式或物理网卡,这样才能和外部ARM设备进行网络通讯和文件传输。

2.进入U-Boot下载模式

启动目标板,打开U-Boot控制台进入下载模式。

3.设置目标板网络环境

在U-Boot控制台,使用命令配置宿主机和目标机的网络IP。

[CBT-210]# setenv serverip 192.168.1.7                                 

[CBT-210]# setenv ipaddr 192.168.1.199                                 

[CBT-210]# saveenv                                                     

Saving Environment to NAND...                                           

Erasing Nand...                                                        

Erasing at 0x40000 -- 100% complete.                                   

Writing to Nand... done                                                

[CBT-210]#                                                             

宿主机(Linux环境)IP: 192.168.1.7。作为TFTP服务器端。

目标机(U-Boot环境)IP:192.168.1.199。作为TFTP客户端,需要设置成与宿主机同一个网段的IP即可。

4.下载根文件系统镜像文件至内存

[CBT-210]# tftp 0x21000000 rootfs.img                     

上述命令将rootfs.img文件从宿主机端下载至ARM系统内存SDRAM的0x21000000地址处。

5.烧写文件系统到NAND FLASH

[CBT-210]# nand erase 0xe00000 0x10000000                                   

[CBT-210]# nand write.yaffs 0x21000000 0xe00000 0x********                    

向nandflash烧写YAFFS2格式的文件,其中“0x********”参数由tftp下载的YAFFS2格式文件实际大小指定,用户可以根据下载根文件系统镜像文件至内存后提示大小输入该参数即可。上述命令将文件系统固化到系统的NAND FLASH 设备中。