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...