为嵌入式系统中的平台总线编写设备驱动程序?

2024-01-07

我已经浏览了 Linux 内核源代码中的一些驱动程序实现,可以看到这些是平台驱动程序。

drivers/net/ethernet/smsc/smsc911x.c

  static struct platform_driver smc911x_driver = {
    .probe           = smc911x_drv_probe,
    .remove  = smc911x_drv_remove,
    .suspend         = smc911x_drv_suspend,
    .resume  = smc911x_drv_resume,
    .driver  = {
            .name    = CARDNAME,
            .owner  = THIS_MODULE,
    },
};

上面是平台设备(基于 smsc 的以太网控制器)的驱动程序,平台设备是在系统启动期间不会自动探测的设备,与 pci 总线上的传统设备不同。

我想我的这个理解在这里可以吗?

现在,当我说它是平台设备时,是否意味着这些设备(以太网控制器)位于平台总线上,而在 ARM 架构上,默认平台总线是 AMBA。

那么,当我们在基于 ARM 的板上焊接以太网控制器时,它应该位于 AMBA 总线上或与 AMBA 总线连接吗?

我们如何决定要编写的驱动程序是平台驱动程序还是普通驱动程序?


根据我开发 ARM 平台驱动程序的有限经验,AMBA 设备通常在其内存映射 IO 寄存器接口的末尾有标识寄存器。

一般来说,如果您查看以太网控制器的参考手册,并且寄存器摘要指定了外设/组件标识寄存器(通常位于偏移量 0xFE0-0xFEC 和 0xFF0-0xFFC),则您应该编写 AMBA 总线驱动程序。公交车司机可以自动识别这些司机。

否则,如果寄存器接口未在偏移量 0xFE0-0xFEC 和 0xFF0-0xFFC 处指定任何 ID 寄存器,您可能只想编写一个平台驱动程序。这些设备无法自动识别,您需要专门为设备附加驱动程序。

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

