c-如何使用linux i2c驱动程序来闪存二进制文件



我被告知使用此驱动程序通过I2C将二进制文件闪存到某个芯片。

我对自定义驱动程序或以任何方式修改都不感兴趣,真的,我只是希望学习足够的知识来使用max77958_update_action_mtp函数:

max77958_update_action_mtp(struct max77958_dev *max77958,
const u8 *action_bin, int fw_bin_len)

以将二进制(action_bin(闪存到某个i2c设备(max77958(。

我完全不懂嵌入式开发和c编程,但据我所知,我需要管理以下内容:

  1. 将此驱动程序包含在其他一些c文件中,并解决任何丢失的依赖项(已完成(
  2. 创建一些max77958_dev,并将指向此函数的指针作为第一个参数传递
  3. 将二进制文件作为const u8打开,并将指针作为第二个参数传递

我是否误解了我需要完成的步骤?

假设我已经理解了我需要正确采取的步骤:

步骤1

我设法在/usr/src/linux-headers-5.4.0-122-generic/下找到了我系统中的所有头文件,而不是一个名为<linux/wakelock.h>的头文件,根据我所知,这是一些Android特定的头文件。所以我把它注释掉了,并将尝试删除编译器抱怨的任何内容,因为我不需要任何与Android相关的内容。

步骤2

看起来有一些默认的max77958_devstruct我可以使用吗?根据VS Code中结构的定义,我可以看到它的定义位于这里,但我在c中太过熟悉,无法理解这里的东西是否有助于我创建一个具有一些默认值的默认max77958_dev结构,或者我是否必须以某种方式知道所有正确的值并自己创建一个。

我也完全没有注意到Ubuntu PC将如何连接到这个I2C设备。我想我可以从FTDI或类似的地方获得一些USB-2-I2C加密狗,但我的C代码如何知道通过这个加密狗与I2C从属设备通信?

步骤3

我想我可以弄清楚如何在二进制文件中读取,但奇怪的是,这是一个const u8。二进制肯定大于8位。猜测这是对指针缺乏理解,但有人能澄清一下我应该如何将二进制文件引入这个函数吗?

我被告知使用该驱动程序通过I2C将二进制文件闪存到某个芯片。

据我所见,这个驱动程序已经推送了固件。但如果我正确理解的话,你将走向完全不同的方向。尝试在用户空间应用程序中重用设备驱动程序中的某些代码显然是行不通的。

相反,将此驱动程序构建为一个模块,并将MAX77958连接到其一条I2C总线上加载到目标机器上。如何实例化设备是另一个问题,并且取决于体系结构——若要在x86上使用Ubuntu,可以从用户空间手动执行。

在步骤3:将指针传递给fw_bin_len所说的u8。这样的指针可以指向单个字节,也可以指向字节数组中的第一个字节。C无法区分这些用法。

最新更新