Jetson-TX1(ubuntu18.04)软件安装、使用

Jetson pack 4.6.2 ubuntu18.04

1、安装nomachine:下载地址

解决: 在 nomachine 中打开终端,输入以下命令:

xrandr --fb 1920x1080

最后一定要关掉 nomachine 客户端,重新连接上 Jetson-TX1。不然鼠标会有偏移。

window主机使用nomachine软件实现远程桌面连接TX1

由于远程终端未连接显示器所以桌面分辨率非常低只有640*480

解决办法:
在远程终端中执行
xrandr --fb 1920x1080

或者 xrandr --fb 1080x768
此时画面已经正常但是鼠标指针位置出现了偏移,因为默认的分辨率还没有改过来

只需要断开重新连接远程桌面即可。

想要重启之后永久生效,修改 /etc/profile文件

sudo gedit /etc/profile

末尾加上

xrandr --fb 1920x1080

保存

2、ffplay播放MP4

ffplay XXX.mp4

出现如下问题:

dbus[9623]: arguments to dbus_message_new_method_call() were incorrect, assertion "path != NULL" failed in file ../../../dbus/dbus-message.c line 1362.
This is normally a bug in some application using the D-Bus library.

  D-Bus not built with -rdynamic so unable to print a backtrace
Aborted (core dumped)

解决方法:

sudo dbus-uuidgen > /var/lib/dbus/machine-id

指令如果提示权限受限,可以cd到目录备份文件,vim修改

nvidia@nvidia-desktop:~$ sudo dbus-uuidgen > /var/lib/dbus/machine-id
-bash: /var/lib/dbus/machine-id: Permission denied
nvidia@nvidia-desktop:~$ dbus-uuidgen
8a****8f06743c****00cdb6321****
nvidia@nvidia-desktop:~$ cd /var/lib/dbus/
nvidia@nvidia-desktop:/var/lib/dbus$ ls
machine-id
nvidia@nvidia-desktop:/var/lib/dbus$ cat machine-id 
a3**197b7****3568af0****bd3e****
nvidia@nvidia-desktop:/var/lib/dbus$ sudo cp machine-id  machine-id_back
[sudo] password for nvidia: 
nvidia@nvidia-desktop:/var/lib/dbus$ sudo dbus-uuidgen > /var/lib/dbus/machine-id
-bash: /var/lib/dbus/machine-id: Permission denied
nvidia@nvidia-desktop:/var/lib/dbus$ sudo vim machine-id

3.查找文件

  1. whereis+文件名
    用于程序名的搜索,搜索结果只限于二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息。
  2. find / -name +文件名
    find是在指定的目录下遍历查找,如果目录使用 / 则表示在所有目录下查找,find方式查找文件消耗资源比较大,速度也慢一点。
  3. locate+文件名
    linux会把系统内所有的文件都记录在一个数据库文件中,使用locate+文件名的方法会在linux系统维护的这个数据库中去查找目标,相比find命令去遍历磁盘查找的方式,效率会高很多,比较推荐使用这种方法。
    运行 sudo apt-get install mlocate和sudo updatedb
  4. which+可执行文件名
    which的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
    使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
    which指令会在环境变量$PATH设置的目录里查找符合条件的文件,所以基本的功能是寻找可执行文件
  5. grep
    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。通过使用find与grep使我们能够更好地找到文件中的关键字。

4.安装FFmpeg

第一,apt安装ffmpeg,简单明了

源码方式安装ffmpeg,麻烦,还要手动下载安装。。

开门见山,三行命令。

第一步:添加源。

sudo add-apt-repository ppa:djcj/hybrid

第二步:更新源。

sudo apt-get update

第三步:下载安装。

sudo apt-get install ffmpeg

如上,就安装好了,打完收工~~~

第二,源码安装ffmpeg,深入了解

1.下载源码:git clone git://source.ffmpeg.org/ffmpeg.git

2.生成配置:./configure --enable-shared --prefix=/home/dong/ffmpeg/ffmpeg/build/ --disable-x86asm

旧版本可以使用–disable-yasm禁用汇编语言,新版本支持enable-x86asm / --disable-x86asm instead.启用/禁用汇编加速

注意:WARNING: The --disable-yasm option is only provided for compatibility and will be removed in the future. Use --enable-x86asm / --disable-x86asm instead.启用/禁用汇编加速

  1. make && make install

4 版本查询

/home/dong/ffmpeg/ffmpeg/build/lib/pkgconfig目录下保存每个模块的版本号

libavcodec.pc libavdevice.pc libavfilter.pc libavformat.pc libavutil.pc libswresample.pc libswscale.pc

pkg-config libavdevice --modversion

