系统版本:Ubuntu18.04-64

编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)

uboot版本:2018.07 -linux4sam_6.0

板子型号:at91sama5d3x-xplained

MCU型号:sama5d36

RTC型号:RX8025T

[Datasheet] RX8025T时钟芯片解读

Linux内核中驱动的方式有很多种实现方式,rtx8025是基于iic总线通讯,会使用内核的总线驱动框架,在次基础上实现驱动功能。
驱动开发在调试阶段很难避免要修修改改,如果源码编译到内核里面,每次修改就需要重新编译内核、烧录内核,然后启动文件系统后,再用应用程序去验证驱动的正确性,效率实在是低下;所以很多聪明的大神就想出一招使用模块的方式,动态把驱动程序加载到内核中,可以动态加载和卸载,对应项目实战开发非常高效,也是工作中必备的技能。

一、内核源码中先屏蔽Rtc8025驱动程序

内核中源码必须把rtx8025驱动不能编译进内核,否则驱动注册进去后,就无法再次加载一个名字相同的驱动文件了。

linux-at91-linux-4.19-at91\drivers\rtc\Makefile文件修改,屏蔽掉编译选项;

linux-at91-linux-4.19-at91\drivers\rtc\rtc-rx8025.c就不会编译进内核;

二、把驱动文件复制出来

驱动文件复制一份,做相应的修改

