无忧启动论坛

标题: boot.sdi 的制作方法 [打印本页]

作者: wintoflash    时间: 2020-7-2 15:19
标题: boot.sdi 的制作方法
本帖最后由 wintoflash 于 2020-7-2 15:20 编辑

目前网上好像没有 NT6+ boot.sdi 的制作教程,花了半天的时间研究了一下。
1GB 的 boot.sdi 下载: boot.sdi.zip (1.33 MB, 下载次数: 436)

SDI 文件结构:

文件头 (至少 4096 字节)
  1. struct SDI_header
  2. {
  3.   char magic[4]; // '$SDI'
  4.   char version[4]; // '0001'
  5.   uint64_t MDBtype; // 0x00
  6.   uint64_t BootCodeOffset; // 0x00
  7.   uint64_t BootCodeSize; // 0x00
  8.   uint64_t VendorID; // 0x00
  9.   uint64_t DeviceID; // 0x00
  10.   guid_t DeviceModel;  // 0x00
  11.   uint64_t DeviceRole; // 0x00
  12.   uint64_t Reserved1; // 0x00
  13.   guid_t RuntimeGUID; // 0x00
  14.   uint64_t RuntimeOEMrev; // 0x00
  15.   uint64_t Reserved2; // 0x00
  16.   uint64_t PageAlignment; // BLOB alignment value in pages
  17.   uint64_t Reserved3[48]; // 0x00
  18.   uint64_t Checksum;
  19. } __attribute__ ((packed));
复制代码

对于 NT6+ 的 boot.sdi,除了 checksum 和 PageAlignment ,其他的全部填零。
官方的 boot.sdi,PageAlignment 为 2 (8192),校验码为 0x39,

300KB 的 boot.sdi,PageAlignment 为 1 (4096),校验码为 0x3a,


BLOB 目录,位于 0x400 处
  1. struct SDI_TOC_record
  2. {
  3.   char BLOBtype[8]; // 3-4 bytes UPPERCASE value, 0-padded
  4.   uint64_t Attr; //0x00
  5.   uint64_t Offset;
  6.   uint64_t Size;
  7.   uint64_t BaseAddress;
  8.   uint64_t Reserved[3];
  9. } __attribute__ ((packed));
复制代码

每条记录的长度均为 0x40,以一个空的记录作为目录的结尾。
BLOBtype 为 blob 的类型,例如 PART,WIM。
Offset 是 blob 在 boot.sdi 中的偏移。
Size 是 blob 的大小除以 256,注意对齐。
对于 PART 类型的 blob,BaseAddress 记录了分区镜像的文件系统 ID,NTFS 为 0x07。
在 boot.sdi 中,一共只有两个 blob 条目。
第一个是 ntfs 镜像,

第二个是 wim 镜像,

WIM镜像的 Offset 填 boot.sdi 的总长度,Size 填 0。

接下来是 ntfs 镜像,如果 sdi 文件的长度不满足对齐要求,必须填充一些空数据。
  1. dd if=/dev/zero of=sdi.img bs=1M count=1024
  2. mkfs.ntfs -F sdi.img
复制代码

最后依次合并如下文件,按 sdi.header, sdi.toc, sdi.img, sdi.end 的顺序,生成 boot.sdi
  1. cat sdi.header sdi.toc sdi.img sdi.end > boot.sdi
复制代码

sdi.zip (374 Bytes, 下载次数: 348)

参考:
https://skolk.livejournal.com/1591.html
https://skolk.livejournal.com/1320.html



作者: 朱玛12345678    时间: 2020-7-2 15:41
前排支持
作者: 2012andyle113    时间: 2020-7-2 16:31
本帖最后由 2012andyle113 于 2020-7-2 16:35 编辑

技术党,不明觉厉,还以为什么情况,1G的boot.sdi,原来是做了个1G大小的文件



作者: plusv    时间: 2020-7-2 16:49
SDI 怪格式,
收入侦测文件格式.
作者: lianmeng    时间: 2020-7-2 21:05
感谢分享
作者: 红毛樱木    时间: 2020-7-2 21:54
x86启动的WIM文件有大小限制,是不是也是BOOT.SDI判断的?还有X盘最大容量x86也只是1G,和这个有关没?
作者: wplin    时间: 2020-7-3 00:11
感謝大大學習中
作者: 2011ohte    时间: 2020-7-3 08:17
希望此信息足以编写您自己的sdimgr开源版本
作者: wintoflash    时间: 2020-7-3 10:40
红毛樱木 发表于 2020-7-2 21:54
x86启动的WIM文件有大小限制,是不是也是BOOT.SDI判断的?还有X盘最大容量x86也只是1G,和这个有关没?

没看出来 X盘容量和 boot.sdi 的大小有明显关系。
作者: friend8179    时间: 2020-7-3 10:51
做这么大一个是啥用途?
作者: wintoflash    时间: 2020-7-3 11:12
friend8179 发表于 2020-7-3 10:51
做这么大一个是啥用途?

