女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]一 leds的驅(qū)動程序位置:linux 2.6.29/drivers/char/mini2440_leds.c#include #include #include #include //具體頭文件位置/opt/FriendlyARM/mini2440/linux-2.6.29/arch/arm/mach-s3c2410/include/mach/*.h#includ

一 leds的驅(qū)動程序

位置:linux 2.6.29/drivers/char/mini2440_leds.c

#include
#include

#include
#include //具體頭文件位置/opt/FriendlyARM/mini2440/linux-2.6.29/arch/arm/mach-s3c2410/include/mach/*.h

#include
#include
#include //具體的頭文件位置為/opt/FriendlyARM/mini2440/linux-2.6.29/include/linux/*.h

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include


#define DEVICE_NAME "leds" //定義驅(qū)動程序的名字為leds

static unsigned long led_table [] = {
S3C2410_GPB5,
S3C2410_GPB6,
S3C2410_GPB7,
S3C2410_GPB8,
}; //定義引腳的寄存器數(shù)組(無符號長整形,對應(yīng)于引腳的地址)

static unsigned int led_cfg_table [] = {
S3C2410_GPB5_OUTP,
S3C2410_GPB6_OUTP,
S3C2410_GPB7_OUTP,
S3C2410_GPB8_OUTP,
}; //定義引腳功能,為輸出(無符號整形)

static int sbc2440_leds_ioctl(
struct inode *inode,
struct file *file,
unsigned int cmd,
unsigned long arg)
{
switch(cmd) {
case 0:
case 1:
if (arg > 4) { //設(shè)備節(jié)點,文件描述符,LED燈編號,LED燈狀態(tài)四個命令參數(shù)
return -EINVAL;
}
s3c2410_gpio_setpin(led_table[arg], !cmd);
return 0;
default:
return -EINVAL; //EINVAL:表示向函數(shù)傳遞了無效的參數(shù)(errno符號變量)
}
}

//初始化字符設(shè)備驅(qū)動的file_operations 的結(jié)構(gòu)體

static struct file_operations dev_fops = {
.owner = THIS_MODULE,
.ioctl = sbc2440_leds_ioctl,
};

static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR, /* 動態(tài)設(shè)備號 */
.name = DEVICE_NAME, /* 將在/dev目錄生成led設(shè)備 */
.fops = &dev_fops, /* 驅(qū)動接口 */

};

static int __init dev_init(void)
{
int ret;

int i;

for (i = 0; i < 4; i++) {

/*設(shè)置GPIO對應(yīng)的配置寄存器GPIOCON為輸出狀態(tài)*/

s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);

/*設(shè)置GPIO對應(yīng)的數(shù)據(jù)寄存器GPIODAT為低電平,在模塊加載結(jié)束后,四個LED應(yīng)該是全部都是發(fā)光狀態(tài)*/

s3c2410_gpio_setpin(led_table[i], 0);
}

//注冊設(shè)備

ret = misc_register(&misc);

printk (DEVICE_NAME"tinitializedn");

return ret;
}

//注銷設(shè)備驅(qū)動

static void __exit dev_exit(void)
{
misc_deregister(&misc);
}

module_init(dev_init); /*聲明加載模塊初始化函數(shù)*/
module_exit(dev_exit); /*聲明卸載模塊清除函數(shù)*/
MOUDLE_LICENSE("GPL"); /*許可證聲明*/
MODULE_AUTHOR("FriendlyARM Inc."); /*作者信息*/


1 static 關(guān)鍵字的重要性

全局變量和函數(shù)全部用static 進行修飾,則其作用的范圍僅僅限于當前的文件,而不是整個系統(tǒng)。防止編譯器在連接時,會報告命名錯誤的“名字空間污染”的問題。

2 ioctl()函數(shù)

static int sbc2440_leds_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

ioctl函數(shù)是文件結(jié)構(gòu)中的一個屬性分量。ioctl是設(shè)備驅(qū)動程序中對設(shè)備的I/O通道進行管理的函數(shù)。所謂對I/O通道進行管理,就是對設(shè)備的一些特性進行控制,例如串口的傳輸波特率、馬達的轉(zhuǎn)速等等。
struct inode *inode,是設(shè)備節(jié)點號。fd就是用戶程序打開設(shè)備時使用open函數(shù)返回的文件標示符,cmd就是用戶程序?qū)υO(shè)備的控制命令,unsigned long arg是控制命令的個數(shù)。
驅(qū)動程序提供了對ioctl的支持,用戶就可以在用戶程序中使用ioctl函數(shù)控制設(shè)備的I/O通道。如果函數(shù)返回一個非負值,那么該值會被返回給調(diào)用程序,表示成功。韓式一般通過switch{case}對設(shè)備的一些特性進行控制。switch{case}結(jié)構(gòu),每一個case對應(yīng)一個命令碼,做出一些相應(yīng)的操作。在本例中的cmd有兩個可選項0和1.0表示燈滅,1表示燈亮。所以case 0,1都要進行操作。由于實際的硬件連接中,是低電平燈亮。所以在對引腳賦值時要取反。 s3c2410_gpio_setpin(led_table[arg], !cmd)

