飞漫软件开发团队近期完成了合璧操作系统(HybridOS)设备侧在 RK3308 上的移植。
在本次移植中,使用的开发板是瑞芯微公司出品的ROC-RK3308B-CC-Plus开发板,其上CPU为rockchip rk3308。
ROC-RK3308B-CC-Plus开发板的主要技术参数为:
- ARM 四核 64 位 Cortex-A35 内核,主频 1.3GHz
 - 512M DDR3
 - 4GB eMMC
 - 支持 RMII 接口,可扩展 10M/100M bps 以太网
 - 支持 SDIO 3.0,可扩展 2.4GHz/5.0GHz WiFi 和 Bluetooth 4.2/5.0 单/多合一模块
 - 7 寸显示屏,分辨率为 1024 * 600
 
HybridOS 运行在 RK3308 开发板上的实拍操作视频如下:
HybridOS 主要技术特点
HybridOS 设备侧 R2011 版本在开发板上,主要使用的软件组件为:
- MiniGUI 5.0.3,多进程模式,合成图式:
	
- 视频中应用的启动条、状态栏、背景动画等,基于合成图式实现。
 - 视频中应用的缩小展示、切换、管理等,使用了 MiniGUI 在合成图式下的定制合成器技术开发。
 - 在瑞芯 PX30 开发板上,使用 DRM 图形引擎;在全志 R818 开发板上使用 FB 图形引擎。
 - 采用的是纯软件渲染效果,暂未启用 GPU。在使用 DRM 图形引擎时,动画流畅顺滑,但在使用 FB 图形引擎时,有丢帧现象。
 
 - hiShell:用于启动应用、切换应用、管理应用的外壳程序。
 - hiWebKit:用于支撑 HTML5 及 HybridOS 扩展特性的 WebKit 扩展版本:
	
- 其中用于展示手表表盘、秒表的页面,采用 hiWebKit 的 
hiview扩展标签实现。 - 其中用于展示仪表盘的页面,使用了 hiWebKit 的 
himeter和hihand扩展标签实现。 - 仔细观察表盘及仪表盘中的指针及条带变化,在两款开发板上的运行效果都非常棒。
 
 - 其中用于展示手表表盘、秒表的页面,采用 hiWebKit 的 
 
编译并烧写 ROC-RK3308B-CC-Plus 开发板
本次所使用的开发板是ROC-RK3308B-CC-Plus开发板,并带7寸屏,屏幕分辨率为1024 x 600。
因此所使用的配置文件为roc-rk3308b-cc-plus_rgb-7.0inch_qt_release_BoardConfig.mk。
代码的获取
访问https://www.t-firefly.com/doc/download/73.html下载SDK。下载文件为Firefly-RK3308_Linux_SDK_git_20190924.7z。
升级SDK
按下面的命令,安装所需要的软件,并升级SDK:
    $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip device-tree-compiler
    $ sudo apt-get install libfile-which-perl sed make binutils gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc libmpc3 git repo texinfo pkg-config cmake tree
    $ sudo apt-get install genext2fs
    $ sudo apt-get install p7zip-full
    $ sudo apt-get install gawk
    $ sudo apt-get install libncurses5-dev
    $ mkdir Firefly-RK3308
    $ cd Firefly-RK3308
    $ 7zr x Firefly-RK3308_Linux_SDK_git_20190924.7z
    $ git reset --hard HEAD
    $ git remote -v
    $ git remote set-url gitlab https://gitlab.com/TeeFirefly/rk3308-linux.git
    $ git pull gitlab firefly:firefly
编译Uboot
    $ ./build.sh roc-rk3308b-cc-plus_rgb-7.0inch_qt_release_BoardConfig.mk
    $ ./build.sh uboot
编译完,会生成trust.img、rk3308_loader_xxx.bin、uboot.img三个镜像文件。
编译Kernel
    $ ./build.sh roc-rk3308b-cc-plus_rgb-7.0inch_qt_release_BoardConfig.mk
    $ ./build.sh kernel
最终生成的kernel.img和resource.img将会被打包进zboot.img,更换内核的时候,只需烧写zboot.img即可。
编译Buildroot
前面编译的是uboot和kernel,现在编译一些系统软件,使用buildroot。
    $ source buildroot/build/envsetup.sh        选择firefly_rk3308_release
    $ make -j4
    $ ./mkfirmware.sh
所有烧写所需的镜像都将会拷贝于rockdev目录。
一键编译
为了简化前面的编译步骤,可以使用瑞芯微提供的一键编译:
    $ ./build.sh roc-rk3308b-cc-plus_rgb-7.0inch_qt_release_BoardConfig.mk
    $ ./build.sh
最终生成update.img,放在rockdev目录下。
烧写映像文件到开发板
- 准备烧写工具
 
    $ cd tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool_v1.38
    $ chmod +x upgrade_tool
    $ sudo mv upgrade_tool /usr/sbin
    $ sudo chown root:root /usr/sbin/upgrade_tool
    $ sudo cp config.ini /usr/sbin
- 
	
按住开发板上的
recovery键不要松手; - 
	
拔掉
type-c接口,使得开发板掉电; - 
	
插上
type-c接口,使得开发板重新上电; - 
	
松开
recovery键; - 
	
在
PC机上输入下面的命令: 
    $ cd rockdev
    $ sudo upgrade_tool uf update.img
