代码下载:
参照官方文档即可: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可以看到支持的产品列表:
官方对各类product的解释: https://fuchsia.dev/fuchsia-src/development/build/fx#key-product-configurations
workstation包含包括UI支持,多媒体在内的高级功能。
fx list-boards可以查看支持的平台类型:
key bundles的分类:https://fuchsia.dev/fuchsia-src/development/build/fx#key-bundles
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启动盘制作完成:
把制作好的Zedboot U盘插到要安装fuchsia的设备(target)上, 并且通过在BIOS中选择从USB引导启动,启动进入后是一个蓝屏的命令行界面。
关于Zedboot的详细解释,官方文档:https://fuchsia.dev/fuchsia-src/development/build/fx#what-is-zedboot
/
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分钟之内就完成了,依然很方便。