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

📄 boot-parameters.c

📁 ks8695 loader > > > > > > > > > > > > >
💻 C
字号:
/***************************************** Copyright (c) 2001-2002   Sigma Designs, Inc. All Rights Reserved Proprietary and Confidential *****************************************//* This is file is part of the Jasper DVD boot loader *//* * boot-parameters.c * * Utility to modify boot-cd ISO image parameters * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>//#include "config.h"#define ELTORITO_PLATFORM_ID	85static unsigned char sector[2048];static unsigned short calc_check(unsigned short *buf){	int i;	unsigned short sum=0;	for(i=0;i<16;i++) {		sum+=buf[i];	}	return sum;}int main(int argc, char *argv[]){	int fd;	unsigned long cat_addr; // boot catalog address	if(argc<2) {		fprintf(stderr,"Usage: %s <image.iso>\n", argv[0]);		exit(1);	}	fd=open(argv[1],O_RDWR);	if(fd==-1) {		perror("Cannot open ISO image");		exit(1);	}		// Seek to boot record	lseek(fd, 2048*17, SEEK_SET);	if(read(fd, sector, 2048)!=2048){		perror("Couldnt read fully the boot sector");		exit(1);	}		// test boot sector	if(strcmp(sector+7,"EL TORITO SPECIFICATION")!=0) {		printf("Not an EL TORITO boot image (%s)\n",sector+7);		exit(1);	}		// Get the boot catalog address	// -  Warning cast doesnt respect aligment	cat_addr = *(unsigned long *)(sector+0x47); 		printf("Boot catalog address: sector %ld (abs %lx)\n",	       cat_addr, cat_addr*2048);	// Seek to boot catalog	lseek(fd, cat_addr*2048, SEEK_SET);	if(read(fd, sector, 2048)!=2048){		perror("Couldnt read fully the boot catalog");		exit(1);	}		// check validation entry	if(sector[0]!=1) {		printf("Validation Entry invalid %d instead of 1\n",sector[0]);		exit(1);	}	printf("Current platform ID: %d\n",sector[1]);	printf("Current ID string : %s\n",sector+4);	printf("Current checksum word: %04x (sum=%04x)\n",	       *(unsigned short *)(sector+0x1c),	       calc_check((unsigned short *)sector));	#ifdef	ELTORITO_PLATFORM_ID 	sector[1]=ELTORITO_PLATFORM_ID;	printf("Changed platform ID to %d\n",ELTORITO_PLATFORM_ID);#endif#ifdef ELTORITO_ID_STRING		memset(sector+4, 0, ELTORITO_ID_STRING_MAX_LENGTH);	strncpy(sector+4, ELTORITO_ID_STRING, ELTORITO_ID_STRING_MAX_LENGTH);	(sector+4)[ELTORITO_ID_STRING_MAX_LENGTH-1]=0;	printf("Changed ID string to %s\n",sector+4);#endif	*(unsigned short *)(sector+0x1c) = 0;	*(unsigned short *)(sector+0x1c) = 0 - calc_check((unsigned short *)sector);	printf("New checksum word: %04x (sum=%04x)\n",	       *(unsigned short *)(sector+0x1c),	       calc_check((unsigned short *)sector));	// check initial entry	if(sector[0x20]!=0x88) {		printf("Initial/Default entry not bootable.. abort\n");		exit(1);	}#ifdef ELTORITO_EMULATION_TYPE		if(sector[0x21]!=ELTORITO_EMULATION_TYPE) {		printf("Initial/Default entry emulation type set to %d, resetting to %d\n", sector[0x21], ELTORITO_EMULATION_TYPE);		sector[0x21]=ELTORITO_EMULATION_TYPE;	}#endif	lseek(fd, cat_addr*2048, SEEK_SET);	write(fd, sector, 2048);	close(fd);		return 0;}

⌨️ 快捷键说明

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