Jetson TK1 介绍与配置

烧系统

手动方法

参考官方指南,并且优先选择 Grinch Kernel,因为带了很多驱动。

21.2 版本的网络驱动有问题, Grinch Kernel 页面有介绍怎么搞,但是不是最优方案,复杂的解决方案看这里

注意在烧写的那一步,为了用完板子的 16G 空间,用以下命令:

1
$ sudo ./flash.sh -S 14580MiB jetson-tk1 mmcblk0p1

利用官方 JetPack 工具

官方 JetPack 会自动下载内核、文件系统、cv4Tegra、CUDA 以及一些测评工具,一步步配置并在最后推送到板子上,比较简单。

缺点是看不出来怎么复用原来做好的系统,似乎每烧一块版都要解压一次文件系统并配置。而且这个工具比较新,非常不稳定。

配置

优先参考elinux wiki,然后

  • 添加 MIT 的源

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    deb http://mirrors.mit.edu/ubuntu-port/ trusty main restricted universe multiverse
    deb http://mirrors.mit.edu/ubuntu-port/ trusty-security main restricted universe multiverse
    deb http://mirrors.mit.edu/ubuntu-port/ trusty-updates main restricted universe multiverse
    deb http://mirrors.mit.edu/ubuntu-port/ trusty-proposed main restricted universe multiverse
    deb http://mirrors.mit.edu/ubuntu-port/ trusty-backports main restricted universe multiverse
    deb-src http://mirrors.mit.edu/ubuntu-port/ trusty main restricted universe multiverse
    deb-src http://mirrors.mit.edu/ubuntu-port/ trusty-security main restricted universe multiverse
    deb-src http://mirrors.mit.edu/ubuntu-port/ trusty-updates main restricted universe multiverse
    deb-src http://mirrors.mit.edu/ubuntu-port/ trusty-proposed main restricted universe multiverse
    deb-src http://mirrors.mit.edu/ubuntu-port/ trusty-backports main restricted universe multiverse
  • 利用 apt-fast 加速升级

1
2
3
sudo add-apt-repository ppa:saiarcot895/myppa
sudo apt-get update
sudo apt-get install apt-fast
1
echo "alias apt-get='apt-fast'" >> ~/.bashrc
  • 自动补全

    1
    2
    3
    $ sudo apt-add-repository universe
    $ sudo apt-get update
    $ sudo apt-get install bash-completion command-not-found
  • 安装 x11vnc

  • 调时区并更新时间

    1
    2
    3
    4
    5
    $ sudo dpkg-reconfigure tzdata

    $ sudo service ntp stop
    $ sudo ntpdate pool.ntp.org
    $ sudo service ntp start
  • 卸载不必要的东西

    1
    2
    3
    4
    $ sudo apt-get remove aisleriot gnome-mines gnome-sudoku gnome-mahjongg
    $ sudo apt-get remove deja-dup unity-lens-photos unity-lens-video unity-lens-friends unity-lens-video unity-lens-music unity-webapps-common unity-scope-audacious rhythmbox totem
    $ sudo apt-get remove simple-scan empathy transmission-common transmission-gtk brasero
    $ sudo apt-get autoremove

  • 完善语言安装

  • 安装编译环境

    1
    2
    $ sudo apt-get install build-essentials
    $ sudo apt-get install libncurses5-dev

  • 添加用户组

    1
    2
    3
    $ sudo usermod -a -G video $USER
    $ sudo usermod -a -G dialout $USER
    $ sudo usermod -a -G plugdev $USER
  • 安装 cudaopencv4tegra

还需要到 cuda 安装页面 看看怎么添加路径。

卸载方式也需要参考以上地址。

  • ssh 免密码登录

修改 .ssh/authorized_keys 添加内容,内容来自主机的 .ssh/id_rsa.pub

系统调优

  • cpu 频率
    check /var/log/boot.log for booting messages and use dmesg to show kernel messages

    1
    $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
  • disable ondemand

    1
    $ sudo update-rc.d ondemand disable
  • install cpufrequtils

    1
    $ sudo gedit /etc/init.d/cpufrequtils

增加 swapfile

ROS 里常常有一些包,需要很大的编译空间。TK1 默认的 2G 内存完全不够,需要手动添加 swap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
#NVIDIA Jetson TK1
#Create a swapfile for Ubuntu at the current directory location
fallocate -l 4G swapfile
#List out the file
ls -lh swapfile
# Change permissions so that only root can use it
chmod 600 swapfile
#List out the file
ls -lh swapfile
#Set up the Linux swap area
mkswap swapfile
#Now start using the swapfile
swapon swapfile
#Show that it's now being used
swapon -s

以上脚本会在执行的地方搞出一个 4G 的 swap 空间,执行完以后,系统空间就少了 4G。

开机自动挂载这个空间,需要修改 fstab。

1
$ sudo gedit /etc/fstab
1
/media/swapfile none swap sw 0 0

如果想要重新调整 swap 大小,切换到 swap 所在的目录,然后

