SElinux安全操作系统---修改U-boot启动支持RTEMS应用程序

直接使用rtems的应用程序替换linux的内核,运行在nand flash上,需要修改u-boot的启动部分,

(源码/opt/EmbedSky/selinux/opt/EmbedSky/u-boot-1.1.6)

具体修改在boot_zImage.c中int boot_zImage(ulong from, size_t size)函数负责将linux的的镜像从nand flash 拷贝到内存,拷贝地址是0x30008000,而

rtems启动地址是0x30000000,因此修改如下:红色部分

int boot_zImage(ulong from, size_t size)
{
	int ret;
	ulong boot_mem_base;	/* base address of bootable memory */
	ulong to;
	ulong mach_type;
	boot_mem_base = 0x30000000;
	/* copy kerne image */
//to = boot_mem_base + LINUX_KERNEL_OFFSET;  //注释掉
to = boot_mem_base;    //将地址直接设为0x30000000
	//printf("Copy linux kernel from 0x%08lx to 0x%08lx, size = 0x%08lx ... ",
	//	from, to, size);   //注释掉
printf("Copy rtems program from 0x%08lx to 0x%08lx, size = 0x%08lx ... ",
		from, to, size);    //打印信息,不重要
	ret = copy_kernel_img(to, (char *)from, size);
	if (ret) {
		printf("failed\n");
		return -1;
	} else {
		printf("Copy Kernel to SDRAM done,");
	}
	printf("zImage magic = 0x%08lx\n", *(ulong *)(to + 9*4));//打印信息,不重要
	/*if (*(ulong *)(to + 9*4) != LINUX_ZIMAGE_MAGIC) {
		printf("Warning: this binary is not compressed linux kernel image\n");
		printf("zImage magic = 0x%08lx\n", *(ulong *)(to + 9*4));
	} else {
//		printf("zImage magic = 0x%08lx\n", *(ulong *)(to + 9*4));
		;
	}*/  //这一段注释掉
	/* Setup linux parameters and linux command line */
	//setup_linux_param(boot_mem_base + LINUX_PARAM_OFFSET);   //注释掉
	/* Get machine type */
	mach_type = MACH_TYPE_S3C2440;
//	printf("MACH_TYPE = %d\n", mach_type);
	/* Go Go Go */
	printf("NOW, Booting rtems......\n");	
	call_linux(0, mach_type, to);
	return 0;	
}

 

转载于:https://my.oschina.net/u/1466132/blog/815892

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值