u-boot调用wince关键代码

本文介绍了一个从U-Boot环境启动Windows CE (WinCE) 的过程。通过一个函数`call_wince`,文章详细展示了如何设置并调用WinCE内核地址,包括直接跳转到指定地址前的准备步骤,如缓存清理和MMU禁用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cpu.c (z:\item_XXXX210\u-boot_XXXX210_1.3.4_ce\cpu\s5pv210)

extern void launch_CE(unsigned int);


void  call_wince(unsigned int a0)
{
	void	(*theKernel)(void);
	theKernel = (void (*)(void))a0;
	printf("wince launch=0x%x\n", a0);
//	cleanup_before_linux();


#if 0
printf("---1----0x%08X\n", theKernel);
__asm__(
	"mov	ip, #0\n"
	"mcr	p15, 0, ip, c13, c0, 0\n"	/* zero PID */
	"mcr	p15, 0, ip, c7, c7, 0\n"	/* invalidate I,D caches */
	"mcr	p15, 0, ip, c7, c10, 4\n"	/* drain write buffer */
	"mcr	p15, 0, ip, c8, c7, 0\n"	/* invalidate I,D TLBs */
	"mrc	p15, 0, ip, c1, c0, 0\n"	/* get control register */
	"bic	ip, ip, #0x0001\n"		/* disable MMU */
	"mcr	p15, 0, ip, c1, c0, 0\n"	/* write control register */
	"nop\n"
	"nop\n"
	);
	theKernel ();
#elif 0
printf("---2----\n");
	launch_CE(a0);
#elif 1
printf("---3----\n");
__asm__(
	"mov	r0, %0\n"
//	"mov	r1, %1\n"
//	"mov	r2, %2\n"
#if 1
	"mov	ip, #0\n"
	"mcr	p15, 0, ip, c13, c0, 0\n"	/* zero PID */
	"mcr	p15, 0, ip, c7, c7, 0\n"	/* invalidate I,D caches */
	"mcr	p15, 0, ip, c7, c10, 4\n"	/* drain write buffer */
	"mcr	p15, 0, ip, c8, c7, 0\n"	/* invalidate I,D TLBs */
	"mrc	p15, 0, ip, c1, c0, 0\n"	/* get control register */
	"bic	ip, ip, #0x0001\n"		/* disable MMU */
	"mcr	p15, 0, ip, c1, c0, 0\n"	/* write control register */
#endif
	"mov	pc, r0\n"
	"nop\n"
	"nop\n"
	: /* no outpus */
	: "r" (a0)
	: "r0","ip"
	);
#endif
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值