环境:win10+ubuntu16.04

开发板:DE1(cyclone V)

1.问题描述

    DS-5软件中尝试使用ssh连接,结果出现一大堆问题。

    链接:DS-5交叉编译linux程序并在线调试

    执行

sudo apt-get install gdbserver

   报错sudo: command not found。

sudo找不到命令怎么办 用sudo提示找不到命令_ubuntu

    后来了解到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

sudo找不到命令怎么办 用sudo提示找不到命令_开发板_02

 解压好之后编译

./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

sudo找不到命令怎么办 用sudo提示找不到命令_ubuntu_03

 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:

sudo找不到命令怎么办 用sudo提示找不到命令_开发板_04

 一个可行的解决方案

在linux-arm-low.cc的头文件中添加几个:

#ifndef  __NR_sigreturn
#include <asm/unistd.h>
#endif

注意,由于ubuntu版本的不同,此时的头文件地址可能不在asm文件夹下,需要自己在跟文件目录下寻找一波,笔者的系统版本为16.04,unistd.h头文件在/usr/include/asm-generic下。

sudo找不到命令怎么办 用sudo提示找不到命令_linux_05

如下图所示:

sudo找不到命令怎么办 用sudo提示找不到命令_linux_06

 改动:cc文件893行:__NR_sigreturn

make之后,在/opt/FrirendARM/toolschain/4.5.1/bin(或者你自己的安装路径中),可以看到已经安装好文件arm-linux-gdbserver

sudo找不到命令怎么办 用sudo提示找不到命令_sudo找不到命令怎么办_07

 将生成的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机所显示的内存;

sudo找不到命令怎么办 用sudo提示找不到命令_arm_08

    ②Linux系统的文件系统盘,Windows下面看不见;

    ③小分区,做Preloader和U-Boot,Windows下面也看不见。

    后面再学习一下如何跨区进行文件传输,之后就可以使用gdbserver进行交叉编译了。