點亮led過程分析

2021-06-11 23:13:46 字數 2704 閱讀 6850

在mini2440中,led,按鍵等驅動預設已經被編譯入核心,所以一直不知道同乙個硬體裝置資源能不能作為多個模組,編譯入核心。

故重寫了乙個myled.ko,系統預設是led.ko,並用應用程式檢測。

myled.c

#include #include #include #include #include #include #include #include #include #include #include #include #include #include //**************

static struct device *dev;

//*************

#define device_name "myled"

static struct cdev *cdevp=null;//定義乙個cdev結構體,並初始化

static dev_t devno;//定義乙個裝置號

static unsigned long led_table = ;

static unsigned int led_cfg_table = ;

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

s3c2410_gpio_setpin(led_table[arg],!cmd);

return 0;

default:

return -einval;

}}//應用程式與驅動映

static struct file_operations myled_fops = ;

//**************

static struct class *led_class;

//**************

static int __init myled_init_module(void)

//****************************

led_class= class_create(this_module,device_name);

if(is_err(led_class))

dev=device_create(led_class,null,devno,null,device_name);

//**************************

cdevp = cdev_alloc();//動態申請乙個cdev記憶體

cdev_init(cdevp,&myled_fops);//初始化cdev

cdevp->owner = this_module;

err=cdev_add(cdevp,devno,1);

if(err)

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

printk(device_name "\tinitialized! 2012-12-9\n");

return 0;

}static void __exit myled_exit_module(void)

module_init(myled_init_module);

module_exit(myled_exit_module);

module_license("gpl");

module_author("tong 2012-12-9");

makefile如下

ifneq ($(kernelrelease),)

obj-m:=myled.o

else

kdir := /opt/friendlyarm/mini2440/linux-2.6.32.2_fa

all:

make -c $(kdir) m=$(pwd) modules arch=arm cross_compile=arm-linux-

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif

拷貝到開發板上,insmod myled.ko可在/dev下生成裝置節點myled.ko現在採用系統給出的例程,但修改裝置節點為myled,led.c (必須使用交叉編譯器)

先用/etc/rc.d/init.d/leds stop關閉系統初始化中,開啟的讓四個led迴圈閃動的服務,

通過ioctl函式可以控制讓哪個led,是亮還是滅,能成功。

說明了,同乙個硬體裝置資源能被作為多個模組,換成不同的名字,互不干擾,也就是說可以同時硬體資源可以為應用程式中的多種服務工作,可以聯想一下智慧型手機是如何工作的。

點亮LED燈(一)

想當初都是用彙編來編寫微控制器的程式,那滋味現在想來都是滿滿的回憶,還是用c語言寫起來爽快啊!用c寫微控制器程式,只需要引入標頭檔案即可,實際上該標頭檔案只是定義了特殊功能暫存器位址。為了今後使用方便,我們封裝乙個函式,用來開關led燈,通過引數來控制操作的p埠,並且引入掩碼來操作單個和多個bit位...

ARM邏輯 點亮LED

一.led的工作特性及原理圖 d26為電源指示燈 其他led正極接到vdd3.3v 負極接到4個io口 要點亮led要將負極所接到額io口為低電平 發現gpio 通用輸入輸出 口之後需要去找到控制響應io的暫存器 gpio就是晶元的引腳 作為gpio的這類引腳,功能和特點是可以被程式設計控制它的工作...

樹莓派 點亮LED

首先是樹莓派的gpio的結構圖 然後是用python寫的點亮led的 import rpi.gpio as gpio 匯入gpio庫 import time 匯入時間庫 gpio.setmode gpio.bcm 設定io模式 gpio.setup 26,gpio.out 初始將26引腳設為輸出狀態...