鍦╩ini2440闁嬬櫦(f膩)鏉夸笂锛圕PU鏄痵3c2440锛夐枊鐧�(f膩)瀛楃瑷�(sh猫)鍌欓﹨(q奴)鍕曞畬鎴愪竴鍊媗ed鐕堢殑浜粎銆�
1. 鐠�(hu谩n)澧�
纭欢鐠�(hu谩n)澧冿細
Host锛歑86PC
Target锛氬弸鍠勪箣鑷俶ini2440闁嬬櫦(f膩)鏉�
杌熶欢鐠�(hu谩n)澧冿細
Host锛歏Mware铏涙摤姗熶笅鐨剅edhat linux 9.0(瀹屽叏瀹夎)
Target锛歛rm-linux kernel:linux-2.6.13
Crosstool: arm-linux-gcc-3.3.2
2. 瀹屾垚閬庣▼
鈶撮﹨(q奴)鍕曠▼搴忔枃浠�--mini2440_one_led.c,鍏跺叿楂斿収(n猫i)瀹瑰涓嬶細
#define DEVICE_NAME "lsq_led"
#define LED_MAJOR 250
#define GPB5_ON 1
#define GPB5_OFF 2
static int mini2440_led_ioctl(
struct inode *inode,
struct file *file,
unsigned int cmd,
unsigned long arg)
{
if (cmd==GPB5_ON) {
//printk("ioctl LEDON successfully\n");
s3c2410_gpio_setpin(S3C2410_GPB5, 0);
return 0;
}
if (cmd==GPB5_OFF) {
//printk("ioctl LEDOFF successfully\n");
s3c2410_gpio_setpin(S3C2410_GPB5, 1);
return 0;
}
printk("ioctl error \n");
return -EFAULT;
}
static struct file_operations mini2440_led_fops = {
.owner = THIS_MODULE,
.ioctl = mini2440_led_ioctl,
};
static int __init mini2440_led_init(void)
{
int ret;
ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &mini2440_led_fops);
if (ret < 0) {
printk(DEVICE_NAME " can''''''''''''''''''''''''''''''''t register major number\n");
return ret;
}
devfs_mk_cdev(MKDEV(LED_MAJOR, 0), S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEVICE_NAME);
s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPB5_OUTP);
s3c2410_gpio_setpin(S3C2410_GPB5, 1);
printk(DEVICE_NAME " initialized\n");
return 0;
}
static void __exit mini2440_led_exit(void){
devfs_remove(DEVICE_NAME);
unregister_chrdev(LED_MAJOR, DEVICE_NAME);
}
module_init(mini2440_led_init);
module_exit(mini2440_led_exit);
鈶� 鎳�(y墨ng)鐢ㄧ▼搴忔枃浠垛€旀枃浠跺悕led.c,鍏跺収(n猫i)瀹瑰涓嬶細
#define GPB5_ON 1
#define GPB5_OFF 2
int main(void)
{
//int k;
int dev_fd;
int retval;
dev_fd = open("/dev/lsq_led",O_RDWR | O_NONBLOCK);
if ( dev_fd == -1) {
printf("Can''t open file /dev/lsq_led\n");
exit(-1);
}
printf ("\n/dev/lsq_led opened successfully, fd=%d\n",dev_fd);
wlile(1)
{
retval=ioctl(dev_fd,GPB5_ON,0);
if(retval==-1){
perror("ioctl LEDON error\n");
exit(-1);
}
sleep(1);
retval=ioctl(dev_fd,GPB5_OFF,0);
if(retval==-1){
perror("ioctl LEDOFF error\n");
exit(-1);
}
sleep(1);
}
close(dev_fd);
}
鈶� 绶ㄨ鎳�(y墨ng)鐢ㄧ▼搴�led.c鐨凪akefile锛屽叾鍏�(n猫i)瀹瑰涓嬶細
all: led
led:
arm-linux-gcc -o led led.c
clean:
@rm -vf mini2440led *.o *~
鈶� 浣垮収(n猫i)鏍告拹鎸佸拰绶ㄨ椹�(q奴)鍕曠▼搴�mini2440_one_led.c锛岄渶鍦ㄧ浉鎳�(y墨ng)鐨勭洰閷勪笅澧炲姞濡備笅鍏�(n猫i)瀹癸紙鑷繁鐨勭繏(x铆)姘o紝鐣�(d膩ng)鐒堕€欎竴姝ユ槸鍙伕鐨勶級锛�
kernel...../drivers/char/
Makefile
obj-$(CONFIG_MINI2440_ONE_LED) += mini2440_one_led.o
Kconfig
config MINI2440_ONE_LED
tristate "mini2440 one LED Driver"
depends on ARCH_S3C2440
help
mini2440 User led, use GPB5.