编译替换内核设备树驱动

一个驱动文件的头文件来自内核,所以驱动文件来自于内核,必须要有内核源码,而且内核需要编译过,因为有些需要的文件是一个链接文件。编译的内核要放到开发板上,还要把板子上的其他驱动程序更换掉,然后编译测试第一个驱动程序。

编译之前执行make mrproper

make mrproper 的作用

  • 它会彻底清理内核源代码目录,删除以下内容:

    • 编译生成的目标文件(object files)。

    • 内核配置文件(.config 文件)。

    • 其他临时文件和生成的文件。

  • 执行后,内核源代码目录会恢复到“初始状态”,就像刚解压出来的源码一样干净

执行 make 100ask_imx6ull_mini_defconfig 

make 100ask_imx6ull_mini_defconfig 是一个用于配置 Linux 内核的命令,专门针对 100ask_imx6ull_mini 开发板的默认配置文件。以下是详细说明和步骤:


命令的作用

  • make 100ask_imx6ull_mini_defconfig 会使用预定义的配置文件(100ask_imx6ull_mini_defconfig)来配置 Linux 内核。

  • 这个配置文件通常包含了针对 100ask_imx6ull_mini 开发板的优化设置和默认选项。

执行 make zImage-j4

make zImage -j4 是一个用于编译 Linux 内核并生成 zImage 格式内核镜像的命令。以下是详细说明和步骤:


命令的作用

  • make zImage:编译 Linux 内核,并生成 zImage 格式的内核镜像。

    • zImage 是一种压缩的内核镜像格式,适用于大多数 ARM 平台。

    • 它是 Linux 内核的标准输出格式之一。

  • -j4:指定使用 4 个线程并行编译,以加快编译速度。你可以根据你的 CPU 核心数调整这个数字(例如 -j8 表示使用 8 个线程)。

执行make btbs

make dtbs 是一个用于编译 设备树二进制文件(Device Tree Blobs, DTBs) 的命令。设备树文件用于描述硬件平台的硬件信息,例如 CPU、内存、外设等。以下是详细说明和步骤:


命令的作用

  • make dtbs:编译设备树源文件(.dts)为设备树二进制文件(.dtb)。

    • 设备树源文件(.dts)是文本文件,描述了硬件平台的硬件信息。

    • 设备树二进制文件(.dtb)是编译后的二进制文件,内核在启动时会加载它来识别硬件。

cp arch/arm/boot/zImage  ~/nfs_rootfs
cp arch/arm/boot/dts/100ask_imx6 ull_mini.dtb  ~/nfs_rootfs
编译完成后,在 arch/arm/boot 目录下生成 zImage 内核文件,在 arch/arm/boot/dts 目 录 下 生 成 设 备 树 的 二 进 制 文 件 100ask_imx6ull_mini.dtb。把这2个文件复制到/home/book/nfs_rootfs目 录下备用。

执行make modules

在Linux内核开发或系统配置中,make modules命令用于编译内核模块。内核模块是内核的一部分,但它们在需要时可以被加载或卸载,而不是像内核本身那样在启动时加载。这允许系统在不重新编译整个内核的情况下添加新的功能或硬件支持。

 安装内核模块到Ubuntu某个目录下备用 可以先把内核模块安装到nfs目(/home/book/nfs_rootfs)。 注意:后面会使用tree命令查看目录结构,如果提示没有该命令,需要执行以 下命令安装tree命令:sudo apt install tree
 

  • sudo:这是一个命令行程序,允许普通用户以超级用户(通常是root)的权限运行程序。在这个上下文中,它用于安装软件包,这通常需要管理员权限。

  • apt:这是Advanced Package Tool的缩写,是Debian及其衍生版(如Ubuntu)上用于处理软件包的命令行工具。它可以用来安装、更新、升级和删除软件包。

  • install:这是apt命令的一个选项,指示apt要执行的操作是安装软件包。

  • tree:这是要安装的软件包的名称。

执行make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install
  • make: 调用 Makefile 来执行编译或安装操作。

  • ARCH=arm: 指定目标架构为 ARM。

  • INSTALL_MOD_PATH=/home/book/nfs_rootfs: 指定模块安装的根目录路径。编译后的内核模块会被安装到该路径下的 lib/modules/ 目录中。

  • modules_install: 目标操作,表示安装编译好的内核模块。

假设:在Ubuntu的/home/book/nfs_rootfs 目录下,已经有了 zImage、 dtb 文件,并且有lib/modules子目录(里面含有各种模块)。 接下来要把这些文件复制到开发板上。假设Ubuntu IP为192.168.5.11, 在开发板上执行以下命令:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs  /mnt
将Ubuntu的:/home/book/nfs_rootfs文件挂载在开发板/mnt上   

cp /mnt/zImage /boot
它执行的操作是将位于/mnt目录下的zImage文件复制到/boot目录下。

cp /mnt/100ask_imx6ull_mini.dtb /boot
在Linux系统中用于将一个设备树二进制文件(Device Tree Blob,简称DTB)从/mnt目录复制到/boot目录。

cp /mnt/lib/modules /lib -rfd(-r递归复制,f强制复制,d复制之前是链接文件,复制之后也是链接文件)
递归地强制复制/mnt/lib/modules目录及其内容到/lib目录

sync 
sync 是 Linux 和 Unix 操作系统中的一个命令,它的主要作用是将文件系统中的修改数据(缓冲区中的数据)写入磁盘,以确保数据的一致性和持久性
最后重启开发板,它就使用新的zImage、dtb、模块了

把驱动程序放在nfs_rootfs目录下,进入01_hello_drv,查看里面有什么文件,然后修改Makefile文件,在makefile里面制定你使用哪个内核源码目录

修改 Makefile 文件 “KERN_DIR”为自己的内核所在路径。

修改完内核所在目录后,就可以编译led模块驱动了,如图 5.9所示,执 行“make all”命令就可以编译,编译完成后会生成hello_drv.ko和hello_drv_test两个文件,把这两个文件拷贝到 Ubuntu nfs目录下备用
cp hello_drv.ko hello_drv_test~/nfs_rootfs

下载驱动程序
将生成的这两个文件拷贝到开发板上

安装驱动模块
insmod hello_drv.ko

insmod 命令用于在 Linux 操作系统中手动加载内核模块。当你有一个编译好的内核模块(通常以 .ko 为扩展名,代表 kernel object)时,你可以使用 insmod 命令将其加载到内核中。

在你提供的命令 insmod hello_drv.ko 中,hello_drv.ko 是一个内核模块文件。执行这个命令会将 100ask_led.ko 模块加载到当前运行的内核中。

ls一下设备结点出来了

测试驱动程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值