为嵌入式系统中的平台总线编写设备驱动程序? 的相关文章

  • u-boot:搬迁

    这是一个与u boot相关的基本问题 为什么 u boot 代码会自行重新定位 好吧 如果 u boot 是从 NOR flash 或启动 ROM 空间执行 那么这是有道理的 但如果它已经从 SDRAM 运行 为什么它必须再次重新定位自己呢
  • 使用Linux虚拟鼠标驱动

    我正在尝试实施一个虚拟鼠标驱动程序根据基本 Linux 设备驱动程序书 有一个用户空间应用程序 它生成坐标以及内核模块 See 虚拟鼠标驱动程序和用户空间应用程序代码 http www embeddedlinux org cn Essent
  • 在链接时合并全局数组/从多个编译单元填充全局数组

    我想定义一系列的东西 比如事件处理程序 的内容 该数组在编译时是完全已知的 但定义在 多个编译单元 分布在多个库中 至少在最终 静态 链接之前是相当解耦的 我想要 也保持这种方式 因此添加或删除编译单元将 还可以自动管理事件处理程序 而无需
  • 将 mmap 内核启动参数保留的内存映射到用户空间

    正如中所讨论的this https stackoverflow com q 1911473 143897问题 我在启动时使用内核启动参数保留一个内存块memmap 8G 64G 我写了一个字符驱动程序 http pete akeo ie 2
  • 在嵌入式 Jetty 上使用 DefaultServlet 提供静态 html 文件

    我正在开发一个需要独立的项目 因此我决定将 Jetty 嵌入到我的应用程序中 我将提供静态 HTML 页面 一些 JSP 页面 并且还将使用一些自定义 servlet 我找到了一个完美的示例 说明如何设置嵌入式 Jetty 来完成所有这一切
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 什么是遗留中断?

    我正在开发一个项目 试图弄清楚 ARM 架构的全局中断控制器中如何处理中断 我正在使用 pl390 中断控制器 我看到有一条线被称为传统中断 它绕过了分配器逻辑 假设有 2 个中断可以被编程为传统中断 任何人都可以帮助解释一下什么是遗留中断
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 设备树不匹配:.probe 从未被调用

    我无法理解设备树的工作原理 或者具体来说为什么该驱动程序无法初始化 这是在 android 版本 3 10 的 rockchip 供应商内核中 驱动程序 看门狗 rk29 wdt c 为了可读性而减少 static const struct
  • 交叉编译armv5,但它创建v7二进制文件

    我设法为arm926ej s创建了一个目标文件我在 qemu 上使用 Debian Arm arm linux gnueabi gcc 4 4 static O c mcpu arm926ej s hello c o hello root
  • ARM Cortex-M3 启动代码

    我试图了解 STM32 微控制器的 Keil realview v4 附带的初始化代码是如何工作的 具体来说 我试图了解堆栈是如何初始化的 In the 文档 http infocenter arm com help index jsp t
  • 可以对 Xcode 中的 Arm 架构设置进行一些澄清

    据我了解 iPhone 5将采用新的架构 armv7s 我的项目具有有效的架构armv7 并且有Build Active Architecture Only set to true 由于现在商店中的每个应用程序都是为armv6 and or
  • 为什么前向引用 ADR 指令在 Thumb 代码中以偶数偏移进行汇编?

    To bx对于 Thumb 函数 需要设置地址的最低有效位 GNU 作为文档states https sourceware org binutils docs as ARM Opcodes html当地址是从一个生成时这是如何工作的adr伪
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 在用户程序中使用 或在驱动程序模块代码中使用 ...这有关系吗?

    我正在开发一个设备驱动程序模块和关联的用户库来处理ioctl 来电 该库获取相关信息并将其放入一个结构中 该结构被传递到驱动程序模块中并在那里解压 然后进行处理 我省略了很多步骤 但这就是总体思路 一些数据通过结构体传递ioctl is u
  • A64 Neon SIMD - 256 位比较

    我想将两个小端 256 位值与 A64 Neon 指令 asm 进行有效比较 平等 为了平等 我已经有了解决方案 bool eq256 const UInt256 lhs const UInt256 rhs bool result 首先 将
  • 如何在没有竞争条件的情况下将两个 32 位计数器读取为 64 位整数

    内存 0x100 和 0x104 是两个 32 位计数器 它们代表一个 64 位定时器并且不断递增 如何正确读取两个内存地址并将时间存储为 64 位整数 一种错误的解决方案 x High y Low result x lt lt 32 y
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为

