TX1-AUVIDEA-J130 刷驱动

资源下载:

下载auvidea-j130 L4T (linux for Tegra)源码:

https://github.com/InES-HPMM/linux-l4t/tree/hdmi2csi/l4t-r24-2.1-auvideaj130

JetPack 包:

https://developer.nvidia.com/embedded/dlc/jetpack-l4t-3_0

toolchain 交叉编译工具,包含aarch64-Linux-gnuarm-linux-gnueabihf两个编译器,在linaro官网可以下载:

https://www.linaro.org/downloads/

TX1-AUVIDEA-J130 刷驱动_第1张图片

在下面地址有历史版本的工具:

https://releases.linaro.org/components/toolchain/binaries/

这里下载了gcc-linaro-5.4.1-2017.05 版本,如下:

TX1-AUVIDEA-J130 刷驱动_第2张图片

v硬件准备:

1. 装有Ubuntu14.04 的64位系统的PC电脑(或虚拟机里安装)

2. Jetson TX1 嵌入板

3. micro-usb 主机和嵌入板子连接线

编译Jetson Tagra X1源码

1. 创建工作目录

在家目录下创建JetPack-L4T-3.0文件夹

mkdir -p /home/$USER/JetPack-L4T-3.0

并将下载的JetPack包移动到上面创建的目录里:

mv JetPack-L4T-3.0-linux-x64.run /home/$USER/JetPack-L4T-3.0/

设置 DEVDIR路径:

export DEVDIR=/home/$USER/JetPack-L4T-3.0

2. 利用JetPack包下载文件系统和操作系统及驱动

设置JetPack文件权限并保证能够执行:

cd /home/$USER/JetPack-L4T-3.0

chmod +x JetPack-L4T-3.0-linux-x64.run

安装 Jetpack,下载内核镜像和驱动,这一步不执行刷机

./JetPack-L4T-3.0-linux-x64.run

TX1-AUVIDEA-J130 刷驱动_第3张图片

下载完成后会在$DEVDIR目录下生成如下文件及文件夹(画红框部分)

TX1-AUVIDEA-J130 刷驱动_第4张图片

其中最重要的部分是在64_TX1/Linux_for_tegra_64_tx1下, 包括bootloader、kernel文件夹(kernel里的文件可以用已经预编译的文件替换,下面的操作过程主要就是编译新的kernel文件,也及适合J130的包含HDMI2CSI驱动的内核文件,并替换旧kernel文件,使系统有HDMI驱动)

TX1-AUVIDEA-J130 刷驱动_第5张图片

3. 准备auvidea-j130编译源码

解压适用于auvidea-j130的内核源码:

这里我的源码路径为:

/home/$USER/JetTX1/linux-l4t-hdmi2csi-l4t-r24-2.1-auvideaj130

设置源码路径:

export KERNEL_SOURCE=/home/$USER/JetTX1/linux-l4t-hdmi2csi-l4t-r24-2.1-auvideaj130

TX1-AUVIDEA-J130 刷驱动_第6张图片

4. 安装toolchain交叉编译工具

这里两个toolchain编译工具在/home/$USER/JetTX1 目录下(如上图),cd到/home/$USER/JetTX1目录,执行下面命令。

sudo mkdir /opt/linaro

sudo chmod -R 775 /opt/linaro

sudo chown -R $USER /opt/linaro

cp gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz /opt/linaro

cp gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz /opt/linaro

cd /opt/linaro/

tar -xf gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

tar -xf gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

 

5. 设置编译auvidea-j130的内核的编译环境(以下命令应都在一个终端下完成,如此可保证export 设置的路径及变量有效)

将目录切换到源码路径下:

cd $KERNEL_SOURCE

mkdir -p $DEVDIR/images/modules mkdir -p $DEVDIR/images/packages export CROSS_COMPILE=/opt/linaro/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux- gnu/bin/aarch64-linux-gnu- export CROSS32CC=/opt/linaro/gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc export KERNEL_MODULES_OUT=$DEVDIR/images/modules export ARCH=arm64

6. 清理内核和配置:

make mrproper

7. 配置内核编译条件:

make tegra21_defconfig(编译HDMI2CSI模块要使用 make tegra21_hdmi2csi_defconfig)

8. 编译内核(kernel)、设备树(device tree)和模块(modules)

make zImage

make dtbs

make modules (编译tc358840.ko,HDMI2CSI模块的驱动文件)

make modules_install INSTALL_MOD_PATH=$KERNEL_MODULES_OUT

TX1-AUVIDEA-J130 刷驱动_第7张图片

9. 将编译好的文件拷贝

拷贝image文件

cp arch/arm64/boot/Image arch/arm64/boot/zImage $DEVDIR/images/

TX1-AUVIDEA-J130 刷驱动_第8张图片

拷贝dtb文件

mkdir -p $DEVDIR/images/dtb

TX1-AUVIDEA-J130 刷驱动_第9张图片