编译 HybridOS 操作系统
代码的获取
使用下面的命令,获得HybridOS代码:
    $ git https://gitlab.fmsoft.cn/hybridos/build-hybridos-rootfs.git
    $ cd build-hybridos-rootfs
代码的编译
使用下面的命令,编译HybridOS:
    $ source build/envsetup.sh
    $ lunch             选择: rk3308_hybridos
    $ make -j4
生成的文件,在output/target目录下。
在开发板上运行 HybridOS
- 将
output/target目录,传送到开发板的/userdata目录下,并登录开发板: 
    $ cd output
    $ adb push target /userdata
    $ adb shell
- 在开发板上进行如下操作:
 
    // 添加环境变量
    # vi /etc/profile
        export LD_LIBRARY_PATH=/userdata/target/usr/lib:/userdata/target/lib:$LD_LIBRARY_PATH
        export MG_RUNTIME_TMPDIR=/tmp
    // 修改启动脚本
    # cd /etc/init.d/
    # mv S50launcher ../
    # vi S50launcher
        #!/bin/sh
        #
        # Start linux launcher...
        #
        export LC_ALL='zh_CN.utf8'
        export LC_ADDRESS=zh_CN.UTF-8
        export LC_IDENTIFICATION=zh_CN.UTF-8
        export LC_MEASUREMENT=zh_CN.UTF-8
        export LC_MONETARY=zh_CN.UTF-8
        export LC_NAME=zh_CN.UTF-8
        export LC_NUMERIC=zh_CN.UTF-8
        export LC_PAPER=zh_CN.UTF-8
        export LC_TELEPHONE=zh_CN.UTF-8
        export LC_TIME=zh_CN.UTF-8
        export LD_LIBRARY_PATH=/userdata/target/usr/lib:/userdata/target/lib:$LD_LIBRARY_PATH
        export MG_RUNTIME_TMPDIR=/tmp
        cd /userdata/target/usr/sbin
        ./hibusd -d
        cd /userdata/target/usr/bin
        ./hiinetd &
        cd /userdata/target/usr/libexec
        ./mginit &
        exit 0
    // 设置字体
    # cd /usr/share
    # ln -s /userdata/target/usr/share/mime mime
    # ln -s /userdata/target/usr/share/fonts fonts
    # cd fonts
    # /userdata/target/usr/bin/fc-list
    // 添加链接
    # cd /usr/libexec
    # ln -s /userdata/target/usr/libexec/samples samples
    # ln -s /userdata/target/usr/libexec/webkit2hbd-1.0/ webkit2hbd-1.0
    # cd /usr/local
    # mkdir share
    # cd share
    # ln -s /userdata/target/usr/share/minigui/ minigui
    # cd /usr/local/share/minigui/res/
    # ln -s /userdata/target/usr/share/fonts/ font
    // 添加驱动
    # cd /userdata/target/usr/lib
    # cp -fra gio /usr/lib
    // 修改MiniGUI.conf
    # cd /userdata/target/libexec
    # vi MiniGUI.conf
        [system]
        gal_engine=drm
        defaultmode=1024x600-32bpp
        ial_engine=singletouchkey
        mdev=/dev/input/mice
        mtype=IMPS2
        [singletouchkey]
        touch_dev=/dev/input/event0
        [cursorinfo]
        cursorpath=/userdata/target/usr/share/minigui/res/cursor/
        cursornumber=0
        [resinfo]
        respath=/userdata/target/usr/share/minigui/res/
        [truetypefonts]
        font_number=1
        name0=ttf-Source Sans Pro,SansSerif-rrncnn-0-0-ISO8859-1,UTF-8
        fontfile0=/usr/local/share/minigui/res/font/sans-serif-hei-chinese-medium.ttf
    // 修改wifi参数
    # cd /userdata/target/libexec
    # vi hybridos.cfg
        [wifi_test]
        ssid=your_wifi_ssid
        password=your_wifi_password
    // 添加插件库
    # cd /opt
    # ln -sf /userdata/target/opt/view-renderers view-renderers
    // 重新启动
    # sync
    # reboot
此时就可以看到HybridOS运行界面了。
注意:如果想要对HybridOS进行调试,通过adb shll登录系统,则需要运行下面的命令:
export LD_LIBRARY_PATH=/userdata/target/usr/lib:/userdata/target/lib:$LD_LIBRARY_PATH
export MG_RUNTIME_TMPDIR=/tmp
下载映像文件运行 HybridOS
前面的步骤较为繁琐,为了能让用户更快的体验到HybridOS,我们提供了映像文件。
- 
	
下载映像文件和文件系统,下载地址为:
 - 
	
首先按照前面的烧写步骤说明,烧写开发板:
 
    $ sudo upgrade_tool uf update.img
- 然后解压缩
target.tar.gz,并将目录传送到开发板,并登录开发板: 
    $ tar zxf target.tar.gz
    $ adb push target /userdata
    $ adb shell
- 在开发板上进行重新配置:
 
    # cd /userdata/target
    # ./setup
开发板将自动进行配置,并且重新启动。重新启动后,既可看见HybridOS界面。
后续计划
飞漫的研发团队正在快马加鞭的将合璧操作系统设备侧的完全版本(HybridOS)移植到 D1 开发板上。届时将完成 HybridOS 对 RISC-V 体系架构的完全支持。
喜欢我们的朋友不会等待太久。
支持合璧操作系统,请点亮 GitHub 上 HybridOS 项目的星星吧: