都说边缘计算是下一次信息技术的变革,英伟达Jetson系列的产品将其推到一个新的高度,如何定制一款符合自己需要的高性能边缘计算单元,下面我们开启英伟达Jetson Nano系统移植第一步——内核编译。
技术指标
L4T 组件说明
每个模块的组件说明如下:
L4T 介绍
在ubuntu主机交叉编译L4T软件包
1.下载L4T源码
点击
https://developer.nvidia.com/embedded/dlc/r32-3-1_Release_v1.0/Sources/T210/public_sources.tbz2,
下载L4T Driver Package (BSP) Sources解压和提取内核目录
lhy@lhy-desktop:~/Downloads$ tar -xjf public_sources.tbz2
lhy@lhy-desktop:~/Downloads$ cd /Linux_for_Tegra/source/public
lhy@lhy-desktop:~/Downloads/Linux_for_Tegra/source/public$ tar -xjf kernel_src.tbz2
2.构建NVIDIA内核
l 安装预装软件
sudo apt install build-essential bc
安装L4T工具链
http://releases.linaro.org/components/toolchain/binaries/latest-7/
l 工具链包含以下组件:
- GCC版本:7.5.0
- Binutils版本:2.28
- Glibc版本:2.25
# 下载和解压工具链
wget http://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86-64_aarch64-linux-gnu.tar.xz
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86-64_aarch64-linux-gnu.tar.xz -C /opt
# 修改环境变量
vim ~/.bashrc
export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86-64_aarch64-linux-gnu/bin/:$PATH
source ~/.bashrc
导出相关环境变量
# 仅当前终端有效
export LOCALVERSION=-tegra
export CROSS_COMPILE=aarch64-linux-gnu-
其中export命令用来定义环境变量。上面的操作主要用来配置交叉编译环境。
创建.config 文件,配置你的内核,执行下面的命令。
cd kernel/kernel-4.9
make ARCH=arm64 tegra_defconfig
3. 编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
编译得到的内核为arch/arm64/boot/Image
4. 安装Linux_for_Tegra
烧录内核
1.下载L4T Driver Package (BSP)
l 点击
https://developer.nvidia.com/embedded/dlc/r32-3-1_Release_v1.0/t210ref_release_aarch64/Tegra210_Linux_R32.3.1_aarch64.tbz2
下载L4T Driver Package (BSP)
l 解压文件
lhy@lhy-desktop:~/Downloads$ sudo tar -xjf Tegra_Linux_Sample-Root-Filesystem_R32.2.1_aarch64.tbz2 -C Linux_for_Tegra/rootfs
lhy@lhy-desktop:~/Downloads$ cd Linux_for_Tegra/
lhy@lhy-desktop:~/Downloads/Linux_for_Tegra$ sudo ./apply_binaries.sh
2. 将BSP软件烧录到jetson nano module主板
使jetson nano module进入recovery模式,接上usb到ubuntu 主机
lsusb
Bus 001 Device 057: ID 0955:7f21 NVidia Corp.
根据board执行烧录命令
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
每一块板对应的配置文件
3. 覆盖L4T Driver Package (BSP) Sources编译结果
cd kernel/kernel-4.9/
# 内核
cp kernel/kernel-4.9/arch/arm64/boot/Image Linux_for_Tegra/kernel/Image
# 设备树
cp arch/arm64/boot/Image ../../../Linux_for_Tegra/kernel/Image
# 内核模块
sudo make ARCH=arm64 modules_install INSTALL_MOD_PATH=../../../Linux_for_Tegra/rootfs/
在Jetson Nano上直接编译内核
将public_sources.tbz2复制到nano板上并解压。
1.编译内核
$ cd ~/kernel/kernel-4.9
$ zcat /proc/config.gz > .config
# Prepare the kernel build
$ make prepare
$ make modules_prepare
# Compile kernel image and kernel modules
$ time make -j5 Image
$ time make -j5 modules
2.安装内核与内核模块
# Install modules and kernel image
$ sudo make modules_install
$ sudo cp arch/arm64/boot/Image /boot/Image