在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引腳設為輸出狀態...