1
2
3
4
dd if=/dev/zero of=swapfile bs=1M count=2048 # 调成 2G
chmod 600 /swapfile # only root has permission
mkswap /swapfile # format it to swap
swapon /swapfile # activate

编译内核

在 host 机上编译内核

e-con 公司有一页教程,很详细地讲了怎么在 host 机上编译内核、开启 USB3.0, fastboot 与 uboot 的不同配置之类的问题,很值得一看。

串口驱动

一个串口设备接上的时候,可以通过 lsusb 查看设备使用的芯片,比如说这样子

1
2
ubuntu@tegra-ubuntu:~$ lsusb
Bus 002 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

可是 TK1 的内核默认没有开启支持

1
2
3
ubuntu@tegra-ubuntu:~$ zcat /proc/config.gz | grep FTDI
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_FTDI_ELAN is not set

解决方案:

  • 下载内核源代码,假设解压到 ~/kernel 文件夹

  • 将当前内核配置复制到源码文件夹里

    1
    zcat /proc/config.gz > ~/kernel/.config
  • 启动 menuconfig 工具配置内核

    1
    2
    sudo apt-get install ncurses-bin libncurses5-dev
    make menuconfig
  • 进入 Device Drivers -> USB Support -> USB Serial Converter Support,将 USB FTDI Single Port Serial Driver 标记为 M,保存并退出

  • 确认驱动已设置为模块编译

    1
    2
    3
    ubuntu@tegra-ubuntu:~/kernel$ cat .config | grep FTDI
    CONFIG_USB_SERIAL_FTDI_SIO=m
    # CONFIG_USB_FTDI_ELAN is not set
  • 编译内核(只针对串口驱动部分)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    make prepare
    make modules_prepare

    make M=drivers/usb/serial/
    Building modules, stage 2.
    MODPOST 2 modules
    CC drivers/usb/serial/baseband_usb_chr.mod.o
    LD [M] drivers/usb/serial/baseband_usb_chr.ko
    CC drivers/usb/serial/ftdi_sio.mod.o
    LD [M] drivers/usb/serial/ftdi_sio.ko

  • 安装编译好的模块

    1
    2
    sudo cp drivers/usb/serial/ftdi_sio.ko /lib/modules/$(uname -r)/kernel
    sudo depmod -a

这块可能有问题,因为貌似每次都要 insmod ftdi_sio.ko 才能用

  • 确认驱动正确安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ubuntu@tegra-ubuntu:~/kernel$ dmesg | grep usb
[ 57.385970] usb 2-1.5: new full-speed USB device number 5 using tegra-ehci
[ 57.407931] usb 2-1.5: New USB device found, idVendor=0403, idProduct=6001
[ 57.407950] usb 2-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 57.407964] usb 2-1.5: Product: FT232R USB UART
[ 57.407976] usb 2-1.5: Manufacturer: FTDI
[ 57.407987] usb 2-1.5: SerialNumber: A601NG2B
[ 57.479238] ftdi_sio: version magic '3.10.24 SMP preempt mod_unload ARMv7 p2v8 ' should be '3.10.24-gf455cd4 SMP preempt mod_unload ARMv7 p2v8 '
[ 57.504885] usbcore: registered new interface driver ftdi_sio
[ 57.507384] usbserial: USB Serial support registered for FTDI USB Serial Device
[ 57.508073] ftdi_sio 2-1.5:1.0: FTDI USB Serial Device converter detected
[ 57.508917] usb 2-1.5: Detected FT232RL
[ 57.508934] usb 2-1.5: Number of endpoints 2
[ 57.508948] usb 2-1.5: Endpoint 1 MaxPacketSize 64
[ 57.508960] usb 2-1.5: Endpoint 2 MaxPacketSize 64
[ 57.508971] usb 2-1.5: Setting MaxPacketSize 64
[ 57.511143] usb 2-1.5: FTDI USB Serial Device converter now attached to ttyUSB0

SPI 使用

SPI 能够实现 25MHz 的传输频率,但是默认并不开启,有大神详细地写了配置及使用方法。

挂载 USB 技巧

USB 挂载以后的序列号经常变,比如说原来是 /dev/ttyUSB0,下一次可能是 /dev/ttyUSB1,所以可以考虑用设备号挂载,比如说 /dev/serial/by-id/FTDI_XXX

ROS

ROS Wiki 上有针对 TK1 的页面,目前还不完善,可以跟踪。

安装 OpenCV

Till Nov.24th, OpenCV4Tegra is totally a piece of shit.

  • deb install cv-bridge
    ros-indigo-cv-bridge
  • modified line 112 of /opt/ros/indigo/share/cv_bridge/cv_bridgeConfig.cmake
  1. since cv4tegra does not contain libopencv_ocl
  2. the default route of cv4tegra is not armhf*

workaround

IMU

some more usefully tricks

  • show the content of a pkg

    1
    $ dpkg -L ***
  • hold a pkg

    1
    $ sudo apt-mark hold/unhold ***
  • download a deb

    1
    $ apt-get download ***
  • install a pkg no matter how

    1
    $ sudo dpkg --force-all -i ***