1

デバイスドライバー開発初心者です。MPC837xERDB 評価ボードの GPIO にアクセスしようとしています。

カーネルを にアップグレードし、linux-2.6.28.9サポートを有効にしましたmpc8xxx_gpio.c。起動時に、2 つのgpioコントローラーを正常に検出します。

今私の質問は、gpioピンと通信するためにどのように使用するのですか? ファイル内のコードを変更してmpc8xxx_gpio.cやりたいことを実行する必要がありますか、またはカーネルで提供されるgpios標準API ( / ) を使用できますか。標準のカーネル API も試してみましたが、失敗しました。これが私のコードです:gpiogpio_request()gpio_free()

#include <linux/module.h>
#include <linux/errno.h>  /* error codes */
#include <linux/gpio.h>

static __init int sample_module_init(void)
{
  int ret;

  int i;
  for (i=1; i<32; i++) {
    ret = gpio_request(i, "Sample Driver");
    if (ret) {
      printk(KERN_WARNING "sample_driver: unable to request GPIO_PG%d\n", i);
      //return ret;
    }  
  }

  return 0;
}

static __exit void sample_module_exit(void)
{
  gpio_free(9);
}

MODULE_LICENSE("GPL");

module_init(sample_module_init);
module_exit(sample_module_exit);

次の O/P が得られます。

[  617.075329] sample_driver: unable to request GPIO_PG1
[  617.080418] sample_driver: unable to request GPIO_PG2
[  617.085470] sample_driver: unable to request GPIO_PG3
[  617.090522] sample_driver: unable to request GPIO_PG4
[  617.095574] sample_driver: unable to request GPIO_PG5
[  617.100625] sample_driver: unable to request GPIO_PG6
[  617.105676] sample_driver: unable to request GPIO_PG7
[  617.110727] sample_driver: unable to request GPIO_PG8
[  617.115779] sample_driver: unable to request GPIO_PG9
[  617.120830] sample_driver: unable to request GPIO_PG10
[  617.125968] sample_driver: unable to request GPIO_PG11
[  617.131106] sample_driver: unable to request GPIO_PG12
[  617.136245] sample_driver: unable to request GPIO_PG13
[  617.141383] sample_driver: unable to request GPIO_PG14
[  617.146521] sample_driver: unable to request GPIO_PG15
[  617.151660] sample_driver: unable to request GPIO_PG16
[  617.156798] sample_driver: unable to request GPIO_PG17
[  617.161936] sample_driver: unable to request GPIO_PG18
[  617.167074] sample_driver: unable to request GPIO_PG19
[  617.172213] sample_driver: unable to request GPIO_PG20
[  617.177351] sample_driver: unable to request GPIO_PG21
[  617.182489] sample_driver: unable to request GPIO_PG22
[  617.187628] sample_driver: unable to request GPIO_PG23
[  617.192767] sample_driver: unable to request GPIO_PG24
[  617.197905] sample_driver: unable to request GPIO_PG25
[  617.203042] sample_driver: unable to request GPIO_PG26
[  617.208182] sample_driver: unable to request GPIO_PG27
[  617.213319] sample_driver: unable to request GPIO_PG28
[  617.218458] sample_driver: unable to request GPIO_PG29
[  617.223597] sample_driver: unable to request GPIO_PG30
[  617.228735] sample_driver: unable to request GPIO_PG31
[  617.233873] sample_driver: unable to request GPIO_PG32

誰かが私にサンプルコードなどを提供できますか? 実際にGPIOのピン番号を設定しようとしています。9 はボード上の LED に接続されているため、アクティブ Low になります。

4

2 に答える 2

1

あなたの他の質問から:

# ls /sys/class/gpio/ -la
drwxr-xr-x    4 root     root            0 Jan  1 00:00 .
drwxr-xr-x   24 root     root            0 Jan  1 00:00 ..
--w-------    1 root     root         4096 Jan  1 00:10 export
drwxr-xr-x    3 root     root            0 Jan  1 00:00 gpiochip192
drwxr-xr-x    3 root     root            0 Jan  1 00:00 gpiochip224
--w-------    1 root     root         4096 Jan  1 00:00 unexport

GPIO ピンの 2 つのブロックがあります。1 つのブロックは 192 番から始まり、もう 1 つのブロックは 224 番から始まります。上記のコードでは、プラットフォームに存在しない GPIO 0 ~ 31 を要求しようとしています。

ngpio各ディレクトリ内のファイルを見ると、各ブロックにある GPIO の数を確認できますgpiochip*

于 2010-08-13T18:04:27.000 に答える
0

カーネルソースを調べましDocumentation/gpio.txtたか?

于 2010-08-11T13:37:22.823 に答える