imx6ull驱动开发经验

2023-11-17

1、背景

      imx6ull驱动开发基于正点原子的开发板,上面运行linux 4.1.15内核,根文件系统为ubuntu 16.05.5 LTS.

2、加载驱动文件chrdevbase.ko文件时,先使用depmod生成依赖文件时,提示无modules.order, modules.builtin无这两个文件。

解决办法:modules.order可以从驱动生成的目录中复制,modules.builtin可以从编译完成的linux内核源码根据目录获取即可。

zsm@imx6ull:/lib/modules/4.1.15$ depmod
depmod: WARNING: could not open /lib/modules/4.1.15/modules.order: No such file or directory
depmod: WARNING: could not open /lib/modules/4.1.15/modules.builtin: No such file or directory
zsm@imx6ull:/lib/modules/4.1.15$ ls -l
total 40
-rw-rw-r-- 1 zsm zsm 5465 Oct 26 01:34 chrdevbase.ko
-rw-r--r-- 1 zsm zsm   45 Oct 26 01:35 modules.alias
-rw-r--r-- 1 zsm zsm   12 Oct 26 01:35 modules.alias.bin
-rw-r--r-- 1 zsm zsm    0 Oct 26 01:35 modules.builtin.bin
-rw-r--r-- 1 zsm zsm   15 Oct 26 01:35 modules.dep
-rw-r--r-- 1 zsm zsm   51 Oct 26 01:35 modules.dep.bin
-rw-r--r-- 1 zsm zsm   52 Oct 26 01:35 modules.devname
-rw-r--r-- 1 zsm zsm   55 Oct 26 01:35 modules.softdep
-rw-r--r-- 1 zsm zsm   49 Oct 26 01:35 modules.symbols
-rw-r--r-- 1 zsm zsm   12 Oct 26 01:35 modules.symbols.bin
zsm@imx6ull:/lib/modules/4.1.15$ modprobe chrdevbase.ko
modprobe: ERROR: ../libkmod/libkmod.c:514 lookup_builtin_file() could not open builtin file '/lib/modules/4.1.15/modules.builtin.bin'
modprobe: FATAL: Module chrdevbase.ko not found in directory /lib/modules/4.1.15

3、探测驱动文件insmod chrdevbase.ko时提供Invalid module format,失败信息通dmesg查看提示为驱动程序版本与内核版本不一样,内核版本为4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8 ,而驱动文件chrdevbase.ko的版本为4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8。查看驱动文件的信息可以使用modinfo 模块名。


root@imx6ull:/lib/modules/4.1.15# insmod chrdevbase.ko
insmod: ERROR: could not insert module chrdevbase.ko: Invalid module format
root@imx6ull:/lib/modules/4.1.15# file chrdevbase.ko
chrdevbase.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=db1f490c8b622fc8dfbc484a15918ab56e0e9e8e, not stripped
root@imx6ull:/lib/modules/4.1.15#
root@imx6ull:/lib/modules/4.1.15#
root@imx6ull:/lib/modules/4.1.15#
root@imx6ull:/lib/modules/4.1.15# dmesg
[ 2636.034265] chrdevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8 '

解决办法:重新配置内核,修改为只选择ARMv7, 通过menuconfig修改,如下图:编译内核后再编译驱动程序就可以了。

 4、安装newchrled模块时,提示Invalid argument,通过详细查看dmesg提示newchrled: Unknown symbol device_create (err -22),即是无法从内核符号表中找到函数device_create。这个问题是由于板子上运行的内核中符号表中device_create函数没有或对应不上,我这个板子运行的内核是在家中电脑上编译出来,目前测试的驱动文件是在公司的电脑上编译出来,两个内核源代码有细微一的区别导致的。

