u-boot添加自己的命令—UBI镜像还原工具开发

开发环境:

软件平台:

Linux系统平台:Ubuntu-12.04
u-boot版本:u-boot-2012.10
内核版本:Linux-3.6.5

硬件平台:

博通5830X-CPU平台开发板

软件设计概述:

UBI 镜像还原工具的设计主要是借助了 u-boot (或者 Linux 内核)中 UBI 文件系统模块的功能,和这个模块相关的目录主要有 u-boot/driver/mtd/ubi u-boot/fs/ubifs common/cmd_ubi.c common/cmd_ubifs.c

u-boot/driver/mtd/ubi实现UBI驱动层的功能,用于读取存储在Flash上的ubi镜像的物理块数据,而common/cmd_ubi.c封装了u-boot读取ubi物理块数据的操作过程,采用简短命令的形式实现对Flash的操作(比如ubi writeubi readubi part等命令)。

u-boot/fs/ubifs实现UBI文件系统层的功能,用于建立驱动层的物理擦除块到文件系统层的逻辑擦除块的映射,并在内存中建立UBI文件系统整个数据结构。同样,common/cmd_ubifs.c封装了u-boot挂载UBI文件系统镜像,在内存中建立ubi文件系统整个数据结构的过程,采用简短命令的形式实现在内存中建立ubi文件系统的操作。

本次项目的软件设计就是结合u-bootubi模块的功能,封装ubi命令,实现对ubi镜像的还原操作。

软件设计流程图:


图1

u-boot添加支持UBI文件系统介绍

这次项目开发当前思路是参考u-boot源码下u-boot/fs/ubifs目录中关于加载UBI文件系统部分的实现来设计的。在u-boot-2010版本之后基本都支持了ubi文件系统,博通5830X开发板配套的u-boot源码没有添加对ubi文件系统的支持,需要手动添加。具体操作过程参考以下博客:

http://daimajishu.iteye.com/blog/1087431

http://blog.csdn.net/android83/article/details/6012420

具体操作过程根据自己的u-boot参考以上博客,可能其中因为u-boot版本不同导致有些修改路径不同,不过基本都差不多。

u-bootubiubifs命令的使用介绍

U-boot当中有关于UBI文件系统操作的命令主要由ubi readubi writeubi partubi createubifsmount等命令。主要用于读写ubi文件系统、挂载ubi文件系统等,具体的命令操作请参考以下博客:

http://blog.csdn.net/android83/article/details/6012126

http://www.zhixing123.cn/ubuntu/40974.html

OK,这次项目开发最初思路就是根据u-boot中ubi文件系统中这几个命令的实现为参考,实现UBI镜像还原工具的开发。

UBI镜像还原工具—软件具体设计介绍

为了使用工具的用户方便操作而进行的,其实就是封装u-boot下的ubi命令,在控制台输出一个友好的界面,简化对ubi镜像还原的操作过程。

封装ubi命令的设计其实就是在u-boot当中添加自己的命令,u-boot添加自己的命令主要有以下几个步骤:

1.在配置文件中添加对应的宏;

2.在common目录下创建对应的cmd_xxx.c文件,实现自己的命令;

3.修改common/Makefile

添加COBJS-$(CONFIG_CMD_XXX) += cmd_xxx.o

OK,本次项目对u-boot中的ubi命令封装的具体设计步骤如下:

控制台输出界面设计如图2所示,主要功能有:

   [l] 加载mtd分区信息,用于查看设备的分区,获取ubi文件系统的挂

      载分区信息;

   [r] 下载以“rootfs.bin”命令的ubi文件系统镜像;

   [u] 下载以“ubifs.bin”命令的ubi文件系统镜像,ru选择主要是根

      据平时的命令习惯设计的两种下载方式而已;

   [m] 挂载ubi文件系统镜像;

   [p]  跳转到ubi文件系统操作界面,实现对ubi文件系统数据的读写操

       作;

   [q] 退出ubi操作界面,回到u-boot模式;

u-boot添加自己的命令—UBI镜像还原工具开发_第1张图片
图2

上述选项都是一些u-boot命令和u-bootubi模块的命令封装而成的,主要有ubi镜像还原工具界面设计、下载ubi文件系统镜像、加载mtd分区信息、挂载ubi文件系统、ubi文件系统读写操作设计。

添加U_BOOT_CMD命令,实现ubi文件系统镜像还原操作的调用命令设计,这里我设计的U_BOOT_CMD命令名称为“ubifsopt”,当你在u-boot模式下输入“ubifsopt”命令时,便可以进入UBI镜像还原工具控制台界面。

U_BOOT_CMD命令介绍:

U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)

各个参数的意义如下:

name:命令名,非字符串,但在U_BOOT_CMD中用“#”符号转化为字符

maxargs:命令的最大参数个数;

rep:是否自动重复(按Enter键是否会重复执行);

cmd:该命令对应的响应函数;

usage:简短的使用说明(字符串);

help:较详细的使用说明(字符串);

在内存中保存命令的help字段会占用一定的内存,通过配置U-Boot可以选择是否保存help字段。

若在include/configs/xx.h中定义了CONFIG_SYS_LONGHELP宏,则在U-Boot中使用help命令查看某个命令的帮助信息时将显示usagehelp字段的内容,否则就只显示usage字段的内容。

U_BOOT_CMD宏在include/command.h中定义:

1 #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
2 cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}

##”与“#”都是预编译操作符,“##”有字符串连接的功能,“#”表示后面紧接着的是一个字符串。

ubi镜像还原操作过程演示

1.输入“ubifsopt”进入UBI镜像还原工具界面:

u-boot> ubifsopt


图3

2.输入字母“l”,获取Flash分区信息:

u-boot添加自己的命令—UBI镜像还原工具开发_第2张图片

3.输入ru下载ubi镜像到ubi分区,这个选项是可选操作,如果你的Flash分区上已经下载好ubi镜像了,那么可以不用执行;

4.输入“m”挂载ubi镜像文件

u-boot添加自己的命令—UBI镜像还原工具开发_第3张图片

5.输入“p”进入ubi文件系统数据读写操作界面

u-boot添加自己的命令—UBI镜像还原工具开发_第4张图片


你可能感兴趣的:(内核,文件系统,u-boot,博通,nandflash驱动)