android mtk 建乙個裝置misc

2021-06-22 13:46:55 字數 2761 閱讀 5827

alps\mediatek\kernel\drivers\makefile 加一行

obj-y   +=  emd_ctl/

obj-y   +=  scandriver/

obj-y   +=  hello/

alps\mediatek\kernel\drivers\scandriver\makefile 加一行

obj-y += demo1.o

alps\mediatek\kernel\drivers\scandriver\test.h

#ifndef test_h

#define test_h

#define test1_magic 'w' //定義幻數為 w

#define test1_power_on _iowr(test1_magic, 0, int)

#define test1_power_off _iowr(test1_magic, 1, int)

#define test1_trig_low _iowr(test1_magic, 3, int)

#define test1_trig_high _iowr(test1_magic, 4, int)

#define test1_maxnr 5

#define test1_cmd1 _io(test1_magic,0x1a)

#define test1_cmd2 _io(test1_magic,0x1b)

#endif

alps\mediatek\kernel\drivers\scandriver\test.c

#include #include #include #include #include #include #include #include #include #include //#include #include #include #include "test.h"

#include #include #include #include #include #define flash_light_gpio gpio126

//#define gpio_modesetup(pin, mode) mt_set_gpio_mode(pin, mode)

//#define gpio_initio(dir, pin) mt_set_gpio_dir(pin, dir)

//#define gpio_writeio(out, pin) mt_set_gpio_out(pin, out)

//#define gpio_readio(pin) mt_get_gpio_in(pin)

void flash_light_set_low(void)

void flash_light_set_high(void)

void flash_light_poweron(void)

void flash_light_poweroff(void)

#define test1_major 184

#define test1_minor 0

#define invalid_no -1

static unsigned char dev_name[10] = "test_flash_light_gpio";

static struct cdev test1dev;

static int test1_open(struct inode* inode, struct file* filp)

//static int test1_ioctl(struct inode *i, struct file *f, unsigned int cmd, unsigned long arg)

static long test1_ioctl(struct file *f, unsigned int cmd,

unsigned long arg)

// if(_ioc_nr(cmd) > flash_light_power_on)

//檢查指向的使用者空間是否合法

//if(_ioc_dir(cmd) & _ioc_read)

//err = !access_ok(verify_write, (void *)arg, _ioc_size(cmd)); //_ioc_size(cmd) 是位元組數

//else if(_ioc_dir(cmd) & _ioc_write)

//err = !access_ok(verify_read, (void *)arg, _ioc_size(cmd)); //讀取使用者空間的記憶體區是否合法

*arg是使用者空間的位址

//if(err)

//return -efault;

switch(cmd)

return 0;

}static int test1_release(struct inode* i,struct file* f)

struct file_operations test1_fops =

;static struct miscdevice test1 = ;

static int __init test1_reg(void)

static void __exit test1_exit(void)

module_init(test1_reg)

module_exit(test1_exit)

操作乙個裝置

操作乙個裝置 無論有沒有作業系統,無論目標平台如何,控制乙個外部裝置的具體步驟都是一樣的。它始終包括如下步驟 迎合裝置電平特性 要使用乙個裝置首先要讓裝置得到它想要的。首先就是給裝置供電。供電從來都不是一件輕輕鬆鬆的事情。交流或直流 對於裝置的工作電壓可能是交流或直流,或同時都有,比如乙個數控的交流...

給自己建乙個track

最近不太經常登入csdn了,經常混跡在cnblogs上面,cnblogs上的更新很快,經常看到不錯的文章,所以很少來csdn了。看到別人寫了那麼多好文章,不管是自己的作品,還是實驗性的探索,還是關於某類問題的總結,都寫出來,覺得這樣做非常好,不管是對別人,對自己,都是一種提高。開始我也經常會把工作中...

unity 建乙個傳送門

1 建乙個第一人稱控制器fpscontroller 和一扇門,將它們複製位移 相對位置不能變 fpscontroller在unity官方資源包匯入,如果你匯入有錯誤可以看我的另一篇文章 unity官方資源包standard assets匯入錯誤 2 建兩個虛擬攝像機 cinemachine crea...