亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? led_driver.c

?? 對初級編寫驅動代碼有非常大的幫助,這是基與 S3C2410的LED_DRIVER, 初學者非常容易看完之后掌握
?? C
字號:
#include <linux/config.h>
#include <linux/fs.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/init.h>
//Please configure your kernel first to use the following headers, because the directory "asm" is a short cut to your arch's "asm" directory.
//So do the headers in the "hardware" sub directory.
#include <asm/io.h>  //This header is for ioremap(), iounmap().
#include <asm/uaccess.h>  //This header is for get_user(), put_user().
#define NAME "led_test"
MODULE_AUTHOR("Lu Xianzi <cosine@126.com>");  //This line and the following 4 lines can be omitted.
MODULE_DESCRIPTION("LED Test Driver");
MODULE_LICENSE("GPL");
//module_param(major, int, 0);
MODULE_PARM_DESC(major, "Major device number");

static int major = 231;  //Define device major
module_param( major, int, 0 );
unsigned long * pREG;  //Definition of register base.

static ssize_t led_test_write(struct file *file, const char __user *data, size_t len, loff_t *ppos)
{
	char buf[256];
	size_t i;
	for (i = 0; i < len && i < 254; i++)
		if (get_user(buf[i], data + i))
			return -EFAULT;

	buf[i] = '\0';
	printk("LED Test - write: user_data %s\n", buf);
	return (len < 255 ? len : 255);
}
static ssize_t led_test_read(struct file *file, char __user *buf, size_t len, loff_t *ppos)
{
	char rbuf[4];
	size_t i;
	long tmp;

	tmp = * (volatile unsigned long *)(pREG + 1);
	rbuf[0] = tmp % 256;
	rbuf[1] = (tmp >> 8) % 256;
	rbuf[2] = (tmp >> 16) % 256;
	rbuf[3] = (tmp >> 24) % 256;

	if (len > 4)
		return 0;
	for (i = 0; i < len && i < 4; i++)
		if (put_user(rbuf[i], buf + i))
			return -EFAULT;
	printk("LED Test - read\n");
	return (len < 4 ? len : 4);
}
static int led_test_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
	unsigned long tmp;
	printk("LED Test - ioctl: param %u %lu\n", cmd, arg);
	switch (cmd)
	{
		case 0:
		case 1:
			if (arg > 3)
				return -EINVAL;
			if (!cmd)
				* (volatile unsigned long *)(pREG + 1) |= (0x80 << arg);
			else
				* (volatile unsigned long *)(pREG + 1) &= ~(0x80 << arg);
			tmp = * (volatile unsigned long *)pREG;
			printk("GPBCON = 0x%lx\n", tmp);
			tmp = * (volatile unsigned long *)(pREG + 1);
			printk("GPBDAT = 0x%lx\n", tmp);
			break;
		default:
			return -EINVAL;
	}
	return 1;
}
static int led_test_open(struct inode *inode, struct file *file)
{
	unsigned m = iminor(inode);
	if (m > 63)
		return -EINVAL;
	printk("LED Test driver opened!\n");
	return nonseekable_open(inode, file);
}
static int led_test_release(struct inode *inode, struct file *file)
{
	printk("LED Test driver released!\n");
	return 0;
}

