日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序

發(fā)布時間:2025/3/20 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個led驅(qū)動程序只在linux-2.6.32.2內(nèi)核中測試通過,至于其他的內(nèi)核可能頭文件有一些改動就不能?編譯成功了。下面給出源程序:

這是友善之臂提供的源碼:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define DEVICE_NAME "leds"

//設(shè)備名(/dev/leds)

//LED 對應(yīng)的GPIO 端口列表

static unsigned long led_table[] =

{

S3C2410_GPB(5),

S3C2410_GPB(6),

S3C2410_GPB(7),

S3C2410_GPB(8),

};

//LED 對應(yīng)端口將要輸出的狀態(tài)列表

static unsigned int led_cfg_table[] =

{

S3C2410_GPIO_OUTPUT,

S3C2410_GPIO_OUTPUT,

S3C2410_GPIO_OUTPUT,

S3C2410_GPIO_OUTPUT,

};//如果內(nèi)核相差不大,比如是2.6.30的內(nèi)核,很可能照著這個程序?qū)懙臅r候這個地方會報錯,原因是頭文件不同

/*ioctl 函數(shù)的實現(xiàn)

* 在應(yīng)用/用戶層將通過ioctl 函數(shù)向內(nèi)核傳遞參數(shù),以控制LED

的輸出狀態(tài)

*/

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) {

return -EINVAL;

}

//根據(jù)應(yīng)用/用戶層傳遞來的參數(shù)(取反),通過s3c2410_gpio_setpin

函數(shù)設(shè)置LED 對應(yīng)的端口寄存

//器,

s3c2410_gpio_setpin(led_table[arg],

!cmd);

return 0;

default:

return -EINVAL;

}

}

/*

* 設(shè)備函數(shù)操作集,在此只有ioctl 函數(shù),通常還有read, write,

open, close 等,因為本LED 驅(qū)動在下面已經(jīng)

* 注冊為misc 設(shè)備,因此也可以不用open/close

*/

static struct file_operations dev_fops =

{

.owner = THIS_MODULE,

.ioctl = sbc2440_leds_ioctl,

};

/*

* 把LED 驅(qū)動注冊為MISC 設(shè)備

*/

static struct miscdevice misc =

{

.minor = MISC_DYNAMIC_MINOR,

//動態(tài)設(shè)備號

.name = DEVICE_NAME,

.fops = &dev_fops,

};

/*

* 設(shè)備初始化

*/

static int __init dev_init(void)

{

int ret;

int i;

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

//設(shè)置LED 對應(yīng)的端口寄存器為輸出(OUTPUT)

s3c2410_gpio_cfgpin(led_table[i],

led_cfg_table[i]);

//設(shè)置LED 對應(yīng)的端口寄存器為低電平輸出,在模塊加載結(jié)束后,四個LED

應(yīng)該是全部都是發(fā)光

//狀態(tài)

s3c2410_gpio_setpin(led_table[i],

0);

}

ret = misc_register(&misc);

//注冊設(shè)備

printk (DEVICE_NAME"\tinitialized\n");

//打印初始化信息

return ret;

}

static void __exit

dev_exit(void)

{

misc_deregister(&misc);

}

module_init(dev_init);

//模塊初始化,僅當(dāng)使用insmod/podprobe 命令加載時有用,如果設(shè)備不是通過模塊方式加載,此處將不會被調(diào)用

module_exit(dev_exit);//卸載模塊,當(dāng)該設(shè)備通過模塊方式加載后,可以通過rmmod

命令卸載,將調(diào)用此函數(shù)

MODULE_LICENSE("GPL"); //版權(quán)信息

MODULE_AUTHOR("FriendlyARM Inc.");

//開發(fā)者信息

下面是makefile文件

CROSS=arm-linux-

KERNELDIR =

/root/doc/mini/linux-2.6.32.2//內(nèi)核源碼位置

#定義內(nèi)核源碼的路徑

PWD := $(shell

pwd)

#獲取當(dāng)前路徑

.PHONY: modules

clean

#指明modules、clean為偽目標(biāo)

obj-m +=

mini2440_leds.o

#表示要構(gòu)造的模塊名為s3c24xx_leds.ko

modules:

$(MAKE) -C $(KERNELDIR)

M=$(PWD) modules

#-C:進入$(KERNELDIR)后再執(zhí)行make,讀取那里的Makefile。

#M=$(PWM):然后返回當(dāng)前的位置(驅(qū)動源代碼的位置)繼續(xù)執(zhí)行當(dāng)前的Makefile。

clean:

rm -rf *.o *~ core .depend

.*.cmd ?*.mod.c .tmp_versions

#end

進入目錄后,執(zhí)行make,然后將ko文件通過網(wǎng)絡(luò)或者U

盤傳到板子上,lsmod一下,裝載模塊。

下面的是測試文件leds-test.c:

#include

#include

#include

#include

