赛昉科技已经开源了VisionFive2 的SDK。下载地址
https://github.com/starfive-tech/VisionFive2
相关开发文档在
https://doc.rvspace.org/
首先要下载SDK。这个SDK的部分大文件需要采用git-lfs才能下载。首先要安装git-lfs。笔者这里的虚拟机版本是ubuntu1604。这个工具默认的源里面是找不到的,需要单独下载deb文件安装。下载地址为
https://packages.ubuntu.com/mantic/git-lfs
下载deb包之后执行
sudo dpkg -i git-lfs_3.3.0-1_bpo11+1_amd64.deb
之后执行git-lfs --version。如果可以看到版本号的话,说明安装成功
![21.jpg](//file1.elecfans.com/web2/M00/8E/69/wKgaomTGj7CAF-lGAAAW5FAK0Bw962.jpg)
然后执行下载
$ git clone https://github.com/starfive-tech/VisionFive2.git
$ cd VisionFive2
$ git checkout JH7110_VisionFive2_devel
$ git submodule update --init --recursive
下载之后还要去各个git工程里面切换分支。
$ cd buildroot && git checkout --track origin/JH7110_VisionFive2_devel && cd ..
$ cd u-boot && git checkout --track origin/JH7110_VisionFive2_devel && cd ..
$ cd linux && git checkout --track origin/JH7110_VisionFive2_devel && cd ..
$ cd opensbi && git checkout master && cd ..
$ cd soft_3rdpart && git checkout JH7110_VisionFive2_devel && cd ..
注意,如果系统里面本身就有git命令的话,它是会调用默认的git而不是git-lfs。而这些大的文件都在soft_3rdpart里面。这时候需要进入soft_3rdpart文件夹,执行
git-lfs reset --hard
这样可以把那些大文件都检出。
要想验证这个git-lfs是否生效,可以看下gpu的库是不是存在。如果没有生效,这几个文件都是几KB的,只有使用git-lfs才是正常的50多M
![22.jpg](//file1.elecfans.com/web2/M00/8E/65/wKgZomTGj7-AHE3fAABPFoPjfmo704.jpg)
这些文件必须检出,否则后面编译系统的时候会报错。
然后可以看下它的工程目录。
![23.jpg](//file1.elecfans.com/web2/M00/8E/65/wKgZomTGj8eAENsDAACbhebMhXk007.jpg)
这个SDK的工程目录跟RK或者全志的类似,把buildroot,bootloader,kernel那些放到同一工程目录下面,然后加上一个编译脚本,可以直接生成各个部分的镜像,并执行打包操作。下面介绍编译流程。
如果是在ubuntu 1604环境下面,需要修改一下uboot的编译脚本,如下
![24.jpg](//file1.elecfans.com/web2/M00/8E/69/wKgaomTGj9mAWSp9AABNZn3E38k283.jpg)
这个kwbimage没有什么用处,而编译它需要一个当前系统不支持的openssl库,部署起来麻烦,直接干掉。
在工程目录下直接执行
make
编译之后会在work目录下生成各个部分的镜像
![25.jpg](//file1.elecfans.com/web2/M00/8E/65/wKgZomTGj-yAYXF7AAC6US9OM5Y869.jpg)
分别为
uboot-spl镜像 文件名为u-boot-spl.bin.normal.out
uboot和opensbi组合的文件,文件名为 visionfive2_fw_payload.img。这个文件使用的是itb格式
内核镜像,文件名为 image.fit,这个是内核image+dtb文件+ramdisk镜像的组合,也是itb格式
内核镜像和uboot的环境变量会被放到同一个fat32的img文件里面,名为 starfive-visionfive2-vfat.part
rootfs镜像,在buildroot_rootfs/images下,文件名为 rootfs.ext4
这时候运行
make img
将会生成一个sdcard.img文件。此文件是一个可以烧录到sd卡的镜像,使用gpt分区。
将此文件用Win32DiskImager烧录到tf卡,然后将板上的拨码开关调整至如下状态
![26.jpg](//file1.elecfans.com/web2/M00/8E/69/wKgaomTGj_SAEqZpAAAh3nFaf3g978.jpg)
这个状态就是从SD启动。
然后上电,启动设备。首先可以看到uboot spl初始化了ddr,并从mmc2启动下一级固件
![27.jpg](//file1.elecfans.com/web2/M00/8E/65/wKgZomTGj_6AXtY5AAAYX0XluDE479.jpg)
然后启动opensbi。这个opensbi有点类似于arm64平台上面的optee,是用来实现M模式访问的。它有一组接口,只有通过这组接口,才能够访问受保护的硬件资源。
![28.jpg](//file1.elecfans.com/web2/M00/8E/65/wKgZomTGkAyAd7ICAACHPD5zEUU950.jpg)
然后就是加载kernel并启动。这里可以看到kernel image dtb ramdisk的itb文件解析的打印信息
![29.jpg](//file1.elecfans.com/web2/M00/8E/69/wKgaomTGkBaAQTxtAAFj9iwNlYQ213.jpg)
接着就是内核启动。
![210.jpg](//file1.elecfans.com/web2/M00/8E/69/wKgaomTGkCyAIVkzAAEuUhNjhjc697.jpg)
最后要加载rootfs。rootfs的登入用户名 root 密码starfive
登入系统之后可以看一些基本信息。CPU 内存什么的
![211.jpg](//file1.elecfans.com/web2/M00/8E/65/wKgZomTGkDGANPqgAACdTdtiyKY361.jpg)
到这里,说明SDK部署完成,并能够成功编译。