⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootloader.c

📁 原创作品
💻 C
字号:
/* *bootloader.c * * *Loads an ELF kernel from flash memory. * *auther:hegs * *mail:sammhe@tom.com  */#include "bootloader.h" void main(void){	static char *mem = (char *)FLASH_MEM0_BASEADDR;	Elf32_Ehdr *elf;        //elf file header	Elf32_Phdr *elf_phdr;	/* program segment header */	unsigned long e_entry,  	              e_phoff,  //program head offset (at file)	              e_phnum;  //phdr number	                int i;      while(1)  {	 elf = (Elf32_Ehdr *) mem;		 if (elf->e_ident[0] !=0x7f ||  	    elf->e_ident[1] !='E' ||	    elf->e_ident[2] !='L' ||	    elf->e_ident[3] !='F' )	 {		print("not an ELF file\n");		continue; //??flash ??	}	if (elf->e_type != ET_EXEC) {		print("not an ELF executable\n");		continue;	}	e_entry = elf->e_entry;	e_phnum = elf->e_phnum;	e_phoff = elf->e_phoff;	for (i = 0; i < e_phnum; ++i)	{		elf_phdr = (Elf32_Phdr *) (e_phoff+mem);				e_phoff += sizeof(*elf_phdr);		if (elf_phdr->p_type != PT_LOAD)			continue;		memcpy((void *)(elf_phdr->p_vaddr), (void*)(elf_phdr->p_offset+mem), elf_phdr->p_filesz);		memset((char*)(elf_phdr->p_vaddr+elf_phdr->p_filesz), 0, elf_phdr->p_memsz - elf_phdr->p_filesz);	}	print("starting kernel...\n");	void (*boot)();	boot=(void*)e_entry;  	boot();	//???????????	#ifdef LED_BASEADDR	XIo_Out32(LED_BASEADDR, 0x55);	XIo_Out32(LED_BASEADDR, 0xaa);	#endif }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -