ARM開發之雜項裝置的編寫 以LED驅動為例

2021-07-28 02:49:28 字數 2570 閱讀 1721

平台:s5pv210

雜項裝置的好處:

有了字元型裝置後,為什麼要用雜項裝置?

1.節省主裝置號,所有雜項裝置的主裝置號都是10

2.雜項裝置開發起來比字元型裝置簡單

開發步驟:

1.定義1個雜項裝置

2.定義雜項裝置的檔案操作集

3.申請物理記憶體區

4.獲取相應的虛擬位址

5.註冊混雜裝置

6.示例**

1.定義雜項裝置

static struct miscdevice led_misc = ;
如上**:其中.minor代表動態生成次裝置號,不用改。

.name表示這個混雜裝置檔案結點的名字,使用者程式用open在 /dev 目錄下開啟檔案的就是 .name 的值。

.fops代表雜項裝置的檔案操作集

2.定義檔案操作集

static struct file_operations fops =

;

檔案操作集表示了雜項裝置用了哪些系統呼叫,如上**就是用了 open 和 write。

第乙個引數不用變,.owner一定寫this_module,用於初始化。

3.申請物理記憶體區

static struct resource *res = null;

res = request_mem_region(0xe0200280,8,"led");

上面表示,控制led的實體地址為0xe0200280開始,8個位元組,並把這段記憶體起名為led

4.獲取相應虛擬位址。

作業系統操作的都是虛擬位址。

static unsigned int va = null;

va = ioremap(0xe02000a0,8);

va就是物理位址對映的虛擬位址的起始位址。

5.註冊雜項裝置

int ret;

ret = misc_register(&led_misc);

if(ret < 0)

misc_register()的引數就是第一步定義的雜項裝置變數。

6.示例**(led驅動)

#include #include #include #include #include #include #include #include #include static struct resource* res = null;

static unsigned int *gpj2con_va = null;

static unsigned int *gpj2dat_va = null;

static char wbuf[1];

static ssize_t misc_write(struct file *f, const char __user*buf,

size_t len, loff_t *t)

if(wbuf[0] == '1')

return 0;

}/*2.定義檔案操作集*/

static struct file_operations fops=;

/*1.定義misc雜項裝置變數*/

static struct miscdevice misc_led=;

static int __init misc_init(void)

/*4.獲取虛擬位址*/

gpj2con_va = ioremap(0xe0200280,8);

if(gpj2con_va == null)

gpj2dat_va = gpj2con_va + 1;

/*5註冊雜項裝置*/

ret = misc_register(&misc_led);

if(ret<0)

printk("init completed\n");

return 0;

failed_register:

iounmap(gpj2con_va);

failed_ioremap:

release_mem_region(0xe0200280,8);

failed_request_mem:

return -1;

}static void __exit misc_exit(void)

module_init(misc_init);

module_exit(misc_exit);

module_license("gpl");

使用者程式測試**:

#include #include int main()

while(1)

return 0;

}

HTML5開發之獲取裝置的地理座標

近期一段時間開始學一下html5,發現裡面有好多的知識還是蠻新穎的。所以整理了一下自己練習過的demo給大家分享下,以下的 是通過js介面獲取當前的地理座標。1 這裡時與原來html檔案的差別 charset utf 8 2 這裡時與原來html檔案的差別 html5 demo title head...

HTML5開發之獲取裝置的地理座標

近期一段時間開始學一下html5,發現裡面有好多的知識還是蠻新穎的。所以整理了一下自己練習過的demo給大家分享下,以下的 是通過js介面獲取當前的地理座標。1 這裡時與原來html檔案的差別 charset utf 8 2 這裡時與原來html檔案的差別 html5 demo title head...

ARM嵌入式系統開發之接收函式的實現

接收函式的實現 接收函式主要完成幾個方面的工作 一是檢查接收到的資料報是否正確 二是根據資料報長度在核心空間為資料報申請乙個sk buff 三是把資料報複製到sk buff,填寫相關域段和統計資訊並且把sk buff插入相應的輸入佇列 四是釋放資料報占用的晶元bufffer。下面就結合 片段講述其功...