static struct file_operations led_test_fops = {
	.owner   = THIS_MODULE,
	.ioctl   = led_test_ioctl,
	.write   = led_test_write,
	.read    = led_test_read,
	.open    = led_test_open,
	.release = led_test_release,
};
static int __init led_test_init(void)
{
	int ret;
	unsigned long tmp;

	printk("LXZ LED Test Driver.\n");
	ret = register_chrdev(major, NAME, &led_test_fops);
	if (ret < 0) {
		printk("Unable to register character device!\n");
		return ret;
	}
	pREG = ioremap(0x56000010, 0x20);
	printk("Virtual addr base = 0x%lx\n", (unsigned long)pREG);
	tmp = * (volatile unsigned long *)pREG;
	printk("GPBCON = 0x%lx\n", tmp);
	tmp = * (volatile unsigned long *)(pREG + 1);
	printk("GPBDAT = 0x%lx\n", tmp);
	printk("Seting LED Test Driver...\n"); 
	* (volatile unsigned long *)pREG = 0x155555;
	* (volatile unsigned long *)(pREG + 1) = 0xfff;
	tmp = * (volatile unsigned long *)pREG;
	printk("GPBCON = 0x%lx\n", tmp);
	tmp = * (volatile unsigned long *)(pREG + 1);
	printk("GPBDAT = 0x%lx\n", tmp);

	* (volatile unsigned long *)pREG = 0x15555A;
	tmp = * (volatile unsigned long *)pREG;
	printk("GPBCON = 0x%lx\n", tmp);
	* (volatile unsigned long *)pREG = 0x155552;
	tmp = * (volatile unsigned long *)pREG;
	printk("GPBCON = 0x%lx\n", tmp);
	printk("LED Test Driver initiated.\n"); 
	return 0;
}
static void __exit led_test_cleanup(void)
{
	int ret;

	iounmap(pREG);

	ret = unregister_chrdev(major, NAME); 
	if (ret < 0)
		printk("Unable to register character device!\n");
	else
		printk("LED Test Driver unloaded!");
}
module_init(led_test_init);
module_exit(led_test_cleanup);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人欧美一区二区三区小说| 欧美日韩国产首页在线观看| 91视频91自| 欧美性欧美巨大黑白大战| 欧美日韩国产一级| 久久夜色精品一区| 中文字幕中文字幕中文字幕亚洲无线| 亚洲欧美另类综合偷拍| 污片在线观看一区二区| 国产成人综合在线观看| 91成人免费在线视频| 日韩欧美高清dvd碟片| 中文字幕va一区二区三区| 午夜视频在线观看一区二区 | 色综合咪咪久久| 91麻豆精品国产91久久久资源速度| 久久九九国产精品| 亚洲亚洲精品在线观看| 国产一区二区电影| 欧美丝袜自拍制服另类| 国产亚洲制服色| 亚洲一区二区成人在线观看| 国产精品自拍一区| 欧美色精品在线视频| 国产亚洲欧美日韩俺去了| 亚洲国产综合色| 国产suv精品一区二区883| 欧美日韩激情一区| 中文字幕第一页久久| 全国精品久久少妇| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 一本到高清视频免费精品| 日韩久久免费av| 亚洲动漫第一页| 成人av手机在线观看| 日韩精品一区二区三区四区| 亚洲免费观看视频| 国产成a人无v码亚洲福利| 欧美男生操女生| 亚洲精品成人少妇| 国产精品亚洲人在线观看| 69堂国产成人免费视频| 亚洲日本va在线观看| 国产精品综合二区| 日韩久久精品一区| 午夜久久久久久电影| 99久久777色| 久久久久久久久久久久久女国产乱 | 国产剧情一区在线| 5858s免费视频成人| 亚洲黄色av一区| 成人网在线免费视频| 日韩精品一区二| 舔着乳尖日韩一区| 欧美午夜在线一二页| 亚洲欧美日韩国产手机在线| 成人av免费在线观看| 国产日韩欧美在线一区| 久久99精品国产91久久来源| 欧美精品 国产精品| 亚洲综合色成人| 91女厕偷拍女厕偷拍高清| 国产精品天干天干在线综合| 国产成人在线视频免费播放| 精品国产乱子伦一区| 日本vs亚洲vs韩国一区三区| 欧美一区二区在线视频| 天天色 色综合| 欧美一区二区三区啪啪| 爽好久久久欧美精品| 欧美酷刑日本凌虐凌虐| 亚洲图片有声小说| 欧美视频在线不卡| 亚洲成人一区二区| 欧美高清精品3d| 日韩高清不卡一区二区| 91麻豆精品国产自产在线| 日韩电影在线观看网站| 欧美精品99久久久**| 欧美aaaaa成人免费观看视频| 欧美一级片在线看| 蜜臀久久99精品久久久久宅男 | 美国毛片一区二区三区| 欧美一级精品在线| 国内精品视频一区二区三区八戒| 2020国产精品自拍| 国产成人综合精品三级| 中文字幕制服丝袜成人av| 99国产精品久久久久久久久久| 自拍偷拍国产亚洲| 欧美视频在线一区二区三区| 日本伊人午夜精品| 国产偷v国产偷v亚洲高清| 成人三级伦理片| 亚洲精品国产第一综合99久久| 欧美日本在线视频| 国产麻豆精品视频| 亚洲视频小说图片| 欧美日韩国产高清一区二区三区 | 国产一区二区三区香蕉| 欧美精品一区二区在线播放 | 99久久er热在这里只有精品15| 1024亚洲合集| 一本到一区二区三区| 亚洲图片欧美色图| 色网站国产精品| 成人免费在线播放视频| 91免费小视频| 亚洲第一激情av| 欧美一区二区在线看| 国产馆精品极品| 国产日韩av一区二区| 成人永久看片免费视频天堂| 亚洲欧洲精品天堂一级 | 国产欧美日韩卡一| 成人久久视频在线观看| 亚洲精品免费在线播放| 欧美日韩在线播| 国产成都精品91一区二区三| 综合久久一区二区三区| 色av成人天堂桃色av| 视频一区二区国产| 欧美mv日韩mv国产网站| www.色精品| 久久99日本精品| 中文字幕一区二区日韩精品绯色| 在线视频综合导航| 蜜臂av日日欢夜夜爽一区| 日本一区二区不卡视频| 色综合久久久久久久久久久| 麻豆精品一区二区| 国产精品久久国产精麻豆99网站| 欧美丝袜自拍制服另类| 国产综合色在线视频区| 伊人婷婷欧美激情| 欧美久久一二区| 91在线观看下载| 日韩黄色一级片| 国产精品久久久久久久久晋中| 欧美日韩一区二区欧美激情| 国产美女在线观看一区| 午夜精品久久久久久久99水蜜桃| 国产亚洲精品免费| 欧美三级中文字| 国产精品资源在线看| 亚洲一区二区三区四区五区黄| 久久久精品人体av艺术| 欧美日韩中文国产| 国产麻豆视频一区| 午夜电影网一区| 国产精品久久久久影院亚瑟 | 亚洲一区二区三区四区五区黄| 精品久久久久久久久久久久包黑料 | 色综合咪咪久久| 久久丁香综合五月国产三级网站 | 国产高清在线精品| 日韩在线卡一卡二| 亚洲欧洲无码一区二区三区| 日韩欧美精品在线视频| 一本大道久久a久久精二百| 国产一区二区电影| 亚洲一区二区在线观看视频| 综合网在线视频| 久久人人超碰精品| 欧美日韩国产精品成人| 99这里只有精品| 美女爽到高潮91| 日韩中文字幕区一区有砖一区 | 国产一区在线不卡| 亚洲激情图片一区| 综合色中文字幕| 欧美国产综合色视频| 精品久久国产老人久久综合| 欧美日韩美少妇| 日本韩国欧美国产| 在线视频国内一区二区| 成人h动漫精品| 国产一区二区福利| 青青草国产精品97视觉盛宴 | 91香蕉视频mp4| av影院午夜一区| 粗大黑人巨茎大战欧美成人| 韩日欧美一区二区三区| 视频在线观看一区| 亚洲1区2区3区视频| 午夜精品在线看| 亚洲成人激情社区| 亚洲一区精品在线| 一区二区三区丝袜| 亚洲人成影院在线观看| 国产三级精品三级在线专区| 欧美成人r级一区二区三区| 欧美亚洲国产一区在线观看网站| 99久久综合色| 99视频精品全部免费在线| 国产精华液一区二区三区| 成人激情av网| 国产成人av一区二区三区在线观看| 久久国产精品一区二区| 精品在线视频一区|