【Linux驱动】环境搭建和开发板操作 下篇

一,编译的需要和流程

为什么编译驱动程序之前要先编译内核?

  1. 驱动程序要用到内核文件:
    比如驱动程序中这样包含头文件:#include <asm/io.h>,其中的 asm 是
    一个链接文件,指向 asm-arm 或 asm-mips,这需要先配置、编译内核才会生成
    asm 这个链接文件。
    编译驱动时用的内核、开发板上运行到内核,要一致:
    开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译
    的,这两个内核不一致时会导致一些问题。所以我们编译驱动程序前,要把自己
    编译出来到内核放到板子上去,替代原来的内核
  2. 更换板子上的内核后,板子上的其他驱动也要更换:
    板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出
    来的。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、模块,并且
    放到板子上去。
    配置编译的流程:
  3. 内核,设备树,驱动
  4. 将三者放到板子上
    3 . 编译测试第一个驱动程序

二, 编译内核与设备树

第一行命令:

进入到内核源码的目录

第二行命令:mrproper 是内核源码的清理目标

彻底清理源码目录中之前编译生成的所有文件、配置文件和临时文件,把源码恢复到 "干净" 的初始状态,避免旧的编译产物干扰新的编译。

第三行命令:

作用:加载针对 100ask_imx6ull 开发板 的默认配置文件,生成内核编译的核心配置文件 .config

第四行命令:
zImage 是生成压缩格式的 ARM 内核镜像 ,是嵌入式设备常用的内核镜像格式。
-j4 表示用 4 个线程并行编译,利用多核 CPU 加快编译速度

第五行命令:
dtbs编译 Device Tree Blob(设备树文件)的目标

作用:编译描述开发板硬件信息的设备树文件,生成 .dtb 文件。设备树会告诉内核开发板的硬件布局、外设信息等,是内核识别硬件的关键。

第六行:

把弄好的文件放到~/nfs_rootfs目录下进行保存

这里只展示了一个拷贝,另外一个设备树也要进行拷贝

然后编译这个驱动程序模块

然后安装模块


5.4****安装内核和模块到开发板上
假设:在 Ubuntu 的/home/book/nfs_rootfs 目录下,已经有了 zImage、
dtb 文件,并且有 lib/modules 子目录(里面含有各种模块)。
接下来要把这些文件复制到开发板上,在 Ubuntu 上使用 adb 命令:

复制代码
cd /home/book/nfs_rootfs
adb push zImage /boot
adb push 100ask_imx6ull-14x14.dtb /boot
adb push lib/modules /lib

最后,在开发板上执行"sync"命令,再重启开发板,它就使用新的 zImage、 dtb、模块了

三,开发板的第一个驱动程序

首 先 , 进入100ask_imx6ull_src_bin目录,修改Makefile文件 "KERN_DIR"为自己的内核所在路径。如图5.7红框所示,如果你的内核源码 不在此目录则根据你的实际情况进行修改:

然后我们把对应的文件进行编译,然后扔到开发板子上使用对应的功能就好了
ls dev/----- 这个是用来检查是否生成设备节点的
cat proc/devices 这个也是

相关推荐
熬夜有啥好2 小时前
Linux软件编程——Shell命令
linux·运维·服务器
模型时代2 小时前
Linux系统安全革命:Amutable公司推出全新验证完整性技术
linux·运维·系统安全
醇氧2 小时前
【Linux】centos 防火墙学习
linux·学习·centos
~光~~2 小时前
【嵌入式linux学习】06_中断子系统
linux·单片机·学习
LYS_06182 小时前
寒假学习(14)(HAL库5)
java·linux·学习
神一样的老师2 小时前
【ELF2学习开发板】Linux 命令行读取 MPU6050 传感器数据(I2C 总线)实战
linux·运维·学习
郝学胜-神的一滴2 小时前
Linux网络编程中的connect函数:深入探索网络连接的基石
linux·服务器·网络·c++·websocket·程序人生
春日见2 小时前
window wsl环境: autoware有日志,没有rviz界面/ autoware起不来
linux·人工智能·算法·机器学习·自动驾驶
翼龙云_cloud2 小时前
亚马逊云代理商: RDS 误删实例急救指南 5 步找回数据
服务器·云计算·aws