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 value(hex)count
Example:mycmp 0x01c67098 0x00000000 1(比较地址0x0c167098地址的值和0x00000000是否相等,相等则返回1,否则返回0)
配置并获取IO状态:
此外的操作就是根据不同板级的复用引脚之类的配置出一个按键的IO口,如GZH-801C是101号GPIO作为输入。所以我需要在uboot读取101号GPIO的高低电平。
GPIO 101在arm subsystem reference文档里面可以看到,属于pinmux0的复用脚,将0x01c40000地址的4-5位配置为01,则复用脚工作在IO状态,接下来要配置IO的输入和输出方向,在数据手册TMS320DM36x DMSoC General-Purpose Input_Output User's Guide.pdf里面可以了解到IO方向地址0表示输出,1表示输入。101号IO属于gpiobank6配置地址为0x01c67088,将此地址配置第5位为1表示输入,接下来就可以读取IO的值了,在uboot下md命令可以读取物理地址值,这个物理地址指的是cpu的。101 IO的io电平表现地址在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的脚本应用,网上基本找不到资料,我是根据TI在uboot里使用脚本总结出来,刚好利用做恢复,否则uboot恢复无法进行。
结构如下:
If xxx;
Then 满足 xxx;
Fi;
可以多重嵌套
If xxx;
Then if xxx;
Then if xxx;
Fi;
Fi;
Fi; //利用这种结构我们可以在上电时同时按下组合键来确定恢复系统,可以使用sleep,至于更多的命令我没有验证。
根据上面的做法,只有获取到IO并拉出来做按键,便可以做系统备份处理。任何平台都可以实现。
- Uboot下备份恢复操作系统方法
- db2 不同操作系统下备份与恢复
- 在Linux操作系统下备份恢复技术的应用
- Linux操作系统下MBR分区表的备份与恢复
- hpux 操作系统 磁带备份与恢复
- Linux下mysql备份 恢复
- Linux下mysql备份 恢复
- Linux下mysql备份 恢复
- Linux下mysql备份 恢复
- Linux下mysql备份 恢复
- Linux下mysql备份 恢复
- Linux下mysql备份 恢复
- Linux下mysql备份 恢复
- MSSQL数据库备份恢复方法
- ezjail服务器备份恢复方法
- mysqldump常用备份恢复方法
- windows 2003环境下MySQL备份与恢复 的简单方法
- oracle数据库备份恢复篇-在rman工具下记录日志的方法
- 中国内地开源镜像站汇总
- C# 获取文件信息并导出Excel,Xml报表
- poll()函数(转)
- IDispatch接口原理与应用
- 设计模式之单例模式
- Uboot下备份恢复操作系统方法
- Gallery3D 报UnsupportedOperationException解决方案
- Oracle
- 优秀设计师应当知道的20大UI设计原则
- Activity全屏的两种方法
- 网站推广
- 成员函数的隐藏
- c# ToString()方法改变DateTime的样式
- linux打补丁和文件创建用户