使用正点原子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驱动-驱动模块加载与卸载实验》来进行学习
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows vs 自己编译源码 leveldb 然后使用自己编译的文件

1 准备源码文件 1.1 第一种方法 git下载源码 vs项目中git leveldb源码和git third_party googletest-CSDN博客 1.2 第二种方法 手动下载 然后把第三方的源码下载 复制到 third_party 对应的文件夹中 没有文件夹 third_party -> powershell mkdir third_party 2 编译lev…

【AIGC】Stable Diffusion的生成参数入门

Stable Diffusion 的生成参数是用来控制图像生成过程的重要设置,下面是一些常见的生成参数及其详解 1、采样器,关于采样器的选择参照作者的上一篇文章 2、采样步数(Sampling Steps)是指在生成图像时模型执行的总步数&#xff0c…

详解 Redis 实现数据去重

✨✨ 欢迎大家来到喔的嘛呀的博客✨✨ 🎈🎈希望这篇博客对大家能有帮助🎈🎈 目录 言 一. Redis去重原理 1. Redis Set 数据结构 2. 基于 Set 实现数据去重 3. 代码示例 4. 总结 …

【Web】从零开始的js逆向学习笔记(上)

目录 一、逆向基础 1.1 语法基础 1.2 作用域 1.3 窗口对象属性 1.4 事件 二、浏览器控制台 2.1 Network Network-Headers Network-Header-General Network-Header-Response Headers Network-Header-Request Headers 2.2 Sources 2.3 Application 2.4 Console 三、…

C++初阶:适合新手的手撕list(模拟实现list)

上次讲了常用的接口:今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.空参构造函数(constructor)3.完善迭代器(iterator)(begin(),end())4.List Capacity(size(),empty())4.增删改查(push_back,pop_back,pop_f…

MySQL篇----第二十二篇

系列文章目录 文章目录 系列文章目录前言一、什么是表级锁二、什么是页级锁三、什么是行级锁四、什么是悲观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、…

vue axios 请求后端无法传参问题

vue请求后端无法传参问题 问题描述处理过程总结 问题描述 在学习vue时,使用axios调用后端,发现无法把参数正确传到后端,现象如下: 使用vue发起请求,浏览器上已经有传参,但是后端没接收到对应的用户名密码&…

SpringCloud之Nacos用法笔记

SpringCloud之Nacos注册中心 Nacos注册中心nacos启动服务注册到Nacosnacos服务分级模型NacosRule负载均衡策略根据集群负载均衡加权负载均衡Nacos环境隔离-namespace Nacos与eureka的对比临时实例与非临时实例设置 Nacos配置管理统一配置管理微服务配置拉取配置自动刷新远端配置…

STM32CubeMX的下载和安装固件库详细步骤

年也过了,节也过了,接下来又要进入紧张的学习中来了。过完年后发现一个问题,就是我之前吃的降压药不太管用,每天的血压只降到了91/140左右,没有到安全范围内,从初三开始换了一种降压药,效果出奇…

Java完整版宿舍管理

项目技术: springboot layui idea mysql5.7 jdk1.8 maven3 有需要该项目的小伙伴可以私信我你的Q。 功能描述: (1)基本信息管理 基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息&#xff0c…

MySQL学习记录——팔 函数

文章目录 1、日期函数2、字符串函数3、数学函数4、其它函数 1、日期函数 //获取日期 select current_date(); //获取时间 select current_time(); //获取时间戳, 格式为日期时间 select current_timestamp(); //获取当前时间, 格式为日期时间 select now(); //获取参数的日期部…

p图考试,搜题软件哪个好?如何利用大学搜题工具查找特定学科的题目? #微信#知识分享

大学生必备,这条笔记大数据一定定要推给刚上大学的学弟学妹!! 1.三羊搜题 这是个微信公众号 是个公众号,支持文字、语音、截图搜题,截图搜题,同时也支持相似题查看及解析,因为可以在电脑上使…

全战三国与Amadey病毒

一、疑云 某天晚,本人突发奇想从外网上体验一下全战三国(全面战争:三国)的可玩版本(没玩过全战系列,听说三国版是个半成品,打算先体验一下再考虑入正版。国内网站找到的资源:1.53的…

python-分享篇-自定义词云图颜色

文章目录 准备代码效果 准备 运行本程序需要安装第三方模块matplotlib、jieba、wordcloud 和scipy ,scipy要求1.0.0版本,否则程序将出现导入错误:ImportError: cannot import name ‘imread’ from ‘scipy.misc’ ImportError: cannot impo…

【动态规划】【C++算法】1563 石子游戏 V

作者推荐 【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 本文涉及知识点 动态规划汇总 LeetCoce:1563 石子游戏 V 几块石子 排成一行 ,每块石子都有一个关联值,关联值为整数,由数组 stoneValue 给出。 游戏中…

倒模UV树脂胶制作舞台监听耳返入耳式耳机壳可行吗?

使用倒模UV树脂胶制作舞台监听耳返入耳式耳机壳是一种可行的方法,能够为专业或业余的音乐制作人、DJ和舞台表演者提供定制的、高品质的监听耳返体验。 以下是一些关键步骤和注意事项: 耳模制作:首先,为使用者制作一个精确的耳模…

无人机地面站技术,无人机地面站理论基础详解

地面站作为整个无人机系统的作战指挥中心,其控制内容包括:飞行器的飞行过程,飞行航迹, 有效载荷的任务功能,通讯链路的正常工作,以及 飞行器的发射和回收。 无人机地面站总述 地面站作为整个无人机系统的作战指挥中心…

【教学类-19-07】20240214《ABAB式-规律黏贴18格-手工纸15*15CM-一页一种图案,A空,竖向、有边框》(中班)

背景需求 利用15*15CM手工纸制作AB色块手环(手工纸自带色彩) 素材准备 代码展示 作者:阿夏 时间:2024年2月14日 名称:正方形数字卡片AB图案 _ 华光彩云_CNKI A的位置有图案 A空18格 AB向 一页一种图案,…

[CTF]-PWN:C++文件更换libc方法(WSL)

C文件与C文件更换libc有很多不一样的地方,我是在写buu的ciscn_2019_final_3才意识到这个问题,C文件只需要更换libc和ld就可以了,但是C文件不同,除了更换libc和ld,它还需要更换libstdc.so.6和libgcc_s.so.1 更换libc和…

FPGA_简单工程_拨码开关

一 框图 二 波形图 三 代码 3.1 工程代码 module bomakiaguan (input [15:0] switch, // 输入16路拨码开关output reg [15:0] led // 输出16个LED灯 );always (switch) beginled < switch; // 将拨码开关的值直接赋给LED灯 end // 将拨码开关的值直接赋给LED灯 endmodu…