root@imx6ull:/lib/modules/4.1.15# modprobe newchrled
modprobe: ERROR: could not insert 'newchrled': Invalid argument
root@imx6ull:/lib/modules/4.1.15# ls -l
total 124
-rwxrwxr-x 1 zsm  zsm  10990 Oct 26 03:42 chr
-rw-rw-r-- 1 zsm  zsm   5747 Oct 26 06:11 chrdevbase.ko
-rwxrwxr-x 1 zsm  zsm  10663 Oct 26 08:51 led
-rw-rw-r-- 1 zsm  zsm   6107 Oct 26 07:43 led.ko
-rw-r--r-- 1 root root    45 Oct 26 09:28 modules.alias
-rw-r--r-- 1 root root    12 Oct 26 09:28 modules.alias.bin
-rw-rw-r-- 1 zsm  zsm  18104 Oct 26 03:42 modules.builtin
-rw-r--r-- 1 root root 20446 Oct 26 09:28 modules.builtin.bin
-rw-r--r-- 1 root root    37 Oct 26 09:28 modules.dep
-rw-r--r-- 1 root root   145 Oct 26 09:28 modules.dep.bin
-rw-r--r-- 1 root root    52 Oct 26 09:28 modules.devname
-rw-rw-r-- 1 zsm  zsm     71 Oct 26 03:42 modules.order
-rw-r--r-- 1 root root    55 Oct 26 09:28 modules.softdep
-rw-r--r-- 1 root root    49 Oct 26 09:28 modules.symbols
-rw-r--r-- 1 root root    12 Oct 26 09:28 modules.symbols.bin
-rw-rw-r-- 1 zsm  zsm   7311 Oct 26 09:28 newchrled.ko
root@imx6ull:/lib/modules/4.1.15# dmesg
[ 8309.174306] kernel senddata ok!
[ 8389.320054] kernel senddata ok!
[ 8504.563661] chrdevbase exit!
[ 8515.614554] chrdevbase init!
[ 8527.479044] kernel send data ok!
[ 8538.832405] kernel send data ok!
[ 9146.225007] chrdevbase exit!
[20325.294426] newchrled: disagrees about version of symbol device_create
[20325.294459] newchrled: Unknown symbol device_create (err -22)
[20325.294487] newchrled: disagrees about version of symbol device_destroy
[20325.294500] newchrled: Unknown symbol device_destroy (err -22)

 解决办法:把公司电脑编译生成的内核zImage下载到板子中解决此问题。

4、hexdump命令的安装, hexdump命令是bsdmainutils软件包中的提供的,可以使用apt-get install bsdmainutils安装后即可以获得hexdump命令。

5、ubuntu 18.04系统,硬件intel i7,系统启动后是默认是不加载usb转串口驱动程序ftdio_sio.ko文件,可以修改modules.conf文件增加,如下图。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