做实验
http://bbs.wuyou.net/forum.php?m ... d=421202&extra=
作者: MC阿虎    时间: 2020-7-3 13:25
感谢分享
作者: wintoflash    时间: 2020-7-4 15:35
13978951985 发表于 2020-7-4 14:48
谢谢分享

机器人刷帖?
作者: 黑中见白    时间: 2020-7-4 18:51
干啥用的,
弄pe启动?
作者: wintoflash1    时间: 2020-7-5 11:21
test
作者: caige518    时间: 2020-10-12 19:20
很好,所交
作者: a888    时间: 2020-10-26 11:16
前排支持
作者: 201287zr    时间: 2020-11-9 17:53
大神能不能具体介绍一下这个文件的用法,用到什么地方,有什么特别的地方,注意的地方等,联合Grub4dos一起用怎么使用等等。期待大神的帖子。
作者: mrzhonghb    时间: 2020-11-9 18:23
感谢分享
作者: NOS    时间: 2020-12-1 12:37
好好学习
作者: wjia    时间: 2020-12-8 20:05
那我就再回一贴的了滴了滴了滴了。。。
作者: Acronis2014    时间: 2021-1-23 14:11
正在找呢,前排支持。
作者: 18958925900    时间: 2021-1-31 16:14
一直对这个不了解,涨姿势了。
作者: sanshen3    时间: 2021-2-6 17:36
学习一下,了解
作者: 童心学艺    时间: 2021-2-12 08:59

感谢分享
作者: wom087    时间: 2021-2-24 22:27
谢谢分享
作者: JC_2019    时间: 2021-2-28 22:19

谢谢分享
作者: 金神主    时间: 2021-5-15 11:09
学习了,感谢
作者: cbmkj    时间: 2021-5-26 21:55
楼主辛苦

作者: doable    时间: 2021-7-7 17:08
很厉害的分析
作者: jswyh    时间: 2021-7-31 15:58
感谢分享
作者: zlzx01    时间: 2021-12-28 14:30
长知识了,多谢!!
作者: leitian72853    时间: 2022-5-14 22:41
谢谢分享
作者: bmw32567    时间: 2022-5-25 11:24
学习了
作者: tvkuang    时间: 2022-8-25 01:33
学习一下,了解
作者: devilma    时间: 2022-8-25 10:48
学习了,感谢分享!
作者: 香国妙手    时间: 2022-10-29 06:44
给力给力给力
作者: 2012update    时间: 2022-11-5 01:15
新手研究一下
作者: imgzcq    时间: 2022-11-5 14:44
用来干嘛的
作者: tsou888    时间: 2022-11-8 01:28
谢谢分享
作者: haoren9860    时间: 2022-11-25 20:38
#在这里快速回复# 感谢分享
作者: laonat    时间: 2022-12-5 14:16
貌似很复杂啊
作者: a66    时间: 2023-3-24 16:03
研究一下
作者: smile_eer    时间: 2023-4-12 22:56
很给力!
作者: zhangjiti    时间: 2023-4-17 14:04
谢谢提供分享
作者: kokozzz123    时间: 2023-7-30 16:41
本帖最后由 kokozzz123 于 2023-7-30 16:47 编辑

请教一个问题,不同pe系统(比如微pe和优启通pe)的boot.sdi都是通用的吗?

我最近不小心用论坛的28kb版boot.sdi了pe上的原版boot.sdi,pe上原来有2个系统,一个是10pe,一个是03pe

其中10pe和原版boot.sdi都位于boot文件夹下,



而03pe位于请教一个问题,不同pe系统(比如微pe和优启通pe)的boot.sdi都是通用的吗?

我最近不小心用论坛的28kb版boot.sdi了pe上的原版boot.sdi,pe上原来有2个系统,一个是10pe,一个是03pe

其中10pe和原版boot.sdi都位于boot文件夹下,

而03pe位于wxpe文件夹,而且03pe内部自带一个boot.sdi


现在10pe正常启动,但我担心03pe废了(03pe只能在经典bios下启动,我新电脑只能走uefi,要等到年底才能回家用老电脑测试03pe)……

作者: zqm0550    时间: 2023-7-30 16:54

非常感谢!
作者: wintoflash    时间: 2023-7-30 19:25
kokozzz123 发表于 2023-7-30 16:41
请教一个问题,不同pe系统(比如微pe和优启通pe)的boot.sdi都是通用的吗?

我最近不小心用论坛的28kb版bo ...

NT5 (2K, XP, 03) PE 用的 boot.sdi 和 NT6+ (Vista, 7, 8, 10) PE 用的 boot.sdi 不一样。本文开头也说了,针对的是 NT6+ PE。
NT5 PE 用的 boot.sdi 内嵌了很多东西,互相之间也不一定通用。
NT6+ PE 用的 boot.sdi 是通用的。你从任意版本的 Windows 原版安装镜像中提取一个就行 (反正都一样)。
但是如果你的 boot.sdi 不是从原版官方镜像中提取的,而是从某些魔改 PE 或者论坛帖子里面下载的,那就不一定通用。
作者: S-1-5-21-172611    时间: 2023-8-3 10:43
boot.sdi不是二进制文件吗?




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3