Nvidia内核&设备树&driver编译

7 篇文章 2 订阅
4 篇文章 2 订阅

一、环境准备

下载同一个SDK的开源code以及编译好的对应镜像,链接:

https://developer.nvidia.com/embedded/linux-tegra-r3271

一般选择最新的即可,然后主要需要以下工具

  • public source code :设备树以及linux源码
  • x86 cross compile tool : x86 交叉编译使用
  • linux headers : 编译自己的驱动模块使用
  • develop guideline:离线开发文档
    在这里插入图片描述
    另外镜像也在其中,自行下载烧写即可,烧写镜像网上有免费资源可以看。

二、编译kenrel以及device tree

编译pulic source code内核源码以及设备树,首先

 sudo apt install build-essential bc
  • 进入pulic source code的kernel4.9目录下:
{my_pulic_souce_dir}/Linux_for_Tegra/source/public/kernel/kernel-4.9
  • 创建输出路径
mkdir kImageOut
  • make defconfig,配置linux kernel默认参数
export LOCALVERSION=-tegra
make ARCH=arm64 O=kImageOut tegra_defconfig
  • 编译
make ARCH=arm64 O=kImageOut -j8
  • 编译结果
    在kImageOut文件夹中:
    Linux内核镜像:./kImageOut/arch/arm64/boot/Image
    设备树:/kImageOut/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb
    设备树具体文件不明确的可以看你的板子是多少
  • 注意make4.3实际编译有bug,建议是用4.2.1,
wget	http://archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/make_4.2.1-1.2_amd64.deb

然后执行:

$ cat /proc/device-tree/nvidia,dtsfilename
../arch/arm64/boot/dts/../../../../../../hardware/nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a02.dtsd

然后,cp自己的对应的编译结果就可以

三、生效自己编译的kenrel以及device tree

最简单的方法直接cp 编译好的Image镜像以及的dtb文件到板子上/boot/Image或者/boot/xxx.dtb,不要用flash.sh脚本烧写,操作复杂且慢

  • 修改调试设备树路径
sudo vim /boot/extlinux/extlinux.conf

修改对应内容如下:
注意设备树换成自己的名字

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      FDT   /boot/tegra210-p3448-0000-p3449-0000-a02.dtb
      INITRD /boot/initrd
      APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0
  • cp Image以及device tree
    首先scp本地编译结果到开发板上,然后直接cp覆盖
sudo cp ./Image /boot/
sudo cp ./xxx.dtb /boot/

最后sync一下,reboot生效

四、编译用户module

创建自己的mod文件夹,然后写一个测试驱动:
编译命令:

make ARCH=arm64 -C {top_Src}/Linux_for_Tegra/kernel/linux-headers-4.9.253-tegra-linux_x86_64/kernel-4.9/ M=$(pwd)

如果meanconfig

make ARCH=arm64 O=kImageOut menuconfig

相同路径下假如编译ov5640.c,其Makefile如下:

obj-m := ov5640.o

最后编译出ko文件,scp到开发板上

sudo insmod ov5460.ko
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值