cp arch/arm64/boot/dts/*.dtb $DEVDIR/images/dtb/

拷贝 设备树(Device Tree文件,DTC)

cp scripts/dtc/dtc $DEVDIR/images/dtc

TX1-AUVIDEA-J130 刷驱动_第10张图片

 

TX1-AUVIDEA-J130 刷驱动_第11张图片

10.创建 kernel_supplements.tbz2 文件,这个文件是Jetpack需要的

cd $DEVDIR/images/modules/lib/modules/

ls .

TX1-AUVIDEA-J130 刷驱动_第12张图片

定义模块(modules)文件夹的变量:

export KERNEL_MODULES_NAME=3.10.96

cd $DEVDIR/images/modules/lib/modules/$KERNEL_MODULES_NAME

压缩模块到kernel_supplements.tbz2 压缩包

cd $DEVDIR/images/modules/

tar -cjf kernel_supplements.tbz2 *

TX1-AUVIDEA-J130 刷驱动_第13张图片

移动 kernel_supplements.tbz2压缩包到 $DEVDIR/images/packages目录

mv kernel_supplements.tbz2 $DEVDIR/images/packages

 

TX1-AUVIDEA-J130 刷驱动_第14张图片

11. 创建kernel_headers.tbz2压缩包,这个也是Jetpack需要的。

cd $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel

目前当前目录下文件如下:

TX1-AUVIDEA-J130 刷驱动_第15张图片

解压原有kernel_headers.tbz2

tar -xf kernel_headers.tbz2

TX1-AUVIDEA-J130 刷驱动_第16张图片

压缩成kernel_headers_custom.tbz2文件

tar -cjf kernel_headers_custom.tbz2 linux-headers-$KERNEL_MODULES_NAME-tegra

TX1-AUVIDEA-J130 刷驱动_第17张图片

mv kernel_headers_custom.tbz2 $DEVDIR/images/packages

rm -rf linux-headers-$KERNEL_MODULES_NAME-tegra

12. 备份之前利用Jetpack下载的镜像和内核包

mkdir -p $DEVDIR/images/packages-backup

cp -rf $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/* $DEVDIR/images/packages-backup

TX1-AUVIDEA-J130 刷驱动_第18张图片

 

13. 将新的kernel文件覆盖原有文件,以Jetpack刷机

cd $DEVDIR/images

rm -rf $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/dtb

cp -rf Image zImage packages/kernel_supplements.tbz2 dtb/ dtc $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/

cp -rf packages/kernel_headers_custom.tbz2 $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/kernel_headers.tbz2

14. 运行apply_binaries.sh,生成镜像用于刷机

cd $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/

sudo ./apply_binaries.sh

执行成功如下:

TX1-AUVIDEA-J130 刷驱动_第19张图片

用Jetpack刷机

You can flash your image with Jetpack now instead of using the scripts directly, however this takes time (around 10min) because we will need jetpack generating the system.img again

1. Backup your system.img

cd $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/bootloader/

mv system.img.raw system.img $DEVDIR/images/packages-backup/(如果没有就不用删除)

 

2. Just run Jetpack as the first time that you install it:

 

cd $DEVDIR(~/JetPack-L4T-3.0)

./JetPack-L4T-2.1-linux-x64.run

 

TX1-AUVIDEA-J130 刷驱动_第20张图片

 

TX1-AUVIDEA-J130 刷驱动_第21张图片

 

TX1-AUVIDEA-J130 刷驱动_第22张图片

 

TX1-AUVIDEA-J130 刷驱动_第23张图片

 

TX1-AUVIDEA-J130 刷驱动_第24张图片

 

TX1-AUVIDEA-J130 刷驱动_第25张图片

 

TX1-AUVIDEA-J130 刷驱动_第26张图片

 

TX1-AUVIDEA-J130 刷驱动_第27张图片

 

TX1-AUVIDEA-J130 刷驱动_第28张图片

 

TX1-AUVIDEA-J130 刷驱动_第29张图片

 

TX1-AUVIDEA-J130 刷驱动_第30张图片

 

TX1-AUVIDEA-J130 刷驱动_第31张图片

 

TX1-AUVIDEA-J130 刷驱动_第32张图片

测试命令:

加载驱动:

sudo modprobe tc358840

捕捉1080p60 视频

gst-launch-1.0 v4l2src ! 'video/x-raw, width=1920, height=1080, framerate=60/1, format=UYVY' ! nvvidconv ! 'video/x-raw(memory:NVMM), width=1920, height=1080, framerate=60/1, format=I420' ! nvoverlaysink sync=false

TX1-AUVIDEA-J130 刷驱动_第33张图片

 

TX1-AUVIDEA-J130 刷驱动_第34张图片

 

错误集锦:

1. 解压时文件损坏

在make image时:

TX1-AUVIDEA-J130 刷驱动_第35张图片

在make zImage时:

在make modules时:

TX1-AUVIDEA-J130 刷驱动_第36张图片

 

参考:

1. https://github.com/InES-HPMM/linux-l4t/wiki/auvideaJ130

2. https://github.com/InES-HPMM/linux-l4t/wiki/customKernelCompilation

3. http://developer.ridgerun.com/wiki/index.php?title=Compiling_Tegra_X1_source_code

 

 

你可能感兴趣的:(TX1-AUVIDEA-J130 刷驱动)