Jetson nano编译第一个驱动程序,挂载并运行


这篇文章主要记录自己在嵌入式Linux学习过程中的收获,以方便后续自己查看,这次记录的内容是我使用nano板加载了自己的第一个驱动程序,并且测试成功!下面是具体的步骤。

1. 交叉编译编译内核源码

什么是交叉编译?

所谓的交叉编译指的就是在一个CPU架构平台上,编译出另外一个CPU架构平台上可以执行的程序。交叉编译的好处在于可以提高内核源码编译的速度,交叉编译的原因在于嵌入式平台在设计过程中的性能和内存等硬件资源并没有特别好,因此需要使用性能更好的平台完成编译的任务,同时交叉编译使得我们不需要花时间将各种支持包移植到目标板上。

编写驱动,为啥要编译内核源码?

因为在设备驱动中,需要引用内核源码编译后的文件,因此需要先编译内核源码。

具体步骤:

1. 1 下载Jetson nano的源码包和交叉编译器

3231版本链接.
在这里插入图片描述
在这里插入图片描述
最后可以得到下面两个文件,对下面两个文件tar解压。
在这里插入图片描述

1.2 配置交叉编译环境

export PATH=/opt/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/:$PATH
source ~/.bashrc
export LOCALVERSION=-tegra
export CROSS_COMPILE=aarch64-linux-gnu-

官方文档
在这里插入图片描述

1.3 编译内核源码

  1. 首先要到源码的目录当中:
/home/shaokun/Jetson/Linux_for_Tegra/source/public/kernel/kernel-4.9
  1. 配置.config文件
sudo  make ARCH=arm64 O=$TKOUT tegra_deconfig (tegra_deconfig不同的平台不一样,ARCH=arm64代表的就是目标平台是ARM64位的硬件平台)
  1. 编译内核
sudo make ARCH=arm64 O=$TKOUT -j4(j后面代表当前编译平台上CPU的数量)
  1. 等待十几分钟即可编译完成

此过程不仅会将内核编译完成,还会将设备树,设备驱动程序的都编译完成。

2. 装载/烧录编译好的文件

2.1 EMMC烧录

有一种emmc的烧录,思路就是通过跳线将nano板进入工厂模式,通过usb线,注意这个usb线质量要好,执行脚本就可以烧录了,详情参考:
https://blog.csdn.net/ldl371122/article/details/120860054?spm=1001.2014.3001.5502

2.2 装载内核到现有系统

装载就是将编译好的内核、设备树、模块与nano板正在使用的进行替换;

cp Image放入/boot中
cp 设备树dtb也放入/boot中
cp lib/modules 放入/lib中
Sync

重启系统即可发现系统正在使用最新编译成功后的内核,官方文档如下。
在这里插入图片描述

3. 交叉编译驱动程序

在Ubtudu计算机中输入: make ARCH=arm64,即可编译驱动程序,使用makefile文件中的指令,调用内核源码,最后生成驱动程序.ko的文件,同时可以在makefile中对上层应用的程序进行编译,生成可以执行的应用程序。

4. 装载设备驱动

Install xxx.ko进行装载设备驱动
装载完成之后,可以使用lsmod列出已经装载的设备驱动;

5. 上层应用调用驱动程序

./hello_drv_test

在这里插入图片描述
-w代表写入,后面跟写入的内容,-r代表读取

中间小插曲

执行 ./hello_drv_test 指令时显示没有找到,显示:command not found刚开始以为是环境变量的问题,搞了搞环境变量,把可执行文件的路径加入到环境变量中还是不行,最后发现是可执行文件的权限问题,在其他用户组中一开始没有可执行权限,加上可执行权限后,运行命令成功!
在这里插入图片描述

参考

https://blog.csdn.net/weixin_47024013/article/details/125646897
https://blog.51cto.com/u_15244533/2845337
https://blog.csdn.net/ldl371122/article/details/120864445?spm=1001.2014.3001.5502

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值