设备树文件添加rtc8025驱动,iic的管脚定义等;

        i2c2: i2c@f801c000 {//根据硬件选择寄存器号,i2c2dmas = <0>, <0>;    /* Do not use DMA for i2c2 */pinctrl-0 = <&pinctrl_i2c2_pu>;//管脚定义status = "okay";rx8025: rx8025@32 {compatible = "rx8025";reg = <0x32>;//iic器件地址status = "okay";};};i2c2: i2c@f801c000 {compatible = "atmel,at91sam9x5-i2c";reg = <0xf801c000 0x4000>;interrupts = <20 IRQ_TYPE_LEVEL_HIGH 6>;dmas = <&dma1 2 AT91_DMA_CFG_PER_ID(11)>,<&dma1 2 AT91_DMA_CFG_PER_ID(12)>;dma-names = "tx", "rx";pinctrl-names = "default";pinctrl-0 = <&pinctrl_i2c2>;#address-cells = <1>;#size-cells = <0>;clocks = <&twi2_clk>;status = "disabled";};i2c2 {pinctrl_i2c2: i2c2-0 {atmel,pins =<AT91_PIOA 18 AT91_PERIPH_B AT91_PINCTRL_NONE   /* TWD2 pin, conflicts with LCDDAT18, ISI_D2 */AT91_PIOA 19 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* TWCK2 pin, conflicts with LCDDAT19, ISI_D3 */};};

设备匹配驱动文件,这里主要依据设备名比对的方式,名称一致,匹配成功。

三、编写对应的Makefile文件,指定内核路径,编译出.ko文件

rtc-8025.c暂时不用修改内核,编译看看是否会报错;

模块驱动的Makefile注意事项

四、加载测试

编译出的ko文件为rtc-rx8025.ko

拷贝到文件系统,修改权限

#chmod 777 rtc-rx8025.ko

#insmod rtc-rx8025.ko加载到内核

#hwclock -r查看对应的时钟寄存器

模块驱动就可以调试了。

更多linux知识点推荐:

[linux kernel]内核启动阶段控制IO口时序输出

[职场吐槽]如何缓解焦虑

[linux kernel] 内核下ksz8081驱动调试

[linux kernel] 内核下ksz9031驱动调试

[linux kernel]内核图形化裁剪配置

[linux kernel]内核移植过程记录

[linux kernel] 内核启动流程梳理

[linux 底层]u-boot EMMC驱动

[linux 底层]u-boot图形化裁剪配置

[Linux 底层]U-boot ksz9031网络驱动调试

[Linux 底层]U-boot调试命令使用技巧

[Linux 底层]U-boot编译移植

[Linux 底层]U-boot烧录脚本介绍SecureCRT

[Linux 底层]bootstrap移植裁剪及编译

[Linux 底层] 平台软件分层介绍

[Linux 驱动] RS485测试程序编写

[Linux 驱动] CAN测试程序编写

推荐阅读:

芯片手册解读 | Linux底层 | 职场吐槽 | C语言视频

关注微信公众号,回复“rtc8025模块驱动”,下载启动文件源代码。

[Linux 驱动]模块加载RTX8025驱动相关推荐

  1. linux ipv6模块,有关Linux ipv6模块加载失败的问题

    有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载. 主要检查内容: ipv6地址 ...

  2. Linux内核如何加载固件,驱动是如何工作的_Linux设备驱动的固件加载详解

    作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, 以至于甚至一点用作设备控制固件的 EEPROM 的成本制造商都不愿意花费. ...

  3. java 手动加载数据库驱动_JAVA加载数据库驱动(JDBC)

    JAVA加载数据库驱动(JDBC) 前言 之前,对Class.forName("com.mysql.jdbc.Driver");这条动态加载JDBC驱动感觉很疑惑,故有了这篇短文. ...

  4. linux u盘加载硬盘驱动,在linux下加载U盘或移动硬盘

    只在CentOS4.3用过,其它发行版可能会通不过,网上查一下吧. 把U盘或移动硬盘插入服务器 运行命令: fdisk -l /dev/sda 会看到如下信息: Disk /dev/sda: 40.0 ...

  5. 驱动学习 - 加载.卸载驱动

    #ifdef __cplusplus extern "C" { #endif#include <ntddk.h> //以"C"语言的方式编译 #if ...

  6. Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...

    Linux中mod相关的命令 内核模块化   mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...

  7. linux Pci字符驱动基本加载流程

    今天有朋友问我linux系统Pci字符驱动加载流程,简单整理了一下,顺便做个记录. 首先说下需要包含的头文件: 一个完整的字符驱动一般包含下面这些头文件: #include <linux/typ ...

  8. linux centos fedora audio root 普通用户声卡驱动安装 加载 声音

    linux  centos fedora Audio root 及普通用户声卡及声音的问题 大家用linux大部分当作服务器用的,谁用这玩意听歌,看电影啊,毕竟是玩吗,玩来玩去,声音给浪丢了,那也不能 ...

  9. linux优盘驱动目录,Linux U盘加载阵列卡驱动步骤(.dd或img).doc

    Linux U盘加载阵列卡驱动步骤(.dd或img) 如果没有Linux的机器,可以使用安装光盘的Linux环境:将?U?盘完全慢速格式化,将驱动拷贝到U盘,将U盘插在服务器上,用Linux安装光盘第 ...

  10. linux加载的驱动无法卸载,linux驱动加载后不能再卸载

    在 编写驱动程序的时候有时候会出现这种情况,模块加载之后不能卸载或卸载之后不能在加载,cat /proc/devices 后发现设备还占用着设备号,这种情况下,再次加载驱动模块肯定不会成功,必须重新启 ...

最新文章

  1. mysql init file_mysql中参数--init-file的作用是什么呢?
  2. nginx 添加自定义头部信息
  3. Android ActionBar完全解析,使用官方推荐的最佳导航栏(下) .
  4. java开根号函数_Java中真的只有值传递么?
  5. 如何将SmartDraw中的图形导出LATEX可用的EPS格式?
  6. 1_boostrap概述
  7. 你知道source map如何帮你定位源码么?
  8. 安卓 qemu 运行linux,在Qemu的beagleboard上运行Android
  9. 【点滴】向Sql Express数据库文件中注册Asp.NET 2.0用户管理模块
  10. 【语音去噪】基于matlab谱减法+最小均方+维纳滤波语音去噪【含Matlab源码 1542期】
  11. HTML5期末大作业:中华美德文化网站设计——中华美德文化(6页) HTML+CSS+JavaScript 中国传统美德文化网页HTML代码
  12. 74ls20设计半加器_用74ls138设计全加器
  13. 用python实现文件加密功能
  14. 2021-2027全球与中国拆弹机器人市场现状及未来发展趋势
  15. 测试分析报告(GB8567——88)基于协同的在线表格forture-sheet
  16. linux 压缩保持属性不变,linux文件压缩
  17. 记一次JAVA中字符串首字母大写转化为小写的Code
  18. 如何在两个k8s上使用kubefate部署fate集群?
  19. Symantec 赛门铁克系列软件清除工具
  20. 金融风控-申请评分卡模型-申请评分卡介绍

热门文章

  1. 阿里电话面试被虐经历
  2. 计算机基础简明教案,计算机基础完整教案
  3. 菲尼克斯电源模块的安装
  4. 【Git】Failed to connect to github.com port 443 after 21092 ms: Connection refused
  5. 计算机网络网线制作与测试结果,《计算机网络》网线制作实验报告.doc
  6. 计算机电源复位,关于Apple本本的电池复位(重置电源管理、电池重置)方法
  7. 计算机电路基础 - 1,计算机电路基础1.1.doc
  8. Asp.NET之入门
  9. 算命师傅的好帮手:一款简单好用又使用的排盘工具--灵棋排盘
  10. PowerDesigner16.5下载和安装教程