imx6ull驱动开发经验 的相关文章

  • IMX6学习记录(10)-挂载SD卡,数据掉电存储

    上面是我的微信和QQ群 欢迎新朋友的加入 目前使用的文件系统是打包成镜像文件的 通过UBOOT挂载镜像 在RAM里面运行起来了 这有个问题 数据不会被存储下来 掉电就会丢失 1 挂载SD卡 fdisk l mount dev mmcblk0
  • 嵌入式linux驱动之路19:U-Boot 移植(2)

    uboot 的最终目的就是启动 Linux 内核 所以需要通过启动 Linux 内核来判断 uboot 移植是否成功 在启动 Linux 内核之前我们先来学习两个重要的环境变量 bootcmd 和 bootargs bootcmd 环境变量
  • 研发效能工程实践-代码评审

    什么是代码评审 Code Review的定义 是一项单人或者多人通过阅读别人的源代码来检查代码质量的软件质量保证活动 定义有点绕口 其实就是写完代码之后让经验相对丰富一点的同事帮你检查一下你的代码 当然这个检查应该是多方面的 包括但不限于你
  • 微星b560m mortar wifi 开机二检(开机灭了1秒后自动重启)

    微星b560m mortar wifi 开机二检 开机灭了1秒后自动重启 1 起因 为了照顾旧CPU 还想把内存扩容到64GB 就选择了DDR4的4条插槽的 B560M主板 都弄好之后 开机发现在按下电源键之后 通电自检后断电了大概2秒左右
  • Linux设备驱动的软件架构思想与设备驱动的基础内容总结

    Linux设备驱动的软件架构思想与设备驱动的基础内容总结 Linux是一个兼容性特别强的一个系统 而兼容性的实现与驱动强大的适应性密不可分 而这个具体的实现是离不开 总线bus和类class的管理方式 Linux使用bus统一的管理一系列相
  • Linux 块设备驱动实验

    一 块设备驱动要远比字符设备驱动复杂得多 不同类型的存储设备又对应不同的驱动子系统 本章我们重点学习一下块设备相关驱动概念 不涉及到具体的存储设备 1 什么是块设备 块设备是针对存储设备的 比如 SD 卡 EMMC NAND Flash N
  • Linux驱动开发--平台总线id和设备树匹配

    目录 一 ID匹配之框架代码 二 ID匹配之led驱动 三 设备树匹配 四 设备树匹配之led驱动 五 一个编写驱动用的宏 一 ID匹配之框架代码 id匹配 可想象成八字匹配 一个驱动可以对应多个设备 优先级次低 注意事项 device模块
  • Robot Framework 自动化测试详解

    一 Robot Framework 简介 1 界面自动化测试工具 界面自动化测试 即UI自动化测试 比较常见的工具有 QTP AutoIt Selenium等 像QTP经历了很多版本 最新的版本好像叫UFT了 对初学者来说 录制回放是相当容
  • ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)

    参考 Linux之ARM IMX6U 裸机模仿STM32驱动开发格式 作者 一只青木呀 发布时间 2020 08 15 12 11 56 网址 https blog csdn net weixin 45309916 article deta
  • micropython驱动ST7789v 2.4寸液晶显示中文

    一 ST7789v介绍 ST7789v是小尺寸液晶中常用的驱动芯片 作者手里的是网上买的一块2 4寸液晶模组 接口 为SPI接口 网上能找到这个芯片的micropython驱动 这不是本文的重点 本文的重点是如何利用这个驱动 并使用字库的方
  • fb设备驱动1:fb设备的显像原理和步骤

    lcd的显像原理 将DDR内存的一部分划分出来作为显存 显存与lcd显示屏幕之间做一个双向的映射 然后用户只需要将需要显示的内容放入显存之中 然后显存中的内容就会刷新到lcd的储存器中进行显示 显存 在内核之中申请一块内存作为显存 由于内核
  • 驱动学习(六)ioctl

    驱动学习 六 ioctl 文章目录 驱动学习 六 ioctl 1 ioctl 2 命令码 2 1 自定义命令码 2 2 标准命令码 2 2 1 合成标准命令码的宏函数 3 测试ioctl linux内核给用户提供了两类系统调用函数 一类是数
  • 3.gendisk结构体

    在Linux内核中 使用gendisk 通用磁盘 结构体来表示一个独立的磁盘设备 或分区 1 gendisk结构体 major first minor和minors共同表征了磁盘的主 次设备号 同一个磁盘的各个分区共享一个主设备号 而此设备
  • <Linux开发>驱动开发 -之-基于pinctrl/gpio子系统的LED驱动

    Linux开发 驱动开发 之 基于pinctrl gpio子系统的LED驱动 交叉编译环境搭建 Linux开发 linux开发工具 之 交叉编译环境搭建 uboot移植可参考以下 Linux开发 之 系统移植 uboot移植过程详细记录 第
  • 韦东山和正点原子IMX6ULL开发版的区别

    网卡驱动复位引脚硬件区别 网卡 复位脚 厂家 io 网卡0 SNVS TAMPER9 100ask gpio5 IO9 网卡1 SNVS TAMPER6 100ask gpio5 IO6 网卡0 SNVS TAMPER7 正点原子 gpio
  • 32位/64位WINDOWS驱动之-突破进程保护映射的方法进行跨进程读内存2

    32位 64位WINDOWS驱动之 突破进程保护映射的方法进行跨进程读内存2 一 在过保护读写筛选器中添加 读写驱动2 c 驱动层 代码如下 include
  • <Linux开发>驱动开发 -之- Linux LCD 驱动

    Linux开发 驱动开发 之 Linux LCD 驱动 交叉编译环境搭建 Linux开发 linux开发工具 之 交叉编译环境搭建 uboot移植可参考以下 Linux开发 之 系统移植 uboot移植过程详细记录 第一部分 Linux开发
  • 深入分析linux内核的内存分配函数devm_kzalloc

    在分析驱动代码的时候 经常会遇到使用devm kzalloc 为一个设备分配一片内存的情况 devm kzalloc 是内核用来分配内存的函数 同样可以分配内存的内核函数还有devm kmalloc kzalloc kmalloc 它们之间
  • linux应用程序直接return与exit的区别

    在Linux应用程序中 可以使用 return 语句直接从 main 函数返回 这将导致程序终止并返回给操作系统 然而 有时候使用 exit 函数比直接使用 return 语句更有优势 以下是一些原因 清理资源 exit 函数可以确保在程序
  • 学习区分dB、dBm、dBuV、dBi

    dB 对于分贝的概念 很多朋友最早接触这个概念 是用 分贝 评估声音的大小 声音的大小用分贝 dB 表示 是一种对数单位 用来描述声音的强度或功率比例 如果P是我们需要测试的声压级或声功率级 P0是参考值 通常取为标准听觉阈限的声压级 X

