首先,需要有一个内核源码,并且编译配置
驱动程序的头文件依赖于内核,所以写驱动程序时候要使用内核,是编译后的内核。
内核是需要配置的,比如链接文件。到底是asm-arm还是asm-x86,内核用的是哪一个具体相关的架构目录,需要配置内核。
步骤:
1、配置编译内核、设备树、其它驱动程序
2、编译后的第一步东西放到板子上,
3、编译测试我们第一个驱动
一、内核编译命令:
cd 内核目录
make 100ask_imx6ull_defconfig //确定是给arm编译,还是给X86编译
make zImage -j4 //编译内核 -j4加快编译速度
make dtbs //编译设备树
cp arch/arm/boot/zImage ~/nfs_rootfs //zImage拷贝到nfs目录备用 位置
cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs //拷贝设备树文件备用 位置
make modules //编译模块驱动程序
make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install //拷贝模块驱动备用,安装内核模块到某个目录下
最后nfs_rootfs目录文件如下
root@wandzhang-virtual-machine:/home/book/nfs_rootfs# ls
01_hello 100ask_imx6ull-14x14.dtb lib test zImage
------------------------------------------------------------------------
make clean //第一次编译 Linux 内核之前先清理一下 make imx_v7_mfg_defconfig //这是的 配置 Linux4.1.15 内核 //配置 Linux 内核二、最后需要拷贝到开发板上的文件
1、zImage 2、100ask_imx6ull-14x14.dtb设备树 3、 modules
root@wandzhang-virtual-machine:/home/book/nfs_rootfs# cd lib/
root@wandzhang-virtual-machine:/home/book/nfs_rootfs/lib# ls
firmware modules
拷贝到板子上步骤:
1.查看开发板内核版本
uname -a
Linux ATK-IMX6U 4.1.15-g3dc0a4b #1 SMP PREEMPT Thu Aug 18 09:27:40 CST 2022 armv7l armv7l armv7l GNU/Linux
可以看出版本是4.1.15 ,不是4.88所以这会有问题
2.挂载网络文件系统
3.把文件复制到开发板
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
cp /mnt/zImage /boot
cp /mnt/100ask_imx6ull-14x14.dtb /boot
cp /mnt/lib/modules /lib -rfd //开发板有lib目录,所以要覆盖掉原来目录,-r递归复制,f强制复制,d复制链接文件依然做为链接文件,减少空间ok
sync
4.重启开发板
reboot
5.查看版本,内核更新时间
uname -a
----------------------------
root@ATK-IMX6U:/test# ls
imx6ull-14x14-evk.dts lib zImage
root@ATK-IMX6U:/test# cp zImage /boot/
root@ATK-IMX6U:/test# cp imx6ull-14x14-evk.dts /boot/
root@ATK-IMX6U:/test# cp lib/modules /lib/ -rfd
root@ATK-IMX6U:/test# sync
上一篇:C语言位运算