imx6ull驱动开发经验

article/2025/9/17 11:20:04

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文件增加,如下图。

 


http://chatgpt.dhexx.cn/article/ynJkKpAa.shtml

相关文章

【盘点】imx6的应用

导读: i.mx6系列应用处理器因其高性能,低功耗以及令人瞩目的多媒体功能等特性,被广泛运用于消费电子、工业以及汽车车载娱乐系统等新应用中。 今天为大家盘点一下启扬i.MX6嵌入式主板的部分实际应用。 以智能、多媒体为中心、基于触摸的设备市场正在迅速…

imx6 usb增强信号强度

USB信号 参考:官方文档 USB信号完整性取决于许多因素,如电路设计、PCB布局、堆叠和阻抗。每个产品可能彼此不同,因此客户需要微调参数,以获得最佳的信号质量。 测试板已经路由出两个USB端口:一个OTG1,一个主机。每个端…

iMX6ULL上手体验

CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。 本博文对应地址: https://hceng.cn/2018/03/28/iMX6ULL上手体验/#more 第一次接触NXP/Freescale的SOC,记录拿到板子后快速上手的技巧和思维…

imx6ul 驱动详解

链表的知识: struct list_head { struct list_head *next, *prev; };API函数 函数 功能LIST_HEAD声明并初始化双向链表。INIT_LIST_HEAD初始化双向链表。list_add在链表头head节点后面插入一个新的节点new。list_add_tail在链表末尾tail节点后面插入一个新的节点n…

IMX6 / IMX8 系列芯片简单对比

imx6有: imx8 分为: IMX8/IMX8M/IMX8X三个系列 IMX8有:iMX 8qm 和 IMX8-QP IMX8M有:IMX8mn 、 IMX8mm 、 IMX8mq 、IMX8mp 3.IMX8X 有:iMX8dxp / iMX8qxp 和 iMX8dx

IMX6启动流程

目录 1. 流程图 2. u-boot.imx的构造 1. 流程图 正常情况下,一台IMX6设备的启动路径就是图中自上而下最左边那条路: 启动/复位后先检查CPU的ID(每颗芯片独一无二) ------> 检查复位状态(有没有按下复位键) ------> 检查boot模式(mmc? USB? SPI…

ARM恩智浦IMX6系列-产品开发无忧-四种主控核心

ITOP-IMX6 开发平台是基于 NXP 的 IMX6 系类的芯片开发的一款产品,CPU 采用 Cortex-A9 内核,主频达1Ghz。 ITOP-IMX6 开发板平台均由核心板和底板构成,核心板的主要芯片有 CPU,内存,EMMC,电源管理,EEPROM 等…

关于NXP公司的IMX6系列芯片参考资料体系介绍

IMX6系列芯片由FreeScale公司基于ARM核设计开发,该公司于2015年被NXP公司收购。之前由FreeScale提供支持的资源被整合进NXP支持体系,资料内部FreeScale和NXP的标记都有,文档内部原有资源链接失效,给人混乱感。加之IMX6系列芯片本身…

伺服电机矢量控制原理与仿真(1)控制系统的建立

自动控制原理综合实践 直流伺服电机及其控制为什么是六步换向法类比有刷直流电机类比三相异步电机这些差异意味着什么 从六步换向到FOCFOC的大体流程FOC的目的电流环的执行器:SVPWM 从物理走向数学直流伺服电机的数学模型(正弦式)从数学模型到…

台达PLC模拟量或台达伺服电机控制模块程序案例

台达PLC模拟量或台达伺服电机控制模块程序案例,二选一 ID:6958618562901252Anh13309639501 以下内容不属于本博内容,仅仅是相关参考: 台达PLC采用可以编制程序的存储器,用来在其部存储执行逻辑运算、顺序运算、计时、计数和算术运…

使用Arduino开发板控制伺服电机

大多数情况下,直流电机控制的控制方法都是非常简单的(只需要连接电源和地)。伺服电机有一些不同,它使用3根线连接(电源、地和信号)将电机移动到某个旋转位置。该位置由信号线上发送的信号决定。一旦电机到达…

步进伺服电机控制程序: 1.实现步进电机的正转、反转控制 2.相对和绝对位置运动

步进伺服电机控制程序: 1.实现步进电机的正转、反转控制 2.相对和绝对位置运动 3.电机复位找原点功能 4.显示电机的当前位置 硬件:1西门子S7-200PLC 2.昆仑通泰MCGS触摸屏 3.步进电机驱动器(不限制厂家) 西门子200步进电机控制 4810625077520119gao699592

三菱fx3u型PLC和昆仑通泰MCGS触摸屏控制松下伺服电机控制程序

三菱fx3u型PLC和昆仑通泰MCGS触摸屏控制松下伺服电机控制程序 一、包含内容: mcgs7.7触摸屏程序 2.三菱FX3U型PLC梯形图程序一个,带IO表 3.PLC和伺服电机接线图一个 4.伺服电机使用手册 二、主要功能: 1.伺服电机运动速度设定 2.伺服电机运动…

伺服电机

1.简介 伺服系统(servomechanism)是使物体的位置、方位、状态等输出被控量能够跟随输入目标(或给定值)的任意变化的自动控制系统。伺服主要靠脉冲来定位,基本上可以这样理解,伺服电机接收到1个脉冲&#xf…

机器人关节伺服电机PID串级控制

机器人的运动控制系统 通常由电机控制器、电机驱动、电机本体(多为伺服电机)组成。电机控制器具备智能运算功能,并可传送指令以驱动电机。驱动可提供增压电流,根据控制器指令以驱动电机。电机可以直接移动机器人,也可通过传动系统或链条系统…

机器人关节伺服电机三环控制方式

伺服电机(servo motor )是指在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置。 伺服电机可以控制速度,位置精度非常准确,可以将电压信号转化为转矩和转速以驱动控制对象。伺服电机转子转速受输入信…

CANOpen DS402伺服电机控制项目总结

公司的电机控制要统一到CANOpen上面来,协议栈用的CanFestival,配合RTThread进行控制。 要控制伺服电机,最先搞明白的就是控制字6040和状态字6041。一共使用过三个厂家的伺服电机,控制字都是一样的,但是状态字各家有自…

STM32微控制器综合实训11 伺服电机控制器设计实验

实验11 伺服电机控制器设计实验 了解伺服电机的应用领域,掌握伺服电机的速度控制模式、伺服电机的位置控制模式。 文章目录 程序设计伺服电机的速度控制模式代码讲解main.ctimer.c 伺服电机的位置控制模式代码讲解main.ctimer.c 编译仿真伺服电机的速度控制模式伺服…

伺服电机PID控制及增益调节

1、伺服电机3环 电流环:最内环,此环在伺服启动器内进行,装在线圈上的霍尔元件通过检测磁场强度转化为电流,把电流负反馈给输入端。电流环是控制的根本,任何控制都是通多电流来作为媒介控制的。可用于转矩控制&#xf…

STM32脉冲伺服电机控制器参考技术方案

STM32脉冲伺服电机控制器参考技术方案 id661871202965&