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

📄 boot.c

📁 open source bios with linux platform, very good and can be reused.
💻 C
字号:
/* * */#undef BOOTSTRAP#include "openbios/config.h"#include "openbios/bindings.h"#include "openbios/elfload.h"#include "openbios/nvram.h"#include "libc/diskio.h"void boot(void);void *load_elf(char *spec);void*load_elf(char *spec){#if 0	int fd;	void *entry=NULL;	int i, lszz_offs, elf_offs;	char buf[128]; // , *addr;	Elf_ehdr ehdr;	Elf_phdr *phdr;	size_t s;	if( (fd=open_io(spec)) == -1 )		return NULL;	if( (elf_offs=find_elf(fd)) < 0 ) {		printk("----> %s is not an ELF image\n", buf );		return NULL;	}	if( !(phdr=elf_readhdrs(fd, 0, &ehdr)) ) {		printk("elf32_readhdrs failed\n");		return NULL;	}	(ullong *)entry = ehdr.e_entry;		lszz_offs = elf_offs;	for( i=0; i<ehdr.e_phnum; i++ ) {		s = MIN( phdr[i].p_filesz, phdr[i].p_memsz );		seek_io( fd, elf_offs + phdr[i].p_offset );		/* printk("filesz: %08lX memsz: %08lX p_offset: %08lX p_vaddr %08lX\n", 		   phdr[i].p_filesz, phdr[i].p_memsz, phdr[i].p_offset,		   phdr[i].p_vaddr ); */		if( phdr[i].p_vaddr != phdr[i].p_paddr )			printk("WARNING: ELF segment virtual addr != physical addr\n");		lszz_offs = MAX( lszz_offs, elf_offs + phdr[i].p_offset + phdr[i].p_filesz );		if( !s )			continue;		 printk("ELF ROM-section loaded at %08lX (size %08lX)\n",				 (ulong)phdr[i].p_vaddr, (ulong)phdr[i].p_memsz);	}	free( phdr );	return entry;#else 	return NULL;#endif}voidboot( void ){	char *path=pop_fstr_copy();	void *entry;		if(!path) {		printk("[unix] Booting default not supported.\n");		return;	}	printk("[unix] Booting '%s'\n",path);	entry=load_elf(path);	if(entry)		printk("successfully loaded client at %x.\n", (ucell)entry);	else		printk("failed.\n");}

⌨️ 快捷键说明

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