1、/kernel-3.18/arch/arm64/boot/dts/mt6735.dtsiで、DTSファイル内のノードを作成します
デバイスノード名を作成Mygpio、一致する名前「mykgpio」。
2、駆動フレームを書きません
#include <linuxの/ slab.h>
の#include <linuxの/ device.h>
の#include <linuxの/ miscdevice.h>
の#include <linuxの/ device.h>
の#include <linuxの/ uaccess.h>
の#include <linuxの/ fb.h>
の#include <linuxの/ init.h>
の#include <linuxの/ module.h>
の#include <linuxの/ kernel.hを>
する#include </生成をautoconf.h>
の#include <linuxの/ platform_device.h>
# <linux / fs.h>含む
の#include <linuxの/ ioctl.h>
の#include <linuxの/ types.h>に
する#include <linuxの/ spinlock.h>
の#include <linuxの/ cdev.h>
の#include <ASM / uaccess .h>
の#include <ASM / io.h>
の#include <ASM / atomic.h>
#include "MT-PLAT / mtgpio.h"
の#include <linuxの/ types.h>に
する#include <MT-PLAT / mt_gpio.h>
の#include <MT-PLAT / mt_gpio_core.h>
の#include <マッハ/ gpio_const.h >
/ *生命函数定义* /
静的INT mygpio_probe(構造体platform_device * PDEV)。
静的int型mygpio_remove(構造体platform_device * PDEV)。
静的定数構造体of_device_id mygpio_of_match [] = {
{.compatible = "mykgpio"}、
{}、
}。
静的構造体platform_driverのmygpio_driver = {
.remove = mygpio_remove、
.probe = mygpio_probe、
.driver = {
.nameの= "myGPIO"、
.owner = THIS_MODULE、
.of_match_table = mygpio_of_match、
}、
}。
静的INT mygpio_misc_open(構造体iノード* iノード、構造体のファイル*ファイル)
{
のprintk( "MyGPIOオープン\ Rを\ n");
0を返します。
}
静的int型mygpio_misc_release(構造体のinode * iノード、構造体ファイル*ファイル)
{
のprintk( "MyGPIOリリース\ rをする\ nを。");
0を返します。
}
静的長いmygpio_unlocked_ioctl(構造体ファイル*ファイル、unsigned int型CMD、unsigned long型のarg)
{
のprintk( "MyGPIOのioctl \ Rを\ n");
printk( "MyGPIO CMD =%D \ Rを\ n"、CMD)。
0を返します。
}
静的定数構造体file_operationsのmygpio_fops = {
/ * .owner = THIS_MODULE、* /
.open = mygpio_misc_open、
.release = mygpio_misc_release、
.unlocked_ioctl = mygpio_unlocked_ioctl、
}。
静的構造体miscdeviceのmygpio_misc_device = {
.minor = MISC_DYNAMIC_MINOR、//动态设备号
.nameの= "myGPIO"、
.fops =&mygpio_fops、
}。
/ *マイGPIOプローブ* /
静的INT mygpio_probe(構造体platform_device * PDEV)
{
int型RET = 0。
printk( "MyGPIOプローブ\ Rを\ n");
RET = misc_register(&mygpio_misc_device)。
(もし!RET = 0)
のprintk( "myGPIO:mygpio_deviceレジスタは失敗しました\ n");
RETを返します。
}
静的INT mygpio_remove(構造体platform_device * PDEV)
{
int型ERR。
printk( "MyGPIO削除\ Rを\ n");
ERR = misc_deregister(&mygpio_misc_device)。
もし(ERR)
のprintk( "GPIOの\ nを登録解除");
ERRを返します。
}
静的INT __init my_gpio_init(ボイド)
{
int型RET = 0。
printk( "登録MyGPIO platform_driver \ rをする\ nを。");
RET = platform_driver_register(&mygpio_driver)。
(もし!RET = 0)
のprintk( "MyGPIOドライバを登録することができませんでし\ nは。");
RETを返します。
}
/ * ------------------------------------------------ --------------------------- * /
静的ボイド__exitのmy_gpio_exit(ボイド)
{
platform_driver_unregister(&mygpio_driver)。
}
subsys_initcall(my_gpio_init)。
/ * module_init(my_gpio_init); * /
module_exit(my_gpio_exit)。
MODULE_AUTHOR( "Zue、");
MODULE_DESCRIPTION( "MY汎用ドライバ(GPIO)");
MODULE_LICENSE( "GPL v2の");
このプロセスは非常に簡単で、最初のデバイスドライバを登録するとき"mykgpio"の名前にマッチしたDTSデバイスは、プローブ機能にプローブ機能が呼び出されたときに、「myGPIO」その他のデバイスドライバの名前は登録してください。
カーネルにドライバファイル、コンパイルしてミラーをコンパイルあまり書きます。
開発ボードを開始した後、あなたは/ devディレクトリに登録されたデバイスを見ることができます。このような枠組みはOK、ここにあなたがGPIOドライバの物質を書くことができるドライブです。