随机推荐

  • 如何从 SwiftUI 视图返回到 UIKit?

    我在 HostingViewController 和 UIKit Viewcontroller 中有一个 SwiftUI 我的目标是通过按下按钮在它们之间切换 问题是我无法从 HostingViewController 内的 SwiftUI
  • 如何查看已索引的分析数据?

    您如何查看索引某些内容后存储的分析数据 我知道你可以像这样搜索一下 http localhost 9200 local products fr fields search 但我想看到的是实际数据而不是 source 就像你调用 analyz
  • 按列表中第一项分组的列表列表中元素的平均值

    我的清单看起来像my list A 6 7 A 4 8 B 9 3 C 1 1 B 10 7 我想找到每个内部列表中其他两列的平均值 这些列表按每个内部列表中的第一列分组 A 5 7 5 B 9 5 5 C 1 1 A 5 7 5 来自 A
  • 使用 ASP.NET MVC 在 Internet Explorer 中“无法下载文件”

    所以我要返回一个FileContentResult从这样的动作 return File pck GetAsByteArray application vnd openxmlformats officedocument spreadsheet
  • SQLite 循环语句?

    SQLite中有没有类似的循环语句FOR in LOOP或类似的东西 我有两列StartRange EndRange我需要在另一个表中插入整个序列 因此 如果StartRange是 1 并且EndRange是 3 需要用这些值进行三个插入1
  • 为什么嵌入 iframe 的 Facebook 应用程序中的 XFBML 标记不显示任何内容?

    我一直在尝试让这个应用程序在 Facebook 上运行 但是 应用程序中似乎没有任何内容呈现 除了 Hi this is some sample text A box stroked in red I am My photo and a d
  • SQL:插入新记录或仅替换某些字段的查询

    我的数据库是 SQLite 但我确信问题通常适用于 SQL 比如说 我有一个表 students 其中包含 id 主键 name selected 列 我有时需要从外部源更新所述表 但我只收到一个包含 id 和名称的表 当每行发生所述更新时
  • 如何为log4jdbc配置log4j2.xml?

    有谁知道如何配置 log4j2 xml 文件以使用 log4jdbc 我已经搜索了几个小时 但似乎找不到任何东西 log4jdbc依赖SLF4J http www slf4j org 迄今为止 SLF4J 和 Log4j 2 之间还没有合适
  • 是否需要同时关闭 NetworkStream 和 TcpClient,还是只关闭 TcpClient?

    我正在阅读有关 TcpClient Close 的文档 http msdn microsoft com en us library system net sockets tcpclient close 28v VS 100 29 aspx并
  • lit-html 的动态标签不可能吗?

    谁能告诉我为什么我不能在 list html 中使用变量html method const h1 h1 return html lt h1 class a heading classes gt
  • 使用 html 按钮按键盘上的转义键

    HTML 按钮 按下时模拟按下 ESC 键盘按键 因此 单击按钮与用户按键盘上的 ESC 键具有相同的效果 如果以任何方式肯定不可能 请告诉我 什么方法都可以 编辑 我不想按 ESC 键来触发某些东西 我想要相反的东西 触发 ESC 键 试
  • Python - 以非线性方式运行循环

    所以 我正在寻找一种以 for 循环方式循环遍历项目列表的方法 但我希望循环以 随机 方式迭代 即我不希望循环进行 0 1 2 3 m 1 n 我希望它以某种随机顺序选择它 并且仍然遍历所有项目的循环 这是我当前的循环代码 for sing
  • 验证特定电子邮件特定域设计 3 ruby​​ on Rails 4

    我之前发布了一个关于如何使用验证仅允许使用以 grenoble em com 结尾的电子邮件地址的访问者能够在我的网站上注册的问题 我正在使用 devise 3 和 Rails 4 我对它相当陌生 希望得到任何答案 这是我的用户模型 cla
  • Putty 有时喜欢在我的命令行中打印自己

    所以 有时当我通过连接到linux服务器的putty用C语言编程时 在执行我的C文件进行测试后 命令行会重复填写 PuTTY 一词30到40次 有时它会在我的程序中多次显示该单词 还有其他人有类似的问题吗 如果与此有关的话 我也会进行文件
  • 如何安全地设置GitLab环境变量?

    我不想将敏感凭证 如 API 密钥 密码等 放入我的分支中 为此 GitLab 和其他 CI CD 服务 能够设置环境变量 它们将在部署过程中注入到脚本中 我知道 GitLab 设置它们的两种方法 Via UI Project Settin
  • 摆动时平滑的圆角

    我想为我的摆动应用程序制作平滑的圆角 但我无法获得我想要的结果 这是截图 1 setShape 对于 JFrame 2 压倒性的paintComponent JPanel 的方法而不是使用setShape 3 setBackground n
  • 我们可以在 xpath 值中使用正则表达式吗?

    我们可以在 xpath 值中使用正则表达式吗 我正在使用 xpath 值来识别网络上的自动化元素 我有以下 xpath 值 xpath id ngdialog4 div 2 div 2 table tbody tr td 1 input 但
  • 将 Observables 与反馈合并,将 Observable 与其自身合并

    我需要创建 Observable 它将从不同的来源 其他 Observables 收集信息 每个来源都会对事件值产生影响 但该值仍然是基于先前的值 一种状态机 构建的 我们有带有 int 值和操作代码的消息 class Message In
  • 如何在 Typescript 中将接口转换为映射类型

    背景 In the 打字稿文档 https www typescriptlang org docs handbook advanced types html mapped types对于映射类型 给出以下示例 type Proxy
  • 为嵌入式系统中的平台总线编写设备驱动程序?

    我已经浏览了 Linux 内核源代码中的一些驱动程序实现 可以看到这些是平台驱动程序 drivers net ethernet smsc smsc911x c static struct platform driver smc911x dr