【问题标题】:Obtaining device drivers from ROMs从 ROM 获取设备驱动程序
【发布时间】:2020-02-28 11:19:48
【问题描述】:

我想在基于 ARM 的智能手机中彻底安装嵌入式 linux。为此,我需要设备驱动程序,例如闪存、显示器等。我想知道是否可以从这些手机供应商提供的 ROM 中提取设备驱动程序?

【问题讨论】:

    标签: android arm embedded embedded-linux linux-from-scratch


    【解决方案1】:

    不,这通常是不可能的。一个困难是由于链接。驱动程序将在 Linux 中调用函数和基础设施。例如,即使kmalloc() 是同一个源,地址空间中的位置也可能不同。要提取代码,您需要将提取的 Linux 地址映射到目标地址。此外,inline 功能的驱动程序很常见,这些功能可能会在另一个模块(如kfifo 等)中调用,这些功能可能会在 Linux 版本之间发生功能变化。更常见的是kfifo 代码将内联在驱动程序中。如果自旋锁功能在 ARM Linux 版本之间发生变化,您需要从驱动程序中提取此信息并将其替换为新版本。最后,还有一些 Linux 功能不仅被弃用,而且被其他一些基础设施完全删除和替换。

    您的问题与 非常相似。从以上一些甚至更多的原因可以看出,要实现这一点非常困难或不可能。这就是人们制作 Linux 内核 GPL 的原因。您应该能够请求源代码并以更有效(且功能正确)的方式对其进行修改。

    【讨论】:

    • 这很有意义。因此,如果无法以板支持包等形式从供应商处获取源代码,那么是否有任何解决方法或任何破解可能?
    • 我认为这取决于设备。当然,有一些闭源操作系统是 Linux 人试图对设备进行逆向工程。在这里,您通常会尝试窥探总线并查看 CPU 和设备之间来回发送的值。然后你必须自己编写驱动程序。如果供应商有数据表(GPU/闪存控制器等),那么编写自己的数据表就“更简单”了。不幸的是,功能性 ROM 的价值并不高。如果您可以从 ROM 中提取 Linux 模块,那么可能可以配置您自己的 Linux 以相当轻松地使用它。
    • 注明。我不太明白“肯定有闭源操作系统是 Linux 人试图对设备进行逆向工程”你是说像 Hackintosh 这样的东西吗?
    • 在像 nVidia 这样的供应商决定制作 Linux 驱动程序之前,人们会对 Windows 驱动程序进行逆向工程to figure out how to make Linux drivers。我相信 nVidia 仍然只发布二进制内核模块。另见mmiotrace.txt
    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多