



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式 ARM 平臺(tái)下的 Linux 字符設(shè)備驅(qū)動(dòng)實(shí)例(目6.1 下面以一個(gè)名為S3C2440_leds.c 的簡(jiǎn)單控制目標(biāo)板”LED 亮滅的驅(qū)動(dòng)為例進(jìn)行分析。標(biāo)板為天嵌TQ2440 ; Linux2.6.25.8 ) 。主要功能是通過應(yīng)用程序調(diào)用該驅(qū)動(dòng)來按制目標(biāo)板的四個(gè) LED 燈的亮滅。驅(qū)動(dòng)源程序如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h&g
2、t;#include <asm/irq.h>#include <asm/arch/regs-gpio.h>#include <asm/hardware.h>cat /proc/devices ”命令看到#define DEVICE_NAME "leds" /* 加載模式后,執(zhí)行”的設(shè)備名稱*/#define LED_MAJOR231/* 主設(shè)備號(hào)*/* 應(yīng)用程序執(zhí)行ioctl(fd, cmd, arg) 時(shí)的第 2 個(gè)參數(shù) */#define IOCTL_LED_ON0#define IOCTL_LED_OFF1 /* 用來指定 LED
3、所用的 GPIO 引腳 */ static unsigned long led_table = S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,;/* 用來指定 GPIO 引腳的功能:輸出 */ static unsigned int led_cfg_table = S3C2410_GPB5_OUTP,S3C2410_GPB6_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB8_OUTP,;/* 應(yīng)用程序?qū)υO(shè)備文件/dev/leds 執(zhí)行 open() 時(shí),* 就會(huì)調(diào)用 s3c24xx_leds_open */ sta
4、tic int s3c24xx_leds_open(struct inode *inode, struct file *file)int i;for(i=0; i<4; i+)s3c2410_gpio_cfpin(led_tablei, led_cfg_tablei)return 0;/* 應(yīng)用程序?qū)υO(shè)備文件/dev/leds 執(zhí)行 iotcl() 時(shí),* 就會(huì)調(diào)用 s3c24xx_leds_iotcl*/static int s3c24xx_leds_iotcl(struct inode *inode, struct file *file, unsigned int cmd, unsi
5、gned long arg)if (arg > 4)return -EINV AL;switch(cmd) case IOCTL_LED_ON:s3c2410_gpio_setpin(led_tablearg, 0);return 0;case IOCTL_LED_OFF:s3c2410_gpio_setpin(led_tablearg, 1);return 0;default:return -EINV AL;/* 這個(gè)結(jié)構(gòu)是字符設(shè)備驅(qū)動(dòng)程序的核心* 當(dāng)應(yīng)用程序操作設(shè)備文件時(shí)調(diào)用的open、 read 等函數(shù),* 最終會(huì)調(diào)用這個(gè)結(jié)構(gòu)中指定的對(duì)應(yīng)函數(shù)static sturct s3c24x
6、x_leds_fops = .owner = THIS_MODULE,.open = s3c24xx_leds_open,.ioctl = s3c24xx_leds_ioctl;/* 模塊的初始化函數(shù)*/static int _init s3c24xx_leds_init(void)int ret;ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &s3c24xx_leds_fops);if(ret < 0)printk(DEVICE_NAME "can't register major numbern");r
7、eturn ret;printk(DEVICE_NAME "initializedn");return 0;/* 模塊的撤銷函數(shù)*/static void _exit s3c24xx_leds_exit(void)unregister_chrdev(LED_MAJOR, DEVICE_NAME);/* 指定驅(qū)動(dòng)程序的初始化函數(shù)和卸載函數(shù)*/module_init(s3c24xx_leds_init);module_exit(s3c24xx_leds_exit);/* 加入描述信息*/MODULE_AUTHOR("ckz");MODULE_DESCRIPT
8、ION("S3C2440 LED Driver");MODULE_LICENSE("GPL");寫好的驅(qū)動(dòng)放在內(nèi)核源文件目錄下: linux2.6.25.8#drivers/char/6.2 以模塊形式編譯及加載修改同目錄下的“ Kconfig ”文件,在合適的地方添加如下內(nèi)容:Config S3C2440_LEDStristate “ S3C2440 LEDS Driver ”depends on ARCH_S3C2440helpLEDS on S3C2440然后再通目錄下修改“ Makefile ” ,添加如下內(nèi)容:Obj-$(CONFIG_ S3C
9、2440_LEDS)+= S3C2440_leds o添加完成以上內(nèi)容之后,輸入 #make menuconfig ,然后配置如下Device Drivers -Character devices -><M> S3C2440 LEDS Driver將其選擇為“ M ” ,然后保存配置,編譯出內(nèi)核鏡像燒寫到開發(fā)板中。然后再使用命令#make SUBDIR=drivers/char modules ,編譯出驅(qū)動(dòng)模塊,在內(nèi)核目錄下的“drivers/char”下面,名為 S3c2440_leds.Ko ,將其復(fù)制到開發(fā)板中的 /lib目錄中。 加載、卸載驅(qū)動(dòng)到目標(biāo)系統(tǒng)中。在/lib
10、目錄下:* insmod S3C2440_leds.KO /* 加載驅(qū)動(dòng) */* rmmod S3C2440_leds.KO /* 卸載驅(qū)動(dòng) */6.3 下面編寫簡(jiǎn)單的應(yīng)用程序來測(cè)試剛才的驅(qū)動(dòng)程序,新建名為 leds.c 的文件#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>int main(int argc, char *argv)int on;int led_no;int fd;if (argc != 3 | sscanf(argv1, "%d", &led_no) != 1 | sscanf(argv2,"%d", &on) != 1 |on < 0 | on > 1 | led_no < 1 | led_no > 4) fprintf(stderr, "Usage: leds led_no 0|1n");exit(1);fd = open("/dev/GPIO-Control", 0);if (fd < 0) perror("open device l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法學(xué)概論中的實(shí)例解析試題及答案
- 軟件設(shè)計(jì)師考試預(yù)測(cè)試題及答案分析
- 項(xiàng)目管理流程中的敏捷方法試題及答案
- 公司人性化戰(zhàn)略與風(fēng)險(xiǎn)管理的協(xié)同創(chuàng)新試題及答案
- 移動(dòng)端開發(fā)技巧考核試題及答案
- 2025屆北京市海淀區(qū)一零一中學(xué)數(shù)學(xué)八下期末監(jiān)測(cè)模擬試題含解析
- 2025年軟件設(shè)計(jì)師備考秘籍試題及答案
- 企業(yè)創(chuàng)新戰(zhàn)略與風(fēng)險(xiǎn)評(píng)估試題及答案
- 深度解析VB考試試題及答案的結(jié)構(gòu)
- 明晰計(jì)算機(jī)二級(jí)VB考試的重要試題及答案
- 2025年廣西物流職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶答案
- 萬科物業(yè)綠化養(yǎng)護(hù)管理手冊(cè)
- 第十二周《遇見勞動(dòng)之美點(diǎn)亮成長(zhǎng)底色》主題班會(huì)
- 世界環(huán)境日環(huán)保教育班會(huì) 課件
- 臨床診療指南-疼痛學(xué)分冊(cè)
- 2024認(rèn)定實(shí)際施工人法律風(fēng)險(xiǎn)防范與合同完善服務(wù)合同3篇
- 2022年新高考全國(guó)Ⅱ卷英語高考真題試卷(含詳解)
- 舞蹈演出編導(dǎo)排練合同模板
- 【MOOC】人工智能原理-北京大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 【MOOC】引領(lǐng)世界的中國(guó)乒乓-西南交通大學(xué) 中國(guó)大學(xué)慕課MOOC答案
評(píng)論
0/150
提交評(píng)論