查询的是当前系统目录下libavdevice的版本号,默认是从/usr/lib/pkgconfig, /usr/local/lib/pkgconfig,/usr/share/pkgconfig/开始查询libavdevice.pc,

如果需要优先找到源码编译的版本号,需要进行如下的设置

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig;$PKG_CONFIG_PATH

5 各个版本下载网址

http://ffmpeg.org/releases/

6 添加额外库

1、yasm(libx264需要依赖yasm)

  sudo apt-get install yasm

2、libx264

  sudo apt-get install libx264-dev

3、libfaac

  sudo apt-get install libfaac-dev

4、libmp3lame

  sudo apt-get install libmp3lame-dev

5、libtheora

  sudo apt-get install libtheora-dev

6、libvorbis

  sudo apt-get install libvorbis-dev

7、libxvid

  sudo apt-get install libxvidcore-dev

8、libxext

  sudo apt-get install libxext-dev

9、libxfixes

  sudo apt-get install libxfixes-dev

./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis

5.清楚Vmware虚拟机的缓存

由于预览了太多压缩的项目,发现硬盘空间大幅缩水,定位到缓存文件在/home/.cache目录下,
以" ."开头的文件夹就是你打开过的压缩文件缓存,清理即可
du --max-depth=1 -h .cache/

du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][–block-size][–exclude=<目录或文件>] [–max-depth=<目录层数>][–help][–version][目录或文件]
常用参数:
-a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或–total 除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或–dereference-args 显示指定符号连接的源文件大小。
-h或–human-readable 以K,M,G为单位,提高信息的可读性。
-H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
-k或–kilobytes 以1024 bytes为单位。
-l或–count-links 重复计算硬件连接的文件。
-L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或–megabytes 以1MB为单位。
-s或–summarize 仅显示总计,即当前目录的大小。
-S或–separate-dirs 显示每个目录的大小时,并不含其子目录的大小。
-x或–one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或–exclude-from=<文件> 在<文件>指定目录或文件。
–exclude=<目录或文件> 略过指定的目录或文件。
–max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
–help 显示帮助。
–version 显示版本信息。
1> 要显示一个目录树及其每个子树的磁盘使用情况
du /home/linux
这在/home/linux目录及其每个子目录中显示了磁盘块数。

2> 要通过以1024字节为单位显示一个目录树及其每个子树的磁盘使用情况
du -k /home/linux
这在/home/linux目录及其每个子目录中显示了 1024 字节磁盘块数。

3> 以MB为单位显示一个目录树及其每个子树的磁盘使用情况
du -m /home/linux
这在/home/linux目录及其每个子目录中显示了 MB 磁盘块数。

4> 以GB为单位显示一个目录树及其每个子树的磁盘使用情况
du -g /home/linux
这在/home/linux目录及其每个子目录中显示了 GB 磁盘块数。

5>查看当前目录下所有目录以及子目录的大小:
du -h .
“.”代表当前目录下。也可以换成一个明确的路径
-h表示用K、M、G的人性化形式显示

6>查看当前目录下user目录的大小,并不想看其他目录以及其子目录:
du -sh user
-s表示总结的意思,即只列出一个总结的值
du -h --max-depth=0 user
–max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。

7>列出user目录及其子目录下所有目录和文件的大小:
du -ah user
-a表示包括目录和文件

8>列出当前目录中的目录名不包括xyz字符串的目录的大小:
du -h --exclude=‘xyz

9>想在一个屏幕下列出更多的关于user目录及子目录大小的信息:
du -0h user
-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。

10>只显示一个目录树的全部磁盘使用情况
du -s /home/linux
11>查看各文件夹大小:du -h --max-depth=1
查看指定目录:
代码如下: 其中 /path表示路径
du -h --max-depth=1 /path

6.华为镜像源

https://mirrors.huaweicloud.com/home

7.固定eth0的IP

Desktop固定IP配置

对于官方发布的Ubuntu18.04镜像,配置网卡的固定IP需要用到netplan工具,相关的配置文件位于/etc/netplan/01-network-manager-all.yaml。执行如下命令添加指定网卡配置信息到配置文件:

sudo vi /etc/netplan/01-network-manager-all.yaml

例如我们要对网卡eno1进行配置,则在配置文件中键入以下内容:

# Let NetworkManager manage all devices on this system
network:
  ethernets:
    eno1:
      addresses: [192.168.1.101/24, ]
      dhcp4: no
      dhcp6: no
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 9.9.9.9]
  version: 2
  renderer: NetworkManager

完成编辑后保存,执行命令netplan apply使配置立即生效。dhcp4与dhcp6的选项均设置为no,以避免使用DHCP进行自动IP分配。

Jetson设备固定IP配置

