Jetson pack 4.6.2 ubuntu18.04
解决: 在 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
保存
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
第一,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.启用/禁用汇编加速
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
由于预览了太多压缩的项目,发现硬盘空间大幅缩水,定位到缓存文件在/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
https://mirrors.huaweicloud.com/home
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
查看是否已经正确安装无线网卡
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
打开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
一、开机默认进入命令行模式
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/[email protected]
将下面
ExecStart=-/sbin/agetty --noclear %I $TERM
改为
ExecStart=-/sbin/agetty -a (username) --noclear %I $TERM
#该步骤为命令行免密登录,若是不需要,可不用该步骤
3、重启:reboot
要进入命令行模式:ctrl+alt+F2
从命令行切换到图形界面:ctrl+alt+F7(有的是F1)
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
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
#include
#include
#include
#include
#include
#include
#include
#include
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
#include
#include
#include
#include
#include
#include
#include
#include
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
鱼香ROS
wget http://fishros.com/install -O fishros && . fishros