Lichee RV 86 PANEL评测(3)——WSL单系统下搭建交叉编译链
<div class='showpostmsg'># Lichee RV 86 PANEL评测(3)——WSL单系统下搭建交叉编译链## 为什么要下载交叉编译工具?
PC机上的编译工具链为gcc、 ld、 objcopy、 objdump等,它们编译出来的程序在x86平台上运行。要编译出能在ARM平台上运行的程序,必须使用[交叉编译](https://so.csdn.net/so/search?q=交叉编译&spm=1001.2101.3001.7020)工具arm-linux-gcc、arm-linux-ld等。
嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备 好编译环境,而固件烧写则需要厂家提供专用烧写工具。
一个典型的嵌入式开发环境包括本地开发主机和目标硬件板:
- 本地开发主机作为编译服务器,需要提供linux操作环境,建立交叉编译环境,为软件开发提供 代码更新下载,代码交叉编译服务。
- 本地开发主机通过串口或USB与目标硬件板连接,可将编译后的镜像文件烧写到目标硬件板, 并调试系统或应用程序。
## 如何使用WSL来配置编译工具?
不知道为什么目前还没修好。
在Tina SDK中带有完整的编译工具链,在如下路径:
```shell
tina/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
```
但是可以先单独下载工具链嘛:
反正我Tina也没下载下来,不妨先用Debian来试一试。
单独下载编译工具链地址:
(http://netstorage.allwinnertech.com:5000/sharing/b8mBL1xWa)
下载后放到Linux环境中解压:
```shell
tar -zxvf riscv64-glibc-gcc-thead_20200702.tar.gz
```
但是问题来了,我该如何下载到我的**wsl**下呢??
很简单!很离谱!
你直接就可以在**linux**下访问**windos**的文件夹并且操作!
是不是很离谱!
在WSL下你可以看到windos下的每个盘符:
```shell
jszszzy@LAPTOP-74GAR8S9:~$ cd /mnt/
jszszzy@LAPTOP-74GAR8S9:/mnt$ ls
cdef
```
直接使用cp将压缩包拷贝过去。
```shell
jszszzy@LAPTOP-74GAR8S9:~/Lichee_RV/tools$ cp /mnt/d/Embedded/LicheeRV/tools/riscv64-linux-x86_64-20210329.tar.gz /home/jszszzy/Lichee_RV/tools
```
然后执行命令解压:
```shell
jszszzy@LAPTOP-74GAR8S9:~/Lichee_RV/tools$ tar -zxvf riscv64-linux-x86_64-20210329.tar.gz
```
然后就是漫长的解压过程,等待完成以后工具链就配置完成了。
## 如何使用WSL来编写代码?
首先我们先来写一个代码看看:
你当然可以在Windos下编写,编写完成以后送去WSL编译。
上文讲述了WSL可以直接访问Linux,那么Windos如何访WSL下的文件呢?
只需要一行命令即可:
```shell
explorer.exe .
```
直接就可以在windos的文件浏览器里操作WSL的文件。
让我们把编写好的文件复制过去。(这里只是演示一下,实际上我是在WSL下直接vim 复制过去的)
## 如何使用WSL来编译代码?
交叉编译是指在我们的PC机上编译可以在开发板上运行的可执行程序文件,因为是在上位机上编译,然后在不同体系结构的开发板上跑,所以叫交叉编译。
直接使用编译器生成编译文件即可:
```shell
jszszzy@LAPTOP-74GAR8S9:~/Lichee_RV/tools$ bin/riscv64-unknown-linux-gnu-gcc -o hello_word helloworld.c
```
这段命令的意思是使用*`riscv64-unknown-linux-gnu-gcc`*编译器 生成`hello_word`可执行文件。
生成完以后我就要考虑一个问题?如何把代码下载过去呢?
目前来看86 panel并不支持全志官方的ADB下载方式。
不过没关系,我们还有附赠的USB转接器
直接插上优盘:
**需要注意的是你U盘的文件系统需要Debian支持,这里我直接把他格式化成FAT32,100%支持!**
使用命令打开WSL编译下的目录:
```
jszszzy@LAPTOP-74GAR8S9:~/Lichee_RV/tools$ explorer.exe .
```
直接拖拽到U盘即可。
将U盘插入到**86PANEL**,需要挂载一下:
```shell
sipeed@sipeed:~$ sudo mount /dev/sda1/mnt/usb
EXT4-fs (sda1): mounting ext2 file system using the ext4 subsystem
EXT4-fs (sda1): mounted filesystem without journal. Opts: (null)
sipeed@sipeed:~$ sunxi-ehci 4200000.ehci1-controller: ehci_irq: highsped device disconnect
sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connec
usb 1-1: USB disconnect, device number 2
blk_update_request: I/O error, dev sda, sector 2056 op 0x1:(WRITE) flas 0x3000 phys_seg 4 prio class 0
Buffer I/O error on dev sda1, logical block 1, lost async page write
Buffer I/O error on dev sda1, logical block 2, lost async page write
Buffer I/O error on dev sda1, logical block 3, lost async page write
Buffer I/O error on dev sda1, logical block 4, lost async page write
sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconect
sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connec
usb 1-1: new high-speed USB device number 3 using sunxi-ehci
usb 1-1: device descriptor read/64, error -71
usb-storage 1-1:1.0: USB Mass Storage device detected
sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconect
scsi host1: usb-storage 1-1:1.0
usb 1-1: USB disconnect, device number 3
sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connec
usb 1-1: new high-speed USB device number 4 using sunxi-ehci
usb-storage 1-1:1.0: USB Mass Storage device detected
scsi host1: usb-storage 1-1:1.0
scsi 1:0:0:0: Direct-Access GenericSTORAGE DEVICE 0272 PQ: 0 ASI: 0
sd 1:0:0:0: 122138624 512-byte logical blocks: (62.5 GB/58.2 GiB
sd 1:0:0:0: Write Protect is off
sd 1:0:0:0: Mode Sense: 0b 00 00 08
sd 1:0:0:0: No Caching mode page found
sd 1:0:0:0: Assuming drive cache: write through
sdb: sdb1
sd 1:0:0:0: Attached SCSI removable disk
```
插入后会提示你盘符,这里需要手动挂载一下:
```shell
sipeed@sipeed:~$ sudo mount /dev/sdb1/mnt/usb
```
转到u盘目录可以看到我们编译的文件:
```
sipeed@sipeed:~$ cd /mnt/usb
sipeed@sipeed:/mnt/usb$ ls
hello_word'System Volume Information'
```
赋予执行权限:
```shell
sipeed@sipeed:/mnt/usb$ chmod +x hello_word
```
执行一下:
```shell
sipeed@sipeed:/mnt/usb$ ./hello_word
-bash: ./hello_word: No such file or directory
sipeed@sipeed:/mnt/usb$ ./hello_word
-bash: ./hello_word: No such file or directory
```
发现执行不了!!!??
```shell
sipeed@sipeed:/mnt/usb$ ls -a
. .. hello_word'System Volume Information'
```
发现确实存在啊。
使用ldd查看一下连接情况:
```shell
sipeed@sipeed:~$ ldd hello_word
linux-vdso.so.1 (0x0000003fd543c000)
libc.so.6 => /lib/riscv64-linux-gnu/libc.so.6 (0x0000003fd531e000)
/lib/ld-linux-riscv64xthead-lp64d.so.1 => /lib/ld-linux-riscv64-lp64d.so.1 (00000003fd543e000)
```
感觉连接没有问题,我现在还没有找到问题在哪里,没办法只能静态编译再来一次了。
```shell
jszszzy@LAPTOP-74GAR8S9:~/Lichee_RV/tools$ bin/riscv64-unknown-linux-gnu-gcc-o hello_statichelloworld.c -static
```
最后成功运行:
```shell
sipeed@sipeed:/mnt/usb$ ./hello_static
Hello NeZha
```
目前这个问题还没有解决希望大佬指导一下。</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]