TX1-AUVIDEA-J130 刷驱动

本文详细介绍了如何在Jetson TX1上编译带有HDMI2CSI驱动的内核,包括准备工作、下载资源、设置环境、编译步骤及常见错误处理。从创建目录到使用JetPack包,再到编译定制内核,每一步都进行了详尽的说明。

资源下载:

下载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/

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

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

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

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

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

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

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

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

9. 将编译好的文件拷贝

拷贝image文件

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

拷贝dtb文件

mkdir -p $DEVDIR/images/dtb

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

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

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

 

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

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

ls .

定义模块(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 *

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

mv kernel_supplements.tbz2 $DEVDIR/images/packages

 

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

cd $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel

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

解压原有kernel_headers.tbz2

tar -xf kernel_headers.tbz2

压缩成kernel_headers_custom.tbz2文件

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

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

 

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

执行成功如下:

用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

 

 

 

 

 

 

 

 

 

 

 

 

 

测试命令:

加载驱动:

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

 

 

错误集锦:

1. 解压时文件损坏

在make image时:

在make zImage时:

在make modules时:

 

参考:

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

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Challovactor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值