NVIDIA为Jetson设备提供的Ubuntu18.04镜像不包含netplan工具,对网络进行IP配置的具体过程为:在/etc/network/interfaces.d/文件夹下创建网卡配置文件。例如我们要对网卡eth0进行配置,则创建配置文件eth0,在文件中键入如下配置信息:

auto eth0
iface eth0 inet static
address 192.168.1.101
netmask 255.255.255.0
gateway 192.168.1.1

接着在/etc/network/interfaces文件中追加如下一行命令:

source interfaces.d/eth0

重启Jetson设备后,网卡eth0的固定IP配置将生效。

https://blog.csdn.net/hlld__/article/details/115446974

8.命令行使用wifi

查看是否已经正确安装无线网卡

iwconfig

在这里插入图片描述

sudo apt update
sudo apt install network-manager
sudo service NetworkManager start

#扫描wifi
sudo iw dev wlan0 scan | grep SSID

在这里插入图片描述

#连接wifi
sudo nmcli device wifi connect 'SSID' password 'PASSWORD'

连接wifi后系统会保存连接,下次会自动连接,你只要删除/etc/NetworkManager/system-connections目录里的连接文件,就相当于桌面版的删除wifi连接记录
在这里插入图片描述

#开启WiFi 相当于桌面版的 Enable wifi
$ sudo nmcli r wifi on
#扫描附近的 WiFi 热点
$ sudo nmcli dev wifi
#连接到指定的 WiFi 热点
$ sudo nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0
#关闭 wifi
$ sudo nmcli r wifi off

在这里插入图片描述
在这里插入图片描述关闭wifi连接,相当于断开来连接

9.ubuntu 18.04开机自启脚本

打开rc-local.service文件
Ubuntu终端输入 sudo vim /lib/systemd/system/rc-local.service
修改文件内容

#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
GuessMainPID=no
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

创建rc.local文件(18.04版本没有rc.local文件,需要手动创建)
终端输入sudo touch /etc/rc.local
在rc.local文件里写入以下内容
先打开rc.local
终端输入sudo vim /etc/rc.local
在这里插入图片描述给rc.local文件添加可执行权限
终端输入sudo chmod +x /etc/rc.local

启用服务
终端输入 sudo systemctl enable rc-local 我没打错就是rc-local
启动服务
终端输入 sudo systemctl start rc-local.service
检查状态
终端输入 sudo systemctl status rc-local.service

注意:
1). #!/bin/sh -e (不要用#!bin/bash)
2). 自己需要启动的程序写在exit 0之前
3). 非后台程序需要在命令租后加上&,否则会失败
4). 路径用绝对路径,不要用~这种符号

sudo systemctl enable rc-local

该命令是将刚才的/lib/systemd/system/rc-local.service 内容生效,
会产生一个/etc/systemd/system/rc-local.service -> /lib/systemd/system/rc-local.service
sudo systemctl start rc-local
sudo systemctl status rc-local

非root权限自启
在这里插入图片描述【拓展】:

一、开机默认进入命令行模式
1、输入命令:sudo systemctl set-default multi-user.target

2、重启:reboot
要进入图形界面,只需要输入命令startx
从图形界面切换回命令行:ctrl+alt+F7(有的是F1)

二、开机默认进入图形用户界面
1、输入命令:sudo systemctl set-default graphical.target
2、 sudo vim /lib/systemd/system/getty@.service
将下面
ExecStart=-/sbin/agetty --noclear %I $TERM
改为
ExecStart=-/sbin/agetty -a (username) --noclear %I $TERM

#该步骤为命令行免密登录,若是不需要,可不用该步骤
3、重启:reboot
要进入命令行模式:ctrl+alt+F2
从命令行切换到图形界面:ctrl+alt+F7(有的是F1)

10.shell 中的| ||

1.| 和 ||
|:输入了如下指令:command0 | command1,则command0的输出流入到command1中
||:与&&的作用正好相反,是在执行到成功的指令时停止后续指令的执行。command0 || command1,如果command0执行成功,则command1不再执行。如果command0执行失败,则继续执行command1

2.& 和 &&
&:输入了如下指令:command0 &,则执行command0并使其进入后台。;
&&:输入了如下指令:command0 && command1,则先从command0开始执行。如果command0执行失败,则不再继续执行command1。如果执行command0执行成功,则继续执行command1。
所以,&&的作用是在执行到失败的指令时停止后续指令的执行。

“Exec exit status not zero” 说明进程没有正常结束,经过排除,问题锁定在:
ps -ef |grep tomcat-center |awk ‘{print $2}’|xargs kill -9 1>/dev/null 2>&1 | exit 0

分析:
ps -ef | grep tomcat-center 查询到的是两条记录(如下图):第一条是我们要查找并关闭的,第二条是查找进程自身。

