使用正点原子i.mx6ull加载字符驱动模块chrdevbase

搞了整整两天才整好!踩了不少坑,记录一下

0. 操作基础

操作前需要设置好如下配置
1.开发板和ubuntu能够互相ping通
在这里插入图片描述

2.开发板的SD卡中安装好uboot,我用的V2.4版本的,其他版本应该也行
在这里插入图片描述
3.准备材料

  1. 01_chrdevbase文件
    在这里插入图片描述
  2. linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2
    这个文件在01、例程源码->10、开发板教程对应的uboot和linux源码->02、linux中->V2.4版本及以后版本底板使用的linux 路径下
    在这里插入图片描述

1. 配置I.MX6ULL

  1. 开发板调至SD卡启动方式
    在这里插入图片描述
    注意只启动u-boot即可,及时按回车
    在这里插入图片描述
  2. 设置环境变量
    环境变量中的ip、rootfs路径等需要根据实际情况调整
setenv bootargs "console=ttymxc0,115200 rw nfsroot=192.168.5.252:/home/alientek/linux/nfs/rootfs ip=192.168.5.251:192.168.5.252:192.168.5.1:255.255.255.0::eth0:off"setenv bootcmd "tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000"saveenv

红色箭头里面的值需要根据自己的实际情况进行调整
在这里插入图片描述

2. 编译 linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2

  1. 将linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2压缩包复制到Ubuntu中
  2. 输入命令解压压缩包 tar -vxjf linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2
    解压后图下
    在这里插入图片描述
  3. 创建imx6ull_alientek_emmc.sh 命令为gedit imx6ull_alientek_emmc.sh
    在imx6ull_alientek_emmc.sh中输入如下代码
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j12
  1. 输入如下命令编译linux内核
./imx6ull_alientek_emmc.sh

在这里插入图片描述
5. 找到zImage和imx6ull-alientek-emmc.dtb
zImage在arch/arm/boot/路径下,imx6ull-alientek-emmc.dtb在dts路径下 在这里插入图片描述

  1. 将zImage和imx6ull-alientek-emmc.dtb拷贝值tftp和nfs文件夹中
    这里的nfs和tftp是开发板挂载到ubuntu的文件夹,可以和ubuntu互相通信
    tftp和nfs文件夹的路径必须和刚才步骤一设置的环境变量相同,不然无法通信
    在这里插入图片描述
    在这里插入图片描述

3. 编译字符驱动设备文件

  1. 将刚才准备的01_chrdevbase文件夹中的文件拷贝到ubuntu中
    在这里插入图片描述
  2. 打卡Makefile文件,修改Makefile中的KERNELDIR的路径
    这个路径其实就是刚才弄的linux内核的路径
    在这里插入图片描述
  3. 编译字符驱动设备
    在这里插入图片描述

4. 启动linux内核

  1. 输入boot,可以看到开始启动内核
    在这里插入图片描述
  2. 输入命令 modprobe
    如果提示没有4.1.15这个文件夹,那么自己创建一下
    在这个路径下创建/lib/modules/4.1.15”
    在这里插入图片描述
  3. 将ubuntu中的chrdevbase.ko拷贝到开发板的/lib/modules/4.1.15中
    输入如下命令进行拷贝
sudo cp chrdevbase.ko /home/alientek/linux/nfs/rootfs/lib/modules/4.1.15/ -f

在这里插入图片描述

  1. 建立依赖
    输入depmod命令
    在这里插入图片描述
  2. 加载字符驱动文件
  3. 输入modprobe chrdevbase.ko 和
    在这里插入图片描述
    这里可以看到字符驱动设备已经被成功加载!

总结:

花了整整两天时间才弄好字符驱动模块的加载操作

我是看了正点原子第三期才开始弄第四期的,但是第三期是跳着看的,(因为实在是看不下去,感觉讲的抓不住重点,一看就想睡觉,晦涩难懂)

由于步骤很繁琐,这个教程写的并不是很详细,如果你是第一次调试字符设备驱动,建议结合B站的这个视频教程中的3.2讲《我的第一个Linux驱动-驱动模块加载与卸载实验》来进行学习
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核内存管理-静态内存

目录 一、内存管理二、静态内存2.1、静态内存运行机制2.2、静态内存开发流程2.3、静态内存接口2.4、实例2.5、代码分析(待续...)坚持就有收货 一、内存管理 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包括…

蓝桥杯每日一题------背包问题(三)

前言 之前求的是在特点情况下选择一些物品让其价值最大,这里求的是方案数以及具体的方案。 背包问题求方案数 既然要求方案数,那么就需要一个新的数组来记录方案数。动态规划步骤如下, 定义dp数组 第一步:缩小规模。考虑n个物品…

Spring Boot 笔记 017 创建接口_新增文章

1.1实体类增加校验注释 1.1.1 自定义校验 1.1.1.1 自定义注解 package com.geji.anno;import com.geji.validation.StateValidation; import jakarta.validation.Constraint; import jakarta.validation.Payload; import jakarta.validation.constraints.NotEmpty;import jav…

Qt:自定义信号,信号emit,传参问题,信号槽与moc

一、自定义信号,信号emit 1、自定义信号 在头文件中 加入signals: 就可以编写信号 2、emit emit的作用是通知信号发生 二、跨UI控件传参 每次按Dialog添加按钮主控件数字会增长 // .h private slots:void on_btnAdd_clicked(); signals:void sign…

《区块链公链数据分析简易速速上手小册》第8章:实战案例研究(2024 最新版)

