0

私は現在、さまざまな機能を実行する9軸センサー用のi2cドライバーをゼロから構築することに取り組んでおり、すべてi2c経由でレジスターにアクセスできます。

Linux 用の i2c ドライバーを作成する方法に関するリソースがいくつかありますが、私の問題は、すべてをどこに置くべきかが明確でないことです。これまでのところ、私はドライバーをスケッチしましたが、決して機能していません。

static struct i2c_device_id sps_id[] = {
    {"SPS_test", 0},
    {}
};

static struct i2c_driver sps_test_driver = {
        .driver = {
            .name ="SPS_test",
       },
    .probe = sps_probe,
    .remove = sps_remove,
        .id_table = sps_id;
};

static int __init sps_test_init(void)
{
        return i2c_add_driver(&scout_test_driver);
}

.nameまた、このフィールドが、特定の i2c アドレスを識別するコードの次のビットへのリンクを提供することも知っています。

以下はhttp://lxr.linux.no/linux+v2.6.31/Documentation/i2c/instantiating-devicesから取得した::

   static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };

   int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev)
  {
          (...)
          struct i2c_adapter *i2c_adap;
          struct i2c_board_info i2c_info;

         (...)
         i2c_adap = i2c_get_adapter(2);
         memset(&i2c_info, 0, sizeof(struct i2c_board_info));
         strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE);
         isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info,
                                                    normal_i2c);
         i2c_put_adapter(i2c_adap);
         (...)
 }    

説明に正しく従えば、作業負荷を軽減し、リスクを最小限に抑えるために、既に作成されているアダプターを使用できるように、このルートを選択することをお勧めします。

ここで、その種のプローブを実行する独自のコードをどこで作成すればよいかを知る必要があります。.probeこれは のメンバーに似ていstruct i2c_driverますか? 彼らは同じですか ?

4

0 に答える 0