当管道进行到kill的时候,两条进程一同被杀死,而Jenkins仍然在等待查找进程自身返回exit 0,事实上它永远等不到了,因为进程都没了,

最终会报异常"Exec exit status not zero"
解决:
使用“grep -v grep”排除掉它自身就可以
原来:ps -ef |grep tomcat-center |awk ‘{print $2}’|xargs kill -9
改后:ps -ef |grep tomcat-center | grep -v grep |awk ‘{print $2}’|xargs kill -9

11.TX2 can收发

0.测试之前最好先下载安装好测试工具can-utils

sudo apt-get install can-utils

1.加载can设备驱动

sudo modprobe can
sudo modprobe can_raw
sudo modprobe mttcan

2.设置波特率(注意这里不能使能can或者打开can)

sudo ip link set can0 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
sudo ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on

如果出现了RTNETLINK answers: Device or resource busy 这种情况,则需要使用命令关闭can

sudo ip link set down can0
sudo ip link set down can1

3.设置为回环模式(因为要测试使用,在不外接can驱动和120欧姆电阻的情况下是可以回环测试的,使用can0设备)

sudo ip link set can0 type can loopback on

如果由外设,可以省略此步骤。
4.开启can设备

sudo ip link set up can0
sudo ip link set up can1

5.发送和接收:
发送:

cansend can0 123#abcdabcd

cansend是命令,can0是参数,123是ID,#分隔符,abcdabcd是发送数据。
接收:接收需要另外开一个终端

candump can0

6.关闭can设备

sudo ip link set down can0
sudo ip link set down can1

两个c文件:1.can_send.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/can.h>
#include <linux/can/raw.h>
 
int main()
{
	int s,nbytes;
	struct sockaddr_can addr;
	struct ifreq ifr;
	struct can_frame frame[2]={{0}};
	s=socket(PF_CAN,SOCK_RAW,CAN_RAW);
	strcpy(ifr.ifr_name,"can0");
	ioctl(s,SIOCGIFINDEX,&ifr);
	addr.can_family = AF_CAN;
	addr.can_ifindex = ifr.ifr_ifindex;
	bind(s,(struct sockaddr*)&addr,sizeof(addr));
	setsockopt(s,SOL_CAN_RAW,CAN_RAW_FILTER,NULL,0);
	
	frame[0].can_id = 0x11;
	frame[0].can_dlc =1;
	frame[0].data[0]= 'Y';
	frame[1].can_id = 0x11;//0x33;
	frame[1].can_dlc =1;
	frame[1].data[0]= 'N';
	while(1)
	{
		nbytes = write(s, &frame[0], sizeof(frame[0]));
		printf("nbytes=%d\n",nbytes);
		if(nbytes != sizeof(frame[0]))
		{
			printf("Send Error frame[0]\n!");
			break; //发送错误,退出
		}
		sleep(1);
		nbytes = write(s, &frame[1], sizeof(frame[1]));
		if(nbytes != sizeof(frame[1]))
		{
			printf("Send Error frame[1]\n!");
			break;
		}
		sleep(1);
	}
	close(s);
	return 0;
}

2.can_receive.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/can.h>
#include <linux/can/raw.h>
int main()
{
	int s, nbytes;
	struct sockaddr_can addr;
	struct ifreq ifr;
	struct can_frame frame;
	struct can_filter rfilter[1];
	s = socket(PF_CAN, SOCK_RAW, CAN_RAW); //创建套接字
	strcpy(ifr.ifr_name, "can0" );
	ioctl(s, SIOCGIFINDEX, &ifr); //指定 can0 设备
	addr.can_family = AF_CAN;
	addr.can_ifindex = ifr.ifr_ifindex;
	bind(s, (struct sockaddr *)&addr, sizeof(addr)); //将套接字与 can0 绑定
	//定义接收规则,只接收表示符等于 0x11 的报文
	rfilter[0].can_id = 0x11;
	rfilter[0].can_mask = CAN_SFF_MASK;
	//设置过滤规则
	setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
	while(1)
	{
		nbytes = read(s, &frame, sizeof(frame));
		//接收报文//显示报文
		if(nbytes > 0)
		{
			printf("ID=0x%X DLC=%d data[0]=0x%X\n",frame.can_id,frame.can_dlc,frame.data[0]);
		//printf(“ID=0x%X DLC=%d data[0]=0x%X\n”, frame.can_id,	frame.can_dlc, frame.data[0]);
		}
	}
	close(s);
	return 0;
}

参考

https://blog.csdn.net/weixin_41579872/article/details/119426097
https://blog.csdn.net/hhlenergystory/article/details/81976069
https://blog.csdn.net/ppdyhappy/article/details/79458458

12.一键安装ROS

鱼香ROS
wget http://fishros.com/install -O fishros && . fishros

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值