How to make Windows 10 IoT Core offline install media for Raspberry Pi
前几天在树莓派上更新Receiver for Linux 13.4,又尝试在Pi上安装Visual Studio Code,结果觉得系统有点不正常了,于是打算重新刷一遍。
之前的系统使用了一张16 GB的TF卡,直接使用NOOBS lite进行在线安装。之前说了这样安装有个好处,就是安装文件本身不占太多的空间,更多的空间可以给系统使用。
可是……下载好慢啊……最关键是,下载Windows 10 IoT Core的时候,总是出错!好不容易下载完了,安装结束出现了MBR的HASH错误!
原因估计是GFW对HTTPS的干扰,SSL通信,你懂的。
N次在线安装失败之后,我怒了,搞个离线安装的卡!
说来容易,做来困难。Raspbian有离线安装的NOOBS下载,就是官网1 GB左右的那个压缩包。可是Windows 10 IoT Core怎么办呢?
搜索了半天,没有进展。后来我注意到,当网络失败时NOOBS会提示从一个站点下载内容失败。这个站点看上去是在Azure的CDN:
https://iottools.blob.core.windows.net/win10iotnoobs/
于是,通过人为制造网络断开,获得了几个文件的失败请求:
Windows_IoT.png, os.json, partitions.json, partition_setup.sh, marketing.tar
对照Raspberry的安装目录,感觉还缺安装启动镜像和安装镜像。我记得之前安装时会有FFU文件在Windows IoT的安装目录,尝试了一下,不行。打开marketing.tar,和slides_vga目录的一致,先解个压放好。
回到安装Windows IoT失败的系统,通过Raspbian挂载的那几个分区,挨个打开看。有一个叫Srcatch的分区吸引了我,里面有大量的LOG文件,最重要的,有一个ISO文件,难道这就是安装镜像?先复制过来!还有一些Linux下的文件例如installtool-1.0之类。再次尝试启动,当然还是失败了……
感觉这样是不够的。既然Windows自己会创建这些分区,那么这些下载和复制的初始化动作一定有迹可选,嗯,蛛丝马迹应该在json文件和sh文件里。
先打开partitions.json,从名字来看,这是个分区描述文件,很快就让我发现的蛛丝马迹:
图中高亮部分,就是类似启动安装环境的压缩包。你看到的这个“tarball”参数,已经被我替换成猜测的本地路径而不是需要下载的远程路径。当然,我也顺手下载了一份放到我前面做的文件夹里。
这样看来,启动需要的文件已经齐了。可再次安装时,还是去网上下载,离线失败……
继续。接下来是查看partition_setup.sh,我感觉这个文件完成了整个安装过程。为了能够明白这个过程,我这个Linux小白仔细地读起了Shell文件。看了两边之后,感觉需要改两个地方,一个是URL(后来发现这是由instaltool生成的,有时间在研究吧),一个是Image路径。于是,把第一个参数也改成我猜测的挂载路径。
再次启动NOOBS,终于能离线安装了……泪奔……可是,为啥Windows IoT在NOOBS选择的时候,没有图标呢?我不是×××座,可我也不能忍……
继续改os.json。
这一次,终于完美……
对了,其实一开始我失败了好多次,就是做完卡启动后,一直卡在NOOBS初始化阶段,等了一晚都不好使。于是我去NOOBS的github上看说明:
https://github.com/raspberrypi/noobs
recoevry.cmdline中在试了很多参数,都没效果。最后,发现一个神秘的参数:runinstaller。这个参数会自动开启分区调整,然后启动NOOBS的安装过程。
为了方便,可以直接从github上下载修改过的上述json和sh文件:
https://github.com/HaoHoo/Windows-10-IoT
如果需要ISO文件的话,可以留言我放网盘。
最后的最后,小结一下整个过程:
1、使用SDformatter来格式化SD/TF卡,如果之前已经做过NOOBS,可以使用diskpart的clean清除卡上的所有分区。格式化时,务必开启“逻辑大小调整”
2、下载NOOBS的压缩包,可以选择1 GB的,解压到SD/TF卡
3、在os目录下,新建Windows_10_IoT_Core目录,并将前面提及的文件全部复制进去。记住,Linux区分大小写!
4、修改recovery.cmdline文件,加入runinstaller。(第一次解压的文件包含,可选。以后如果再次换卡使用,记得修改)
5、插卡启动树莓派,开始安装过程。
Windows 10 IoT Core对SD/TF卡的要求要高于Raspbian,如果可以,选择16GB Class 10以上的卡为佳。