【平头哥Sipeed LicheeRV 86 Panel测评】III. 搭建交叉编译环境:成功与失败
[复制链接]
本帖最后由 zhang1gong 于 2022-3-23 16:24 编辑
对“Sipeed LicheeRV 86 Panel”硬件有了基本了解,并做了简单的点灯、闪灯实验以后,显然下一步就应该是搭建交叉编译环境,进行一些实质性的评测工作。
已经有几位朋友做了这方面的工作,他们的评测报告详细地说明了过程,包括可能的“坑”和如何“避坑”。本以为搭建交叉编译环境会很顺利,不料遇到了很多问题。最后的结果是有成功有失败,很不幸,总的来说是失败多、成功少。在试图解决问题的过程中,对Linux的了解倒是增长了不少。
1 成功:简单的“hello,world!”
因为想通过这次评测工作顺便熟悉一下Linux系统,在一台几年前花100多块钱买的小主机上安装了“Kali Linux”的最新版本,主要的操作都是从我的台式机通过模拟终端SSH远程登录做的。安装、配置小主机的Linux系统的过程还算顺利,然后部署了D1-SDK,编辑“helloworld.c”文件,按照D1-SDK的用户手册给出的步骤,运行:
source ~/.local/riscv64-toolchain/environment-setup-riscv64-oe-linux
$CC helloworld.c -o helloworld
编译通过,但有个警告。
其实这中间有个小插曲,开始运行“$CC helloworld.c -o helloworld”,提示:
zsh: no such file or directory: riscv64-linux-gcc -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/home/zyg/.local/riscv64-toolchain/sysroots/riscv64-oe-linux --no-sysroot-suffix
干脆直接运行:
riscv64-linux-gcc -o helloworld helloworld.c
编译通过。后来发现,是shell的问题,kali 默认的shell是zsh,很好用,但与bash不完全兼容。换为bash后用“$CC”编译也没问题了。
编译后的可执行代码要下载到目标机Sipeed LicheeRV 86 Panel,我用台式机上运行的模拟终端分别通过SSH连到kali linux小主机和Sipeed LicheeRV 86 Panel,然后在连接到Sipeed LicheeRV 86 Panel的模拟终端上用“scp”命令将kali linux小主机上的文件拷贝过来,运行,没问题。
2 失败:系统镜像的编译
Sipeed LicheeRV 86 Panel的教程的最后,给出了一种通过Docker编译系统镜像的方案,正好前几天刚刚听了个课,提到了docker,正好试试。根据教程的说明,下载、安装了docker镜像文件,几经折腾,终于在kali linux小主机上运行了。这个docker镜像是个Ubuntu系统,已经搭建好了进行“Sipeed LicheeRV 86 Panel”系统镜像交叉编译的环境,按照教程执行命令:
cd ~/sdk/tina-d1-open_new/
source build/envsetup.sh
lunch
make
开始编译过程。编译过程非常漫长(可能是因为我的小主机配置低?),肯定与在容器中运行而不是在本地直接运行也不无关系,总之编译过程长达数小时(10小时以上?),总算完成了!但是,但是,编译失败!
决定不用什么docker了,按照全志网站给出的下载、安装说明,下载了SDK仓库,搭建了编译系统镜像的环境,可是,仍然编译失败。起初是提示缺“openssl”库,上网查找解决方案后又出其他问题。这期间我甚至将本地的SDK仓库删掉后重新下载、安装,但还是不行。目前的状况似乎是生成的toolchain不对,估计是某个Makefile的问题,但还没有准确定位。
问题继续查找中,对于我来说,有点儿难。
|