|
前几天看到一篇“更改boot,绕过UBOOT,直接启动LINUX”的文章,里面有这么一句asm("mov pc,%0" : : "r" (0x20008000)),不明白是怎么执行的,麻烦解释一下。
void boot() {
int i;
char* ptr=(char*)DST;
for(i=0;i<LEN;i++) ptr=0;
AT91F_DBGU_Printk ("Work-man\'s boot.\n\r");
/**************************************************************************/
//decompress_image(SRC,DST,LEN);
#if 0
void* memcpy(void* __dest, const void* __src, size_t __n)
{
int i;
char *d = (char *)__dest, *s = (char *)__src;
for (i=0;i<__n;i++) d = s;
}
#endif
/* memcpy(DST,SRC,LEN);*/
AT91F_DBGU_Printk("load the Kernel.\n\r");
memcpy(0x20008000,start_Kernel,size_Kernel);
AT91F_DBGU_Printk("load the Ramdisk.\n\r");
memcpy(0x20a00000,start_Ram,size_Ram);
/**************************************************************************/
AT91F_DBGU_Printk("Run the LINUX.\n\r");
asm("mov pc,%0" : : "r" (0x20008000)); //原来DST改为0x20008000,此语句是跳到LINUX入口(0x20008000)开始执行。
}; |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|