JETSON 平台驱动开发手册
以NX-devkit-R32.4.3为例
- 开发环境搭建
本章节主要介绍如何烧录设备,编译代码。
-
- 介绍用到的文件
- gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
交叉编译工具
- public_sources.tbz2
源码:解压后可以得到kenel内核代码以及hardware设备树文件和.sh编译脚本
(暂时没有使用nvidia的脚步编译,下面会提到现在用的编译方法)
- Tegra_Linux_Sample-Root-Filesystem_R32.4.3_aarch64.tbz2
和Tegra186_Linux_R32.4.3_aarch64.tbz2
文件系统和刷机包
- sdkmanager_1.2.0-6733_amd64.deb
Nvidia的刷机工具
-
- 刷机
刷机时需要连接usb线并进入recover模式,按住recover键并按一下reset键就能进入该模式。
-
-
- 通过sdkmanager进行刷机
-
在终端输入命令“sudo dpkg -i sdkmanager_1.2.0-6733_amd64.deb”安装sdkmanager程序。输入完成后输入sdkmanager就能打开该程序。
输入nVidia官网注册的用户名和密码:
选择对应的硬件下载,下载完成后系统会自动刷机。完成刷机后你会在”Target HWimage folder”路径下生产“Linux_for_Tegra”文件夹(后面会用到,就是通过运行该文件下的flash.sh脚本进行刷机的,修改驱动和设备树后生产的文件,也是替换到这个文件夹的对应目录下)
-
-
- 通过文件系统和刷机包来刷机
-
参考这个quick_start_guide文档
-
-
- 源码编译
- 准备相关文件
-
把1.1章节中提到的编译工具和源码解压到工作目录中,(例如:可以在home目录下新建“NX-R32.4.3”的目录,在后面称其为root目录)
并在该目录下新建一个“out_kernel”的目录(用来存放编译生成的文件)
并且把这个.sh文件复制到root目录
-
-
- Git管理
-
Git管理有一下几个好处:
- 便于生产patch文件
- 便于在驱动开发过程中管理代码修改
- 由于编译代码时间较长,而且tx2、Xavier、NX等平台源码是通用的。用git管理后,如果要做新的驱动,直接回退到源码版本就可以了
Git命令:
- git init
- git config --global user.email email
- git config --global user.name “name”
- git add .
- git commit --signoff
- git format-patch -1
-
- 设置环境变量
-
打开终端,执行命令:source jetson.sh
注意:
-
-
- 要修改对应的路径:编译器的路径和kernel编译生成文件的路径
- 每次在新的终端编译时,要重新执行该命令
-
-
-
- 开始编译
-
在<root>/kernel/kernel-4.9的目录下执行以下命令
编译设备树: make O=$TEGRA_KERNEL_OUT dtbs
编译kernel: make O=$TEGRA_KERNEL_OUT zImage
make O=$TEGRA_KERNEL_OUT tegra_defconfig
make O=$TEGRA_KERNEL_OUT zImage
make O=$TEGRA_KERNEL_OUT dtbs
我们会用到的文件是
<root>/out_kernel/arch/arm64/boot/dts/tegra186…….dtb(不同平台是不同文件)
<root>/out_kernel/arch/arm64/boot/Image
-
-
- 烧录生成的文件到设备中
-
- dtb文件:
进入recover模式然后输入以下命令:(不同的设备需要修改参数)
sudo ./flash.sh -r -k kernel-dtb jetson-xavier-nx-devkit-emmc mmcblk0p1
(NX-devkit板子 “tegra194-p3668-all-p3509-0000.dtb”)
sudo ./flash.sh -r -k kernel-dtb jetson-xavier mmcblk0p1
(Xavier板子 “tegra194-p2888-0001-p2822-0000.dtb”)
sudo ./flash.sh -r -k kernel-dtb jetson-tx2 mmcblk0p1
(TX板子 “tegra186-quill-p3310-1000-c03-00-base.dtb”)
- Image文件:
Copy到机器的“/boot/“目录下,可以先用scp命令copy到机器的home目录,命令如下:(注意修改对应的ip和主机名)
scp Image nx@192.168.0.156:~/
-
- 如何单独编译.c 生产.ko文件
当你修改.c文件的时候,整个编译Image的时候比较花时间,而且有时候会开不了机,所以编译.ko的方式可以节省很多时间。
-
-
- 准备文件
-
建立一个driver_build的文件夹,把驱动.c 和 table.h和jetson.sh复制到文件夹里。
把Makefile文件也复制到文件夹内,注意修改驱动名字
-
-
- 编译
-
在终端内cd 到该文件夹内,执行make命令生成ko文件
可以通过scp命令或者mount命令把该文件夹放到设备上。
通过insmod命令加载该驱动
- 驱动开发
本章节主要介绍如何修改驱动和设备树
修改记录
- 如何使能mode selection(基于r32.4.3,太老的修改方式会不同)
在DTB里面添加如下code
use_sensor_mode_id = "true";
在dirver的ctrl_cid_list结构体添加