3 static int __init dev_init(void)
_init 宏,定義在include/linux/init.h中。對于非模塊加載的驅(qū)動程序,通過_init 宏,會把函數(shù)中的代碼放到.text.init段。這個段在系統(tǒng)啟動后會被釋放。這樣函數(shù)代碼只有在啟動時執(zhí)行一次,所以可以釋放它們以節(jié)省內(nèi)存空間,

3初始化字符設(shè)備驅(qū)動的file_operations 的結(jié)構(gòu)體

結(jié)構(gòu)體file_operations在頭文件 linux/fs.h中定義,用來存儲驅(qū)動內(nèi)核模塊提供的對 設(shè)備進行各種操作的函數(shù)的指針。該結(jié)構(gòu)體的每個域都對應(yīng)著驅(qū)動內(nèi)核模塊用來處理某個被請求的 事務(wù)的函數(shù)的地址。

4ret = misc_register(&misc);

misc_register()用主編號10調(diào)用 register_chrdev(),設(shè)備名稱和函數(shù)表指針通過miscdevice數(shù)據(jù)結(jié)構(gòu)獲得。同樣,miscdevice 數(shù)據(jù)結(jié)構(gòu)還保存設(shè)備驅(qū)動程序所使用的次要號碼。完成設(shè)備的注冊。

5 printk()

利用 printk可以實現(xiàn)內(nèi)核到Linux 控制臺的格式化輸出。其用法與標準C的printf類似。在調(diào)用驅(qū)動程序時,依靠printk輸出信息跟蹤程序,是很有效的方法。與標準C的printf 不同的是,printk支持分級輸出。默認為第四級的輸出KERN_ERR。

二 LED測試程序

/opt/FriendlyARM/mini2440/examples/leds

#include /*下面函數(shù)要用到的頭文件*/
#include
#include
#include

int main(int argc, char **argv) /*運行時參數(shù)傳遞,開或關(guān)哪個LED*/
{
int on; /*定義led狀態(tài)變量,1表示燈亮,2表示燈滅*/
int led_no; /*定義led變量--哪個led*/
int fd; /*定義led設(shè)備文件描述符的變量*/
if ( argc != 3 || /*判斷命令輸入?yún)?shù)個數(shù)*/
sscanf(argv[1], "%d", &led_no) != 1 || /* 第一個字符串參數(shù)表示要操作led*/

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

驪住實驗室成為首家兩次成功獲得德國國家認可委員會(DAkkS)認證的衛(wèi)浴品牌。這家位于德國海默的開發(fā)實驗室主要從事配件測試。 測試程序遵照國際標準執(zhí)行。 驪住亦向其他有相應(yīng)產(chǎn)品測試需求的企業(yè)開放獨立實驗室。...

關(guān)鍵字: 配件 測試程序 INNOVATION ISO

移植環(huán)境1,主機環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。2,集成開發(fā)環(huán)境:Elipse IDE3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

關(guān)鍵字: mini2440 u-boot 移植 dm9000驅(qū)動

移植環(huán)境1,主機環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。2,集成開發(fā)環(huán)境:Elipse IDE3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

關(guān)鍵字: eeprom i2c mini2440 u-boot 移植

以下是驅(qū)動的源碼。#includelinux/config.h//配置頭文件#includelinux/kernel.h//用于調(diào)用kmalloc和kfree#includelinux/sched.h//調(diào)度,進程睡眠,...

關(guān)鍵字: gpio mini2440 驅(qū)動led

1.硬件原理2440有5個16位定時器,其中0、1、2、3有PWM功能,有一根輸出引腳,可以產(chǎn)生周期性高低電平變化。定時器4沒有輸出引腳。2.芯片手冊3.mini2440電路圖4.S3C2440寄存器定時器時鐘源是PCL...

關(guān)鍵字: mini2440 硬件篇 pwm定時器

移植環(huán)境1,主機環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。2,集成開發(fā)環(huán)境:Elipse IDE3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc...

關(guān)鍵字: Linux mini2440 內(nèi)核 開發(fā)環(huán)境 移植

通用異步收發(fā)傳輸器(UniversalAsynchronousReceiver/Transmitter),通常稱作UART,是一種異步收發(fā)傳輸器。UART以全雙工方式傳輸數(shù)據(jù),最簡單的連線只有2根,TxD用于發(fā)送,RxD...

關(guān)鍵字: mini2440 uart 硬件篇

//定義LED設(shè)備的名稱,這里是leds,這個模塊加載后,會自動在/dev目錄里創(chuàng)建該名字的設(shè)備文件。#define DEVICE_NAME "leds"//mini2440開發(fā)板上有4個LED(發(fā)光...

關(guān)鍵字: LED驅(qū)動 mini2440

S3C2440芯片對外提供的引腳上,只給出了27根地址線,單靠芯片上的27根引腳只能訪問128M的外設(shè)空間。為了擴大外設(shè)的訪問范圍,S3C2440芯片又提供了8個片選信號nGCS0~nGSC7。當某個片選信號nGSCx有...

關(guān)鍵字: mini2440 內(nèi)存初始化

移植環(huán)境1,主機環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。2,集成開發(fā)環(huán)境:Elipse IDE3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

關(guān)鍵字: mini2440 u-boot 移植 引導(dǎo)內(nèi)核
關(guān)閉