Linux内核驱动有时在编译的时候会以模块的方式进行动态加载,在调试驱动的时候,编译成模块也方便调试。
1.模块编译与安装
这里将模块安装到本地对应板卡的rootfs,安装过程中会自动安装到/lib/modules下,编写脚本如下:
#!/bin/bashexport CROSS_COMPILE_AARCH64_PATH=/opt/l4t-gcc
export CROSS_COMPILE_AARCH64=/opt/l4t-gcc/bin/aarch64-buildroot-linux-gnu-
export LOCALVERSION=-tegra
export KERNEL_OUT=/home/Jetson-Xavier-NX/build/kernel_src/kernel/kernel-5.10/kernel_out
export KERNEL_MODULES_OUT=/home/Jetson-Xavier-NX/build/Linux_for_Tegra/rootfssudo make modules_install ARCH=arm64 O=$KERNEL_OUT CROSS_COMPILE=$CROSS_COMPILE_AARCH64 INSTALL_MOD_PATH=$KERNEL_MODULES_OUT INSTALL_MOD_STRIP=1
2.目标机改动
/lib/modules目录下有对应内核版本的模块(其中包含驱动),需要注意的是,模块安装时,会修改其中的文件,如:modules.dep,modules.dep.bin等文件,因此,仅将编译生成的.ko文件拷贝到此目录下相应的驱动文件夹是不行的,这里需要将对应内核版本的文件夹打包,拷贝到目标机,在覆盖解压到对应的目录。
打包,压缩,执行:
cd <path>/Linux_for_Tegra/rootfs/lib/modules
sudo tar -czvf 5.10.104-tegra.tgz 5.10.104-tegra
sudo chmod a+w 5.10.104-tegra.tgz
拷贝到目标机,执行:
sudo tar -zvxf 5.10.104-tegra.tgz -C /lib/modules