【发布时间】:2014-03-20 03:27:21
【问题描述】:
我试图理解为什么在这个图像创建器中使用 lseek()。为什么距离文件开头 5 个字节?如果我更改了那个数字,操作系统将无法启动。
镜像创建者会创建一个.img 文件,其中包含 bootloader.bin。
/* modify the sector count */
total_sector_number = file_size / 512
lseek(disk_image_fd, 5, SEEK_SET);
write(disk_image_fd, &total_sector_number, 2);
write(disk_image_fd, &kernel_32_sector_number, 2);
//printf("%d\n", lawl);
printf("TOTAL_SECTOR_NUMBER : %d\n", total_sector_number);
printf("KERNEL_32_SECTOR_NUMBER : %d\n", kernel_32_sector_number);
源代码(图像生成器): http://pastebin.com/raw.php?i=MuDpYP3Y
引导加载程序: http://pastebin.com/raw.php?i=kzw2ZaU1
使用 lseek() 的 hexdump 并将扇区数写入偏移量 5 处的字节:
没有 lseek() 操作系统无法正确启动。
【问题讨论】:
-
很明显,因为这是这个未命名的“操作系统”或引导加载程序希望为这些信息提供资金的位置。
-
我模糊地记得前 5 个字节是实际引导加载程序开始的一个分支。在控制分支中读取扇区后,转到扇区中的第一个位置。
-
我认为引导加载程序从 0x07C0 开始? [ORG 0x07c0] 和 ax 和所有的段寄存器都设置为 0x07c0
标签: bootloader osdev floppy