赞
踩
资源下载:
下载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-gnu和arm-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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。