Uboot下备份恢复操作系统方法

来源:互联网 发布:手游大话西游仙玉淘宝 编辑:程序博客网 时间:2024/05/17 22:57

第一次发博客,想把总结的一个Uboot下备份恢复操作系统的方法分享一下。

 

 下面开发环境是TI 的dm365,根据数据手册利用IO功能实现系统上电在uboot读取内核的时候按下IO键检测恢复系统

 

首先,由于需要使用uboot下的命令,Uboot下修改cmd_mem.c

增加一个命令

U_BOOT_CMD(

              cmp,       4,    1,    do_mem_mycmp,

              "memory compare",

              "[.b, .w, .l] addr1 value count"

);

 //命令增加的函数,功能主要是对比一个地址和一个值

int do_mem_mycmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

{

       ulong      addr1,value, count;

       int     rcode = 0;

 

       if (argc != 4)

              return cmd_usage(cmdtp);

 

       addr1 = simple_strtoul(argv[1], NULL, 16);

       addr1 += base_address;

 

       addr2 = simple_strtoul(argv[2], NULL, 16);

       value += base_address;

 

       count = simple_strtoul(argv[3], NULL, 16);

 

       if(*(ulong*)addr1 == value )

      

              Return 1

else

       Return 0

      

上面的修改就是在uboot命令下增加了一个命令。使用方法如下:

       Mycmp addr valuehexcount

       Examplemycmp 0x01c67098 0x00000000 1(比较地址0x0c167098地址的值和0x00000000是否相等,相等则返回1,否则返回0

 

配置并获取IO状态:

此外的操作就是根据不同板级的复用引脚之类的配置出一个按键的IO口,如GZH-801C101GPIO作为输入。所以我需要在uboot读取101GPIO的高低电平。

GPIO 101arm subsystem reference文档里面可以看到,属于pinmux0的复用脚,将0x01c40000地址的4-5位配置为01,则复用脚工作在IO状态,接下来要配置IO的输入和输出方向,在数据手册TMS320DM36x DMSoC General-Purpose Input_Output User's Guide.pdf里面可以了解到IO方向地址0表示输出,1表示输入。101IO属于gpiobank6配置地址为0x01c67088,将此地址配置第5位为1表示输入,接下来就可以读取IO的值了,在ubootmd命令可以读取物理地址值,这个物理地址指的是cpu的。101 IOio电平表现地址在0x01c67098

       正常状态 md 0x01c67098 1读取的值是 0x00000020高电平

       如果键被按下,那么值将是0x00000000

这样我们就可以根据uboot检测上电按键来选择恢复flash的文件系统了。

 

补充一点,上面配置复用脚和设置输入输出可以在uboot源码里面做,也可以直接在命令处理。

 

命令行:

setenv bootcmd 'nboot 0x80700000 0 0x400000;

mw 0x01c40000 0x00fd0010;//命令行配置复用脚为IO

if mycmp 0x01c67098 0x00000000 1;//读取状态为按下状态

then       nand erase 0x800000 0x2000000 ;//擦除烧写操作

nand read.jffs2 0x82000000 0x4800000 0xda0000;

nand write.jffs2 0x82000000 0x800000 0xda0000;

fi;//结束if判断

bootm'

 

对于这个uboot的脚本应用,网上基本找不到资料,我是根据TIuboot里使用脚本总结出来,刚好利用做恢复,否则uboot恢复无法进行。

结构如下:

       If xxx

              Then 满足 xxx

       Fi

 

       可以多重嵌套

       If xxx

              Then if xxx

                     Then if xxx

                     Fi

              Fi

       Fi       //利用这种结构我们可以在上电时同时按下组合键来确定恢复系统,可以使用sleep,至于更多的命令我没有验证。

 

根据上面的做法,只有获取到IO并拉出来做按键,便可以做系统备份处理。任何平台都可以实现。

 

原创粉丝点击