执行命令出现 Bad magictable1.8破解版 怎么破

uboot之bootm命令分析_Linux编程_Linux公社-Linux系统门户网站
你好,游客
uboot之bootm命令分析
来源:Linux社区&
作者:kehui123
bootm要做的事情:
1. 读取头部,把内核拷贝到合适的地方
2. 把参数给内核准备好,并告诉内核参数的首地址3. 引导内核
启动内核:do_bootm_linux: 1. 设置参数,跳到入口地址theKernel = (void (*)(int, int, uint))ntohl(hdr-&ih_ep);
参数的传递:在某个地址按某种格式,存放好数据
uboot引导linux内核之do_bootm解析:do_bootm int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){ulong data, len,ulong& *len_uint unc_len = CFG_BOOTM_LEN;int i,char *name, *s;int (*appl)(int, char *[]);image_header_t *hdr = &
s = getenv ("verify");& //为是否对镜像头做校验做准备,读取uboot的环境变量verify,如果环境变量verify等于’n’,则局部变量verify赋值成为0;如果环境变量verify为空(即没有定义环境变量verify)或者环境变量verify不等于’n’,则局部变量verify赋值成为1。verify = (s && (*s == 'n')) ? 0 : 1;
if (argc & 2) { //获取镜像存放的内存首地址,如果参数个数小于2(即只是输入了bootm),//使用缺省加载地址CFG_LOAD_ADDR;否则使用第二个参数作为加载地址。addr = load_} else {addr = simple_strtoul(argv[1], NULL, 16);}
SHOW_BOOT_PROGRESS (1);printf ("## Booting image at %08lx ...\n", addr);
/* Copy header so we can blank CRC field for re-calculation */#ifdef CONFIG_HAS_DATAFLASHif (addr_dataflash(addr)){read_dataflash(addr, sizeof(image_header_t), (char *)&header);} else#endifmemmove (&header, (char *)addr, sizeof(image_header_t));//从镜像内存首地址读取镜像头部,为下面的分析校验做准备
if (ntohl(hdr-&ih_magic) != IH_MAGIC) { //判断文件头中的幻数是否为IH_MAGIC,所以如果不是u-boot镜像格式,会输出提示信息”Bad Magic Number”#ifdef __I386__ /* correct image format not implemented yet - fake it */if (fake_header(hdr, (void*)addr, -1) != NULL) {/* to compensate for the addition below */addr -= sizeof(image_header_t);/* turnof verify,* fake_header() does not fake the data crc*/verify = 0;} else#endif /* __I386__ */&& {puts ("Bad Magic Number\n");SHOW_BOOT_PROGRESS (-1);return 1;&& }}SHOW_BOOT_PROGRESS (2);
data = (ulong)&len& = sizeof(image_header_t);
checksum = ntohl(hdr-&ih_hcrc); //对镜像头做crc校验hdr-&ih_hcrc = 0;
if (crc32 (0, (uchar *)data, len) != checksum) {puts ("Bad Header Checksum\n");SHOW_BOOT_PROGRESS (-2);return 1;}SHOW_BOOT_PROGRESS (3);
#ifdef CONFIG_HAS_DATAFLASHif (addr_dataflash(addr)){len& = ntohl(hdr-&ih_size) + sizeof(image_header_t);read_dataflash(addr, len, (char *)CFG_LOAD_ADDR);addr = CFG_LOAD_ADDR;}#endif
/* for multi-file images we need the data part, too */print_image_hdr ((image_header_t *)addr);
data = addr + sizeof(image_header_t);len& = ntohl(hdr-&ih_size);
if (verify) {&& //对镜像的数据部分做crc校验puts ("&& Verifying Checksum ... ");if (crc32 (0, (uchar *)data, len) != ntohl(hdr-&ih_dcrc)) {printf ("Bad Data CRC\n");SHOW_BOOT_PROGRESS (-3);return 1;}puts ("OK\n");}SHOW_BOOT_PROGRESS (4);
len_ptr = (ulong *)
#if defined(__PPC__)&&&&&&&&& //校验cpu类型是否正确if (hdr-&ih_arch != IH_CPU_PPC)#elif defined(__ARM__)if (hdr-&ih_arch != IH_CPU_ARM)#elif defined(__I386__)if (hdr-&ih_arch != IH_CPU_I386)#elif defined(__mips__)if (hdr-&ih_arch != IH_CPU_MIPS)#elif defined(__nios__)if (hdr-&ih_arch != IH_CPU_NIOS)#elif defined(__M68K__)if (hdr-&ih_arch != IH_CPU_M68K)#elif defined(__microblaze__)if (hdr-&ih_arch != IH_CPU_MICROBLAZE)#elif defined(__nios2__)if (hdr-&ih_arch != IH_CPU_NIOS2)#elif defined(__blackfin__)if (hdr-&ih_arch != IH_CPU_BLACKFIN)#elif defined(__avr32__)if (hdr-&ih_arch != IH_CPU_AVR32)#else# error Unknown CPU type#endif{printf ("Unsupported Architecture 0x%x\n", hdr-&ih_arch);SHOW_BOOT_PROGRESS (-4);return 1;}SHOW_BOOT_PROGRESS (5);
switch (hdr-&ih_type) {case IH_TYPE_STANDALONE:name = "Standalone Application";/* A second argument overwrites the load address */if (argc & 2) {hdr-&ih_load = htonl(simple_strtoul(argv[2], NULL, 16));}case IH_TYPE_KERNEL:name = "Kernel Image";case IH_TYPE_MULTI:name = "Multi-File Image";len& = ntohl(len_ptr[0]);/* OS kernel is always the first image */data += 8; /* kernel_len + terminator */for (i=1; len_ptr[i]; ++i)data += 4;default: printf ("Wrong Image Type for %s command\n", cmdtp-&name);SHOW_BOOT_PROGRESS (-5);return 1;}SHOW_BOOT_PROGRESS (6);
/** We have reached the point of no return: we are going to* overwrite all exception vector code, so we cannot easily* recover from any failures any more...*/
iflag = disable_interrupts();
#ifdef CONFIG_AMIGAONEG3SE /** We've possible left the caches enabled during* bios emulation, so turn them off again*/icache_disable();& invalidate_l1_instruction_cache();flush_data_cache();dcache_disable();#endif
switch (hdr-&ih_comp) { //根据镜像的压缩类型把内核镜像解压到指定的地址,一般是mkimage时-a指定的那个地址,-a指定的那个地址也就是存储在镜像头里面的hdr-&ih_load变量中,什么时候指定的呢,其实就是在执行mkimage指令的时候,-a输入的时候,赋给的数值case IH_COMP_NONE:if(ntohl(hdr-&ih_load) == addr) { //如果image header中指示的加载地址和bootm命令中参数2指定的地址相同,则表示不需要copy,可以就地执行。printf ("&& XIP %s ... ", name);} else {#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)size_t l =void *to = (void *)ntohl(hdr-&ih_load);void *from = (void *)
printf ("&& Loading %s ... ", name);
while (l & 0) {size_t tail = (l & CHUNKSZ) ? CHUNKSZ :WATCHDOG_RESET();memmove (to, from, tail);to +=from +=l -=}#else /* !(CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG) */如果image header中指示的加载地址和bootm命令中参数2指定的地址不相同,则表示要从image header中指示的加载地址处把image data copy到bootm命令中参数2指定的地址处,然后再执行。
相关资讯 & & &
& (11/05/:30)
& (03/29/:44)
& (01月28日)
& (09/25/:27)
& (12/27/:47)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款13839人阅读
【Android】(61)
使用dx的各种悲剧错误,一直一直搞啊搞,搞了三天之后才把这么个小错误搞定
做程序员不易浮躁啊,还有就是要真的是要锲而不舍啊!!!!!!!
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: abc.class: file not found
at com.android.dx.util.FileUtils.readFile(FileUtils.java:55)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.j
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java
at com.mand.dexer.Main.processOne(Main.java:422)
at com.mand.dexer.Main.processAllFiles(Main.java:333)
at com.mand.dexer.Main.run(Main.java:209)
at com.mand.dexer.Main.main(Main.java:174)
at com.mand.Main.main(Main.java:91)
1 aborting
当你出现这个运行时错误的话,那就是你需要编译的文件需要和你安卓的platform-tool这个文件夹中的内容放在一起
你要做的就是把你的文件放在和dexdump.exe文件和dx.bat放在同一个目录下
这个样子就可以编译通过成功生成dex文件了
trouble processing:
bad class file magic (cafebabe) or version ()
...while parsing Hello.class
...while processing Hello.class
no classfiles specified
出现这个错误的原因是因为jdk的版本不对,我之前用的是JDK1.7但是不知道为什么他编译之后生成的JDK的版本会低于jdk1.6真是让我百思不得其解?
也不知道这个代码是怎么写的
之后我上网查了一下,我把JDK1.7换成了JDK1.6,可是还是不行,出现了相同的提示,结果展示如下
这个时候解决的办法有一个:
强制转换成1.6版本的class
使用的到的命令就是javac -source 1.6 -target 1.6&&****.java(****代表了你的java文件名称)
具体步骤演示如下:
1.编写一个java文件
2.使用javac命令:javac -source 1.6 -target 1.6 ******.java& 注意你编写的必须是在你的android的platform-tools文件目录下
3.使用dx命令&& dx& --dex --output =*****.dex& *****.class
dexdump.exe& -d *****.dex
这个时候我们来看一下结果
D:\Android\android-sdk\platform-tools&dx --dex --output=abc.dex abc.class
D:\Android\android-sdk\platform-tools&dexdump.exe -d abc.dex
Processing 'abc.dex'...
Opened 'abc.dex', DEX version '035'
Class descriptor
Access flags
: 0x0001 (PUBLIC)
Superclass
: 'Ljava/lang/O'
Interfaces
Static fields
Instance fields
Direct methods
: '&init&'
: 0x10001 (PUBLIC CONSTRUCTOR)
insns size
: 4 16-bit code units
|[000160] abc.&init&:()V
|0000: invoke-direct {v0}, Ljava/
lang/O.&init&:()V // method@0005
|0003: return-void
0x0000 line=2
0x0000 - 0x0004 reg=0 this L
: '([Ljava/lang/S)V'
: 0x0009 (PUBLIC STATIC)
insns size
: 30 16-bit code units
|[000178] abc.main:([Ljava/lang/S
|0000: const/4 v0, #int 5 // #5
00018a: 1271
|0001: const/4 v1, #int 7 // #7
|0002: new-array v1, v1, [I // ty
|0004: fill-array-data v1, 000000
|0007: invoke-static {v0, v1}, La
.test:(I[I)V // method@0002
00019c: 0e00
|000a: return-void
00019e: 0000
|000b: nop // spacer
03 00 00 ... |000c: array-data (18 units)
0x0000 line=18
0x000a line=19
0x000b line=18
: '(I[I)V'
: 0x0089 (PUBLIC STATIC VARARGS)
insns size
: 20 16-bit code units
|[0001c4] abc.test:(I[I)V
|0000: array-length v1, v5
|0001: const/4 v0, #int 0 // #0
|0002: if-ge v0, v1, 000e // +000
|0004: aget v2, v5, v0
|0006: sget-object v3, Ljava/lang
/S.out:Ljava/io/PrintS // field@0000
|0008: invoke-virtual {v3, v2}, L
java/io/PrintS.print:(I)V // method@0003
0001ea: d800 0001
|000b: add-int/lit8 v0, v0, #int
0001ee: 28f5
|000d: goto 0002 // -000b
|000e: sget-object v0, Ljava/lang
/S.out:Ljava/io/PrintS // field@0000
|0010: invoke-virtual {v0, v4}, L
java/io/PrintS.println:(I)V // method@0004
0001fa: 0e00
|0013: return-void
0x0000 line=10
0x0006 line=12
0x000b line=10
0x000e line=14
0x0013 line=15
Virtual methods
source_file_idx
: 12 (abc.java)
如果你有任何的问题,可以给我留言,我会及时回复!^^
之前走了好多弯路希望能帮上大家!^^
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:434301次
积分:7192
积分:7192
排名:第3261名
原创:210篇
转载:67篇
译文:12篇
评论:541条
就像恐龙有植食和肉食性的区别,我深刻的认识到原来人类不是杂事杂食性动物,真有人就不吃肉,好吧,那我就承认自己是属于暴龙级别的那一种。严重的嗜肉动物,总要喊着减肥但是体重却一直飙升的那一款!T^T虽然不愿意喊但是还是要说,我要瘦!!!!!我是被Eric Bodden抛过媚眼的女人,我就问你们还有谁?哈哈哈哈哈哈~
(3)(2)(3)(1)(10)(5)(6)(6)(6)(5)(15)(19)(18)(12)(10)(14)(2)(7)(6)(1)(5)(1)(1)(5)(8)(2)(1)(2)(1)(1)(1)(16)(13)(6)(5)(3)(4)(3)(1)(13)(14)(8)(21)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
论坛徽章:7
1:执行命令:
resize2fs /dev/G1/lv01
2:在逻辑卷上面建立文件系统的时候出现错误提示:
resize2fs 1.39 (29-May-2006)
resize2fs: Bad magic number in super-block while trying to open /dev/G1/lv01 Could't find valid filesystem superblock.
*********以上为错误提示**********
4:说明:(/dev/sdb5是物理卷) , G1是卷组,lv01是逻辑卷。
5:寻求解决?
[ 本帖最后由 www_xylove 于
13:10 编辑 ]
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
论坛徽章:1
提示: 作者被禁止或删除 内容自动屏蔽
论坛徽章:7
回复 #2 cst05001 的帖子
没有做过什么,就是临时开了一台虚拟机做做LVM的练习。我使用fsck修复下磁盘。
论坛徽章:7
回复 #2 cst05001 的帖子
[root@server /]# fsck /dev/sdb5
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
fsck.ext2: Device or resource busy while trying to open /dev/sdb5
Filesystem mounted or opened exclusively by another program?
我没有挂载也没有打开另外的程序。
怎么回事?
大富大贵, 积分 12763, 距离下一级还需 7237 积分
论坛徽章:0
原帖由 www_xylove 于
09:23 发表
[root@server /]# fsck /dev/sdb5
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
fsck.ext2: Device or resource busy while trying to open /dev/sdb5
Filesystem mounted or opened exclusively by ...
那是你认为没有对文件系统访问,你通过lsof确认一下。
要不然就备份之后重启一次。
小富即安, 积分 4845, 距离下一级还需 155 积分
论坛徽章:0
resize2fs /dev/G1/lv01
你扩容之后执行的这条指令?
在逻辑卷上面建立文件系统,你怎么建立的?lvcreate?还是其他的?
论坛徽章:7
回复 #6 marsaber 的帖子
我使用resize2fs命令来建立文件系统。就出现了上面的错误提示。
lvcreate命令应该是来建立逻辑卷的吧。
说明一下:
我的整个过程是这样的:
1:pvcreate /dev/sdb5& && && && && && && && && && && & #建立物理卷
2:vgcreate&&G1 /dev/sdb5& && && && && && && && && &&&#建立卷组
3:lvcreate -L 100M -n lv01 G1& && && && && && && & #建立逻辑卷
4:resize2fs&&/dev/G1/lv01& && && && && && && && && &&&#建立文件系统
到4就报错了。不能建立文件系统。
&&什么原因?
[ 本帖最后由 www_xylove 于
23:31 编辑 ]
大富大贵, 积分 12763, 距离下一级还需 7237 积分
论坛徽章:0
重启之后再来一次。
论坛徽章:0
1:pvcreate /dev/sdb5& && && && && && && && && && && & #建立物理卷
2:vgcreate&&G1 /dev/sdb5& && && && && && && && && &&&#建立卷組
3:lvcreate -L 100M -n lv01 G1& && && && && && && & #建立邏輯卷
4:resize2fs&&/dev/G1/lv01& && && && && && && && && &&&#建立文件系統
lv01 該 lv 連基本的 mke2fs 都沒有使用,該 lv 沒有格式化過如何 resize2fs 呢?
论坛徽章:1
提示: 作者被禁止或删除 内容自动屏蔽您还没有登录,快捷通道只有在登录后才能使用。 还没有帐号? 赶紧
磁盘扩容后重启实例,使用e2fsck命令时提示:Bad magic number in super-block
在线时间32小时
问题描述:& & &磁盘扩容后重启实例,然后按照阿里云官网教程使用fdisk重新分区,最后使用e2fsck和resize2fs来完成文件系统层面的扩容,但这步出现了错误。告知&Bad magic number in super-block&。& & &解决过程:& & &这种情况说明工具没有找到正确的super block。通过fdisk -l查看发现多块磁盘的起始分区位置并不一样。& &'995')this.width='995';">& & & &如果说通过fdisk重新分区后将起始分区位置改变了,那么确实就无法找到正确的super block了,所以难怪工具如此提示。&使用分区工具parted检验一下。& &1、使用parted工具读取磁盘分区表信息& &#parted /dev/xvdb&'995')this.width='995';">& & & &2、删除该分区表&引用 &(parted) rm 1&&&3、恢复老的分区表。这里猜测之前的起始位置是56扇区,由于parted工具默认启动、结束位置单位都是用容量单位即kB/MB/GB,所以需要通过unit s命令定义默认使用sectors。&&引用 &(parted)unit s&引用 (parted)rescue 56 5369MB& & & &'995')this.width='995';">& & &可以看到老的分区已经乖乖的回来了。但是由于是在扩容所以我们好重建分区表所以修复老分区表只是为了获取之前的起始位置信息。& & &4、创建新分区。这里需要注意的是parted工具里END的值,由于一般大家都不清楚具体的扇区数量,可以使用容量来替代。&(parted)rm 1(parted)unit s(parted)mkpart primary ext3 56 5639MB& &'995')this.width='995';">& &至此就将分区表扩容处理完毕了。接下来执行e2fsck和resize2fs都正常了& & &[ 此帖被云栖徒骇在 14:13重新编辑 ]
在线时间515小时
访问内容超出本站范围,不能确定是否安全
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
您目前还是游客,请
验证问题: 88 + 3 = ?
&回复后跳转到最后一页}

我要回帖

更多关于 magic mirror 3 破解 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信