文章目录 8.1 案例分析:投资决策支持8.1.1 基础知识8.1.2 重点案例:股票市场趋势预测准备工作实现步骤步骤1: 加载和准备数据步骤2: 特征工程步骤3: 训练模型步骤4: 评估模型 结论 8.1.3 拓展案例 1:基于情感分析的投资策略准备工作实现步骤步…

C# winfrom中NPOI操作EXCEL

前言 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet;行:Row;单元格Cell。 2.忘了告诉大家npoi是做什么的了,npoi 能够读…

每日五道java面试题之java基础篇(八)

目录: 第一题.CopyOnWriteArrayList的底层原理是怎样的第二题.Java中有哪些类加载器第三题. 说说类加载器双亲委派模型第四题. GC如何判断对象可以被回收第五题.JVM中哪些是线程共享区 第一题.CopyOnWriteArrayList的底层原理是怎样的 ⾸先CopyOnWriteArrayList内部…

游戏开发的编程算不算是IT行业中难度最大的?

游戏开发的编程算不算是IT行业中难度最大的? 游戏作为当今数字娱乐领域中最引人入胜的产品之一,其背后所依托的程序开发能力也备受关注。作为游戏开发过程中的“幕后英雄”,编程工作的难易程度直接影响到游戏的质量体验和开发效率。 关于游…

Python dict函数

Python中的字典(dict)是一种非常重要且灵活的数据结构,它提供了键值对的存储和访问机制。字典函数(dict())作为创建字典的工具之一,可以从多种数据结构中创建字典对象。在本文中,将深入探讨dict…

算法刷题:有效三角形个数

有效三角形个数 .题目链接题目详情算法原理补充知识点双指针:对撞指针 我的答案 . 题目链接 有效三角形个数 题目详情 算法原理 补充知识点 有效三角形需要满足的条件: ab>cac>bbc>a 其实在满足1的时候,c是最大的,那么2和3是显然成立的,因此我们可以这样解题: 对…

华为OD机试 - 分配土地( Python C C++ JavaGo JS PHP)

题目描述 从前有个村庄,村民们在各种田地上插上小旗子,每个旗子上都标识了一个数字。现在,村民们想要找出一个包含相同数字的最小矩形区域,并将这块土地分配给对村庄做出巨大贡献的村民。我们需要找出这个矩形区域的最大面积。 …

分享个CSDN自定义模块模板

在开了会员或升级为博客专家后&#xff0c;才有这个自定义模块的权限 当然这也是为了有很多粉丝的博主更方便的推广一些业务场景展示的橱窗 自定义模块管理 下面就列下我使用的自定义模块相关的代码 <marquee><b><font color"#8A2BE2">不</…

[WinForm开源]概率计算器 - Genshin Impact(V1.0)

创作目的&#xff1a;为方便旅行者估算自己拥有的纠缠之缘能否达到自己的目的&#xff0c;作者使用C#开发了一款小型软件供旅行者参考使用。 创作说明&#xff1a;此软件所涉及到的一切概率与规则完全按照游戏《原神》(V4.4.0)内公示的概率与规则&#xff08;包括保底机制&…

猫头虎分享已解决Bug || DNS解析问题(DNS Resolution Issue):DNSLookupFailure, DNSResolveError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

大学生必备搜题软件推荐?找题不再难!好用的大学搜题工具推荐 #媒体#职场发展

在快节奏的大学生活中&#xff0c;合理利用这些日常学习工具&#xff0c;能够让你事半功倍&#xff0c;提高学习效率。 1.茱莉亚公开课 茱莉亚公开课APP不是一款针对所有人的应用&#xff0c;是针对对艺术有特殊爱好和艺术领域的人 茱莉亚音乐学院里面都是世界著名的茱莉亚音…

Vulhub kali 环境安装教程

进入 root 权限 sudo su 更新软件 apt-get update 安装 HTTPS 协议和 CA 证书 apt-get install -y apt-transport-https ca-certificates 安装 docker apt install docker.io 查看 docker 是否安装完成 docker -v 安装 pip apt-get install python3-pip 安装 docker-compose do…

Linux第57步_“linux系统镜像”和“根文件系统”重新打包小结

实时总结是很重要的&#xff0c;时间久了&#xff0c;可能会遗忘。下面是“linux系统镜像”和“根文件系统”重新打包小结。 1、linux系统镜像重新打包 在第1次完成linux系统镜像打包后&#xff0c;再重新打包就很容易了 将“bootfs”重新打包 准备打包文件: 输入“cd /ho…

(10)Hive的相关概念——文件格式和数据压缩

目录 一、文件格式 1.1 列式存储和行式存储 1.1.1 行存储的特点 1.1.2 列存储的特点 1.2 TextFile 1.3 SequenceFile 1.4 Parquet 1.5 ORC 二、数据压缩 2.1 数据压缩-概述 2.1.1 压缩的优点 2.1.2 压缩的缺点 2.2 Hive中压缩配置 2.2.1 开启Map输出阶段压缩&…

MySQL篇之回表查询

一、聚集索引 将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存了行数据。特点&#xff1a;必须有,而且只有一个。 聚集索引选取规则: 1. 如果存在主键&#xff0c;主键索引就是聚集索引。 2. 如果不存在主键&#xff0c;将使用第一个唯一&#xff08;UNIQUE&am…

Linux环境中的git

目录 1.要使用git&#xff0c;首先要安装git 2.首次使用git需要做的操作 3.git操作 1.要使用git&#xff0c;首先要安装git 指令&#xff1a;sudo yum install -y git 2.首次使用git需要做的操作 在gitee网页&#xff0c;在你的仓库中找到&#xff1a; 先将下面两行代码分别…