编译替换内核_设备树_驱动_IMX6ULL

news/2024/7/20 10:47:53 标签: IMX6ULL, Linux, Linux内核

前言:

使用的开发板为韦东山老师的 IMX6ULL

目录

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

1.驱动程序要用到内核文件:

2.编译驱动时用的内核、开发板上运行到内核,要一致:

3.更换板子上的内核后,板子上的其他驱动也要更换:

编译内核步骤

编译内核模块

安装内核和模块到开发板上

1.先在开发板挂载 Ubuntu 的 NFS 目录

2.输入命令 uname -a 显示内核版本修改时间 2020

3.复制文件到开发板上

4.reboot重启后再输入命令 uname -a 显示内核版本修改时间 2023​编辑


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

1.驱动程序要用到内核文件:

比如驱动程序中这样包含头文件:#include ,其中的 asm 是 一个链接文件,指向 asm-arm 或 asm-mips,这需要先配置、编译内核才会生成 asm 这个链接文件。

2.编译驱动时用的内核、开发板上运行到内核,要一致:

开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译的,这两个内核不一致时会导致一些问题。所以我们编译驱动程序前,要把自己 编译出来到内核放到板子上去,替代原来的内核。

3.更换板子上的内核后,板子上的其他驱动也要更换:

板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出来的。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、模块,并且放到板子上去。

编译内核步骤

不同 的 开 发 板 对 应 不 同 的 配 置 文 件 , 配 置 文 件 位 于 内 核 源 码 arch/arm/configs/目录。

内核(kernel) 的编译过程如下(按顺序):

  • make mrproper: Linux下面去编译项目之前,一般常会用make mrproper去先删除之前编译所生成的文件和配置文件,备份文件等
  • make 100ask_imx6ull_defconfig:配置给哪个板子编译
  • make zImage -j4: 编译内核 -j4加快编译速度
  • make dtbs: 编译设备树文件

编译完成后生成的文件如下图:

在 arch/arm/boot 目录下生成 zImage 内核文件, 在 arch/arm/boot/dts 目录下生成设备树的二进制文件 100ask_imx6ull-14x14.dtb

把这 2 个文件复制到/home/book/nfs_rootfs 目录下备用,

编译内核模块

进入内核源码目录后,就可以编译内核模块了:

内核模块编译完成后如图:

安装内核模块到 Ubuntu 某个目录下备用

可以先把内核模块安装到 nfs 目录(/home/book/nfs_rootfs)

安装好驱动后的/home/book/nfs_rootfs/目录结构如图 5.6 所示:

安装内核和模块到开发板上

1.先在开发板挂载 Ubuntu 的 NFS 目录

不知道如何挂载可以看 :开发板挂载 Ubuntu 的 NFS 目录

2.输入命令 uname -a 显示内核版本修改时间 2020

3.复制文件到开发板上

在上面 Ubuntu 的/home/book/nfs_rootfs 目录下,已经有了 zImage、 dtb 文件,并且有 lib/modules 子目录(里面含有各种模块)。

接下来要把这些文件复制到开发板上

假设 Ubuntu IP 为 192.168.5.11, 在开发板上执行以下命令(按顺序)

4.reboot重启后再输入命令 uname -a 显示内核版本修改时间 2023


http://www.niftyadmin.cn/n/5145943.html

相关文章

通过内网穿透分享本地电脑上有趣的照片:部署piwigo网页

通过cpolar分享本地电脑上有趣的照片:部署piwigo网页 文章目录 通过cpolar分享本地电脑上有趣的照片:部署piwigo网页前言1.Piwigo2. 使用phpstudy网页运行3. 创建网站4. 开始安装Piwogo5. 设定一条内网穿透数据隧道6. 与piwigo网站绑定7. 在创建隧道界面…

10个常用的React UI组件库

背景:在快速变化的前端开发世界中,react前端框架简洁明了,赢得了全球开发者的广泛青睐,相比于从零开始创建每一个组件,使用现成的 React UI 组件库可以极大地提高我们的开发效率,React社区已经积累了大量优…

Shiny Server和ShinyProxy是什么,有什么区别?

调研以及参与过多个生物公司的生信工具研发,不管是ShinyServer还是ShinyProxy都有一定研究,尤其是ShinyServer。如果仅是本地化测试想快速的搭建Shiny应用,我推荐用Shiny Server,如果多并发用户且更好的线上管理Shiny应用&#xf…

JAVA亡了?那么多岗位去哪了?

1.java现在有多卷? 虽然近年来出现了许多其他编程语言和技术。但JAVA依旧是热度最高的。它仍然被广泛用于大型企业应用、后端开发、Android应用开发以及嵌入式系统等领域。此外,Java在大数据、云计算和物联网等新兴领域也有着重要的地位。 因此&#x…

全球互联网信息,中文内容只占1.3%,学好英语,这几条路子让你赚认知外的钱

在全世界的整个互联网上,中文内容只占1.3%,而英文内容接近60%,如果你不会英语,你的眼界和思维将局限在这1.3%里面。 单单就说赚钱这个事情,学好英语,你可以有很多特殊的路子赚到大钱,可以赚到你…

C++标准输入输出类cout,cin用法概述

cout 标准输出类 不同进制输出数字 cout 数字数字默认是以十进制表示&#xff0c;也可以是用其他的进制表示&#xff1a;例如&#xff1a; 八进制&#xff1a;std::cot std::cout << std::oct << i << std::endl; 十进制&#xff1a;std::dec std::cout…

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层

文章目录 数据结构总结ArrayList源码底层LinkedList底层源码 迭代器底层 数据结构 对于数据结构我这边只告诉你右边框框里的 栈的特点:后进先出,先进后出,入栈也成为压栈,出栈也成为弹栈 栈就像一个弹夹 队列先进先出后进后出 队列像排队 链表查询满 但是增删快(相对于数组而…