Fuchsia编译与真机安装

代码下载:

参照官方文档即可:https://fuchsia.dev/fuchsia-src/development/source_code

curl -s "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT" | base64 --decode | bash

下载时间大概在一两个小时。下载完成后,先配置好jiri命令环境变量:

PATH=/$(CODE_PATH)/fuchsia/.jiri_root/bin:$PATH

后续可以直接使用jiri更新代码:

jiri update

实际使用过程中发现代码同步/更新时有时会出现以下警告:

[23:58:37.190] Updating all projects
ERROR: 'git fetch -p origin' failed:
stdout:

stderr:
fatal: unable to access 'https://dart.googlesource.com/observatory_pub_packages/': gnutls_handshake() failed: The TLS connection was non-properly terminated.

command fail error: exit status 128

和设置了代理/网络不稳定有关,多尝试几次。


开始编译,使用的是Intel NUC7真机,选择如下的配置进行编译:

fx set workstation.x64 --with //bundles:kitchen_sink

其中workstation是product类型,x64是平台类型,"--with //bundles:kitchen_sink"则是要一起编译的bundle。

通过fx list-products可以看到支持的产品列表:

Fuchsia编译与真机安装_第1张图片

官方对各类product的解释: https://fuchsia.dev/fuchsia-src/development/build/fx#key-product-configurations

Fuchsia编译与真机安装_第2张图片

workstation包含包括UI支持,多媒体在内的高级功能。

fx list-boards可以查看支持的平台类型:

Fuchsia编译与真机安装_第3张图片

key bundles的分类:https://fuchsia.dev/fuchsia-src/development/build/fx#key-bundles

Fuchsia编译与真机安装_第4张图片

fx命令的详细用法参考官方文档:https://fuchsia.dev/fuchsia-src/development/build/fx

fx build开始编译,编译大约一到两个小时

编译完成后,可以在虚拟机中运行,也可以选择在真机上运行,按照官方文档,目前对NUC6/7(注意需要是酷睿)、PixelBook支持较好,建议选择这些设备进行真机调试。

官方文档,如何在intel NUC上安装fuchsia:https://fuchsia.dev/fuchsia-src/development/hardware/intel_nuc

安装有两种办法,但无一列外需要先制作Zedboot启动U盘:

制作命令也很简单,将U盘先插入fuchsia编译源码的主机(host):

fx mkzedboot /path/to/usb/disk

其中/path/to/usb/disk是U盘在host上的路径,可以通过以下命令获得: 

fx list-usb-disks

输出如下:

/dev/sdc - U3              
/dev/sda - USB Flash Disk  //通过df命令/手动拔插再次确认此设备为新插入的U盘

Zedboot启动盘制作完成:

Fuchsia编译与真机安装_第5张图片

把制作好的Zedboot U盘插到要安装fuchsia的设备(target)上, 并且通过在BIOS中选择从USB引导启动,启动进入后是一个蓝屏的命令行界面。

关于Zedboot的详细解释,官方文档:https://fuchsia.dev/fuchsia-src/development/build/fx#what-is-zedboot
Fuchsia编译与真机安装_第6张图片/

Zedboot其实就是fuchsia内核Zircon的包装,包含了网络栈,可以用来和编译代码的Host通信已完成安装,还包括分区等必要工具,这和Android上的recovery的组成及扮演的角色是非常相似的。

进入Zedboot后,屏幕上显示:

netsvc start

此时target和host之间已经可以通过网络链接了,通过USB网线转接头+网线连接了编译主机与目标设备NUC。

接下来有两种安装办法

1. fx pave

通过Zedboot在target设备上进行分区,将host上编译好的各个分区的镜像通过网络上传至Zedboot并写入对应分区。这种方法会创建Fuchsia的EFI引导,这样安装完成后的Fuchsia会增加一个启动项(就像平时安装Ubuntu时那样),开机的时候能自动引导进入系统。

进入Zedboot后,通过ALT+TAB进入命令行模式,接下来就可以开始安装Fuchsia镜像了。

擦除分区:

install-disk-image wipe-partition-tables --block-device /path/to/usb/disk

其中/path/to/usb/disk是要安装的目标路径,可以通过lsblk,首次安装时我选择了主硬盘路径,相当于完全擦除其余数据只保留Fuchsia。

初始化分区表:

install-disk-image init-partition-tables --block-device /path/to/usb/disk

此时再lsblk可以看到对应的分区已经分好了。

接下来在host的命令行中输入fx pave,可以看到编译主机在本地创建了一个bootserver本地端口,等待另一端的Zedboot通过网络发起请求,连接成功后编译好的fuchsia会开始传输。

实际pave的过程中在传输镜像的过程中发生过多次网络断开,传输反复重试的情况,多等待几次重试直到成功为止。传输成功后target上的Zedboot会自动启动到Fuchsia。


经测试无法和target硬盘上原有的系统引导共存,这样测试设备在安装Fuchsia无法承担其他工作,相对会造成一定的浪费。

2. fx netboot

netboot的区别是不需要对target上的存储设备分区,每次都通过host直接传输镜像到target内存中,直接通过Zedboot引导启动到Fuchsia。这种方法可以保留target硬盘上的原系统不受影响(如已经安装了的Windows/Ubuntu),设备在不运行Fuchsia时依然可以承担其他工作,缺点是每次进入Fuchsia都需要通过U盘Zedboot引导启动,而pave在安装成功后Fuchsia可以脱离Zedboot直接启动。

同样通过启动U盘将target引导至Zedboot,通过fx netboot直接引导启动,实际一次完整镜像传输1分钟之内就完成了,依然很方便。

你可能感兴趣的:(fuchsia)