环境:win10+ubuntu16.04
开发板:DE1(cyclone V)
1.问题描述
DS-5软件中尝试使用ssh连接,结果出现一大堆问题。
链接:DS-5交叉编译linux程序并在线调试
执行
sudo apt-get install gdbserver
报错sudo: command not found。
后来了解到Altera系列的板子,例如DE10-Nano,DE0都不可以sudo。
参考以下链接都不太能解决问题,因此重新装一下开发板里面的gdbserver
链接:执行sudo命令时command not found的解决办法
sudo service: command not found 报错的解决方法
解决Linux下无法使用sudo命令问题
2.重新安装
2.1 下载GDB
下载链接 https://ftp.gnu.org/gnu/gdb/
我下载的是10.2版本,可以根据需求下载不同版本,注意要下载后缀名为.tar.gz的文件。
2.2 虚拟机内解压安装生成可执行文件
下载后放到虚拟机的某个文件夹里,然后解压
tar -zxvf gdb-10.2.tar.gz
解压好之后编译
./configure --target=arm-linux --prefix=/opt/FriendlyARM/toolschain/4.5.1/ -v
注意等号左右没有空格,linux后面有个空格。target指明,编译生成的GDB用于调试ARM-LINUX程序,prefix指明安装目录,可以自行更改
接着安装
make
sudo make install
make之后可能要等一段时间
成功的标志是在安装目录下面看到可执行文件arm-linux-gdb arm-linux-run
2.3虚拟机上生成开发板上所需要的gdbserver文件
再次进入解压好的gdb-10.2文件,进入/gdbserver,执行文件
cd gdb/gdbserver
./configure --target=arm-linux --host=arm-linux --prefix=/opt/FriendlyARM/toolschain/4.5.1/
执行之后make
make CC=arm=linux-gcc
make install
make之后一个可能出现的bug:
一个可行的解决方案
在linux-arm-low.cc的头文件中添加几个:
#ifndef __NR_sigreturn
#include <asm/unistd.h>
#endif
注意,由于ubuntu版本的不同,此时的头文件地址可能不在asm文件夹下,需要自己在跟文件目录下寻找一波,笔者的系统版本为16.04,unistd.h头文件在/usr/include/asm-generic下。
如下图所示:
改动:cc文件893行:__NR_sigreturn
make之后,在/opt/FrirendARM/toolschain/4.5.1/bin(或者你自己的安装路径中),可以看到已经安装好文件arm-linux-gdbserver
将生成的arm-linux-gdbserver文件拷贝到开发板linux的文件系统的bin文件夹中。
2.4 arm-linux-gdbserver文件拷贝到开发板
首先声明:实验室的开发板型号是DE1,由于ARM官网给的几个BSP资源几乎都不能用(PUTTY连接,没有办法输指令)
ARM下载资源:Index of /downloads/cd-rom/de1-soc/linux_BSP/
所以我用了实验室师兄给的BSP:
链接:提取码:lily
弄好启动卡之后,把刚才生成的gdbserver拷贝到SD卡上,结果发现没有办法拷贝到bin文件夹中,查阅资料发现:
烧制之后的内存卡(我的内存卡有128GB)被分成了三个分区:
①用户区,我的只剩下817MB了,也就是内存卡直接插PC机所显示的内存;
②Linux系统的文件系统盘,Windows下面看不见;
③小分区,做Preloader和U-Boot,Windows下面也看不见。
后面再学习一下如何跨区进行文件传输,之后就可以使用gdbserver进行交叉编译了。