int main(int argc, char **argv)

{

int on;

int led_no;

int fd;

if (argc != 3 || sscanf(argv[1], "%d",

&led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||

on < 0 || on > 1 || led_no < 0 ||

led_no > 3) {

fprintf(stderr, "Usage: leds led_no

0|1\n");

exit(1);

}

fd = open("/dev/leds0", 0);

if (fd < 0) {

fd = open("/dev/leds", 0);

}

if (fd < 0) {

perror("open device leds");

exit(1);

}

ioctl(fd, on, led_no);

close(fd);

return 0;

}

將生成的.ko模塊文件裝載之后,運行測試文件就可以控制led的變化。

在命令行下執(zhí)行:

#arm-linux-gcc –o leds-test

leds-test.c

將生成可執(zhí)行目標(biāo)文件leds-test,通過網(wǎng)絡(luò)ftp

或者優(yōu)盤把它復(fù)制到開發(fā)板中,比如放在/home/plg 目錄下(注意:開發(fā)板缺省的文件系統(tǒng)已經(jīng)有了led

測試程序,所以我們在此改名為leds-test),在開發(fā)板的命令行終端執(zhí)行:

#/etc/rc.d/init.d/leds stop

該命令將停止led-player 對led

的控制,關(guān)于led-player,可以在用戶手冊中查看詳細的說明。使用leds-test 控制led 方法為:

#leds-test 3 0 ;關(guān)閉LED3

#leds-test 3 1 ;打開LED3

其中第一個參數(shù)為要控制的LED

序號,第二個參數(shù)代表關(guān)閉(0)或者打開(1)對應(yīng)的LED。如圖

總結(jié)

以上是生活随笔為你收集整理的友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最新中文字幕免费 | 国产在线视频你懂的 | 91成人在线免费视频 | 免费激情av | 黄色不卡视频 | 亚洲综合专区 | 久久天堂av | 国产一区二区三区小说 | 欧美你懂的| 字幕网av| 99精品视频国产 | 日日骚网| 国产精品一区二区网站 | 一级片久久久 | 精品久久免费视频 | 欧美一级不卡 | 国产又粗又猛又爽又黄无遮挡 | 2017天天干| 国产一级视频在线观看 | 最近中文字幕在线观看视频 | 中文字幕国产一区二区 | 免费三片在线播放 | 少妇久久久久久久久久 | 欧美一区二区三区黄色 | 免费在线观看黄网站 | 欧美精品一区二区性色a+v | 欧美日韩视频免费观看 | 亚洲精品免费观看 | 欧美巨乳在线 | 亚洲天堂2014| 午夜精品在线 | www.亚洲视频| 禁欲天堂 | 色丁香久久 | 懂色av一区二区三区蜜臀 | 校园春色中文字幕 | 国产一区在线看 | 亚洲综合五月天婷婷丁香 | 久久久精品国产sm调教网站 | 欧美日韩乱国产 | 精品香蕉一区二区三区 | 香蕉伊人网 | 日本视频二区 | 日韩一二三四 | 手机在线永久免费观看av片 | 国产成人无码av | 黄瓜污视频 | 亚洲理论在线观看 | 成年激情网| 国产高清一 | 特级淫片裸体免费看冫 | 国产女人18水真多毛片18精品 | 国产小视频在线免费观看 | 欧美a级大片| 免费在线成人av | 奇米成人网 | 亚洲av毛片一区二二区三三区 | 性少妇mdms丰满hdfilm | 中文字幕有码视频 | 久久久久在线观看 | 在线视频观看一区 | 欧美情爱视频 | 亚洲欧美日韩精品久久亚洲区 | 美女诱惑一区二区 | 欧美大片在线免费观看 | 成年人免费视频播放 | 美日韩丰满少妇在线观看 | 亚洲一区网 | 国产视频在线免费观看 | 国产夫妇交换聚会群4p | av日韩一区二区 | 人人人超碰| 激情 小说 亚洲 图片 伦 | 亚洲午夜精品久久久久久人妖 | 在线观看日本一区二区 | 亚洲少妇一区 | 农村末发育av片一区二区 | 在线观看亚洲视频 | 无码人妻精品一区二区50 | 特黄aaaaaaaaa真人毛片 | a视频在线观看 | 美女裸体跪姿扒开屁股无内裤 | 国产成人在线视频免费观看 | 毛片基地在线观看 | 精品国产乱码久久久久夜深人妻 | 日本在线加勒比 | 嫩模一区二区三区 | 福利视频在线免费观看 | 无码精品国产一区二区三区免费 | 日韩中文字幕免费观看 | 激情视频在线观看免费 | 国产熟妇搡bbbb搡bbbb搡 | 久操福利在线 | 亚洲综合涩 | 在线免费观看h片 | 亚洲AV无码精品久久一区二区 | 尤物av在线 | 免费看污的网站 | 男女性杂交内射妇女bbwxz |