随机推荐

  • 前端面试总结

    1 引言 最近参加了大量的招聘会 投递了大量的简历 整整体会了从 随便找个厂上一下 还是的找个大厂 没人要 急了急了 海投一波 工资有点尬 海投中 简单说一下自己的一些感受吧 现在的前端属实有点尴尬 前端的基础教程特别多 最开始本来是觉得自
  • Stata输出统计结果到Excel或word

    目录 一 安装外部包 二 相关命令 三 实例 1 描述性统计结果输出 2 相关性结果输入 3 回归结果输出 1 单模型结果 2 多模型结果 参考 一 安装外部包 在Stata内安装外部包 estout和logout ssc install
  • CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN

    摘要 本文从网络体系结构的角度出发 提出了跨阶段局部网络 CSPNet 来解决以往工作中需要大量推理计算的问题 本文将问题归结为网络优化中的重复梯度信息 所提出的网络通过从网络阶段的开始和结束集成特征映射来注重梯度的可变性 CSPNet易于
  • Flink常用算子总结

    Streaming 算子 Map 将元素处理转换 再输出 map算子对一个DataStream中的每个元素使用用户自定义的Mapper函数进行处理 每个输入元素对应一个输出元素 最终整个数据流被转换成一个新的DataStream 输出的数据
  • 2020年黑苹果硬件配置推荐

    前言 黑苹果硬件配置推荐是一件众口难调的事情 但是为了更多的苹果Mac爱好者能够早日开心顺利的使用上macOS系统 mac996站长还是会200 的努力做好这件事情 也请大家大家多给一些支持和鼓励 注 本文仅针对黑苹果台式机做硬件推荐 不涉
  • 协同过滤算法的一些报错及python函数学习

    文章目录 1 cannot import name jaccard similarity score 2 DataFrame object has no attribute dtype 3 sort values 4 sort index
  • 2023前端面试题及答案整理(JS笔试题)

    JS笔试题 JS类型相关 typeof 没定义的变量会报错吗 typeof let定义了的呢 未声明的变量使用 typeof 返回字符串 undefined typeof 一个 let 定义的变量会因为暂时性死区报错 前提 let cons
  • go语言面试题

    文章目录 1 下面这段代码输出什么 2 下面代码输出什么 3 同级文件的包名不允许有多个 是否正确 4 下面的代码有什么问题 请说明 1 下面这段代码输出什么 func main count 0 for i range 256 struct
  • webpack 学习笔记(二) 打包 AMD模块时 js路径错误

    在使用webpack打包模块的时候遇到的问题 各种百度一直无法解决这个问题 真的对新手太不友好了 webpack 作为 一个模块打包工具 它可以将AMD CMD CommonJs ES6 模块都进行打包 这里推荐一个讲解模块比较详细的博客
  • 华为机考108题(c++)(1-16)

    HJ1 字符串最后一个单词的长度 描述 计算字符串最后一个单词的长度 单词以空格隔开 字符串长度小于5000 注 字符串末尾不以空格为结尾 输入描述 输入一行 代表要计算的字符串 非空 长度小于5000 输出描述 输出一个整数 表示输入字符
  • C语言算法--冒泡排序

    C语言算法 冒泡排序 1 什么是冒泡排序 冒泡排序是一种简单的排序算法 它通过比较相邻元素的大小 并根据需要交换它们的位置来排序数据 它的名称来自于越小的元素会慢慢 冒泡 到数组的开头 冒泡排序的基本思想是从数组的第一个元素开始 依次比较相
  • 修改本机localhost映射dns解析

    去C Windows System32 drivers etc目录下找到hosts文件 进入修改 最后一行添加127 0 0 1 空格 写自己的域名映射 增加后进入cmd命令行窗口输入ipconfig flushdns刷新dns解析 此后就
  • 开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

    不论您是一名开发者 架构师 CTO 如果您曾深度参与在微服务开发中 那么相信您一定有过开源微服务框架或体系选型的疑问 Apache Dubbo Spring Cloud gRPC 以及 Service Mesh 体系产品如 Istio 到底
  • Vinted店铺为什么被封?如何应对?

    Vinted是一家在线二手交易平台 专门用于买卖衣物和时尚配件 自从2022年以来 Vinted也越来越向综合性跨境电商平台转变 细心的伙伴都会发现 近来Vinted这阵子封号确实很严重 感觉是风控变严格了 但是万变不离其宗 说到底封控还是
  • librdkafka编译及简单使用过程简介

    librdkafka 使用了 C 11 使用 VS2010 无法编译 需要使用更高版本的 VS 才能编译 我这里使用的是 VS2017 1 编译版本 编译环境 windows VS2017 openssl 版本 openssl 1 0 2t
  • VRTK——UI控制(点击按钮)

    1 Canvas必须带有VRTK UICanvas脚本 2 LeftControllerScriptAlias RightControllerScriptAlias必须有 VRTK ControllerEvents VRTK Pointer
  • 如何在 Python 和 Node.js 之间通信 JSON 数据?

    JSON 可以缩写为 JavaScript Object Notation 它是一个基于文本的文件 用于在编程语言中传输和存储数据 它由使用内置包即 JSON 的 python 编程语言支持 其文本以带引号的字符串格式给出 其中在大括号 中
  • git Bash上传本地项目到github

    首先登陆个人github账号新建一个仓库 新建好仓库后打开要上传的项目所在位置 右键文件夹 选择Git Bash Here 第一步 git init初始化 第二步 git add 添加到仓库 注 出现警告的话再输入一次 第三步 git co
  • 如何解决ImportError: cannot import name ‘BatchNormalization‘ from ‘keras.layers.normalization‘

    报错如下所示 其实就是版本的问题 改之前的代码 from keras layers normalization import BatchNormalization 改之后 from keras layers normalization ba
  • imx6ull驱动开发经验

    1 背景 imx6ull驱动开发基于正点原子的开发板 上面运行linux 4 1 15内核 根文件系统为ubuntu 16 05 5 LTS 2 加载驱动文件chrdevbase ko文件时 先使用depmod生成依赖文件时 提示无modu