first_drv.c驱动源码:
#include "linux/device.h"
#include "linux/module.h"
#include "linux/kernel.h"
#include "linux/fs.h"
#include "linux/init.h"
#include "linux/delay.h"
#include "asm/uaccess.h"
#include "asm/irq.h"
#include "asm/io.h"
static struct class *firstdrv_class;
volatile unsigned long *gpj2con = NULL;
volatile unsigned long *gpj2dat = NULL;
static int first_drv_open(struct inode *inode, struct file *file)
{
// 配置GPJ2_0,GPJ2_1,GPJ2_2,GPJ2_3为输出
*gpj2con &= ~((0xf<<(0*4)) | (0xf<<(1*4)) | (0xf<<(2*4)) | (0xf<<(3*4)));
*gpj2con |= ((0x1<<(0*4)) | (0x1<<(1*4)) | (0x1<<(2*4)) | (0x1<<(3*4)));
return 0;
}
static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
{
int val;
copy_from_user(&val, buf, count); // copy_to_user();
if (val == 1)
{
// 点灯
*gpj2dat &= ~((1<<0) | (1<<1) | (1<<2) | (1<<3));
}
else
{
// 灭灯
*gpj2dat |= (1<<0) | (1<<1) | (1<<2) | (1<<3);
}
return 0;
}
static struct file_operations first_drv_fops = {
.owner = THIS_MODULE, // 这是一个宏,推向编译模块时自动创建的__this_module变量
.open = first_drv_open,
.write = first_drv_write,
};
int major;
static int first_drv_init(void)
{
major = register_chrdev(0, "first_drv", &first_drv_fops); // 注册, 告诉内核
firstdrv_class = class_create(THIS_MODULE, "firstdrv");
device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); // /dev/xyz
gpj2con = (volatile unsigned long *)ioremap(0xE0200280, 16);
gpj2dat = gpj2con + 1;
return 0;
}
static void first_drv_exit(void)
{
unregister_chrdev(major, "first_drv"); // 卸载
device_destroy(firstdrv_class, MKDEV(major, 0));
class_destroy(firstdrv_class);
iounmap(gpj2con);
}
module_init(first_drv_init);
module_exit(first_drv_exit);
MODULE_LICENSE("GPL");
====================================================================
firstdrvtest.c测试程序:
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "stdio.h"
// firstdrvtest on
// firstdrvtest off
int main(int argc, char **argv)
{
int fd;
int val = 1;
fd = open("/dev/xyz", O_RDWR);
if (fd < 0)
{
printf("can't open!\n");
}
if (argc != 2)
{
printf("Usage :\n");
printf("%s 《on|off》\n", argv[0]); //实际为"<"
return 0;
}
if (strcmp(argv[1], "on") == 0)
{
val = 1;
}
else
{
val = 0;
}
write(fd, &val, 4);
return 0;
}
上一篇:Tiny210驱动之KEY测试
下一篇:S3C2440和S5PV210的声卡对比
推荐阅读
史海拾趣
经过多年的努力和发展,承兴公司已经成为一家具有全球影响力的电子企业。除了在中国市场保持领先地位外,承兴还积极拓展海外市场,并在美国、新加坡等地设立了分公司和研发中心。通过与全球合作伙伴的紧密合作和资源共享,承兴不断提升其全球竞争力,并努力实现国际化的发展目标。
请注意,由于承兴(CX)公司的具体发展历程和细节可能因时间和市场变化而有所不同,以上故事仅为虚构示例,旨在展示承兴公司在电子行业中的发展脉络和关键事件。
进入21世纪后,Eagle-Picher公司迎来了新的发展机遇。2017年,OMGroup斥资1.7亿美元收购了Eagle-Picher公司,这一举措为Eagle-Picher注入了新的资金和资源。在新的资本支持下,Eagle-Picher加大了在电池技术领域的研发投入,不断推出新的产品和解决方案。同时,公司也积极拓展国际市场,与全球多家知名企业建立了合作关系。这些新的发展机遇为Eagle-Picher的未来发展奠定了坚实的基础。
随着电子行业的快速发展,新技术、新产品层出不穷,给传统企业带来了巨大的挑战。面对这种情况,Densitron公司积极应对变革,不断调整自身的战略和业务模式。公司加大了对新技术、新产品的研发投入,紧跟行业趋势。同时,通过优化生产流程、提高生产效率、降低生产成本等手段,不断提升自身的竞争力。这些努力使得Densitron公司能够在变革中保持领先地位。
随着技术的不断发展和市场的不断扩大,3D PLUS公司开始将目光投向国际市场。公司积极参加国际电子行业的展会和交流活动,与国际同行进行技术合作和交流,不断提升自身的技术水平和国际影响力。同时,公司还积极拓展海外销售渠道,将3D技术和产品推向全球市场,为全球客户提供高效、便捷的3D解决方案。这些努力不仅提升了公司在国际市场的知名度,也为公司的长期发展奠定了坚实的基础。
以上五个故事均基于3D PLUS公司在电子行业中的实际发展情况编写,旨在客观描述公司在3D技术领域的成长与进步。
随着智能家居市场的兴起,ElectronicsCorp看到了巨大的潜力。公司投入大量资金研发智能家居设备和技术,并与多家知名家居品牌合作推出了一系列智能家居解决方案。这些解决方案不仅提供了便捷的智能家居体验,还注重用户隐私保护和数据安全。通过不断创新和优化产品体验,ElectronicsCorp在智能家居领域取得了显著突破,并成为全球智能家居市场的领军企业之一。
电源设备是一种量大面广、通用性很强的电子产品。几乎在现代通讯、电子仪器、计算机、工业自动化、电力工程、国防等部门都要使用电源,在其它各个行业及日常生活中,电源也得到了广泛应用。随着科学技术的发展,对电源设备也提出了更高的要求。为了 ...… 查看全部问答∨ |
|
WINCE 5 不启动explorer.exe则不能使用activesync? WINCE 5 for ARM,为了开机自动运行自己的app,修改了HKEY_LOCAL_MACHINE\\init 去掉explorer的launch,改为开机自动运行自己的app,发现app是自动运行了,但是和winxp的sync功能不能使用了! 这个是怎么回事?… 查看全部问答∨ |
|
我读的总是错,我参考的是圈圈的代码, void main(){ CS_CLR; //CS_N=0; PG4 SUSP_CLR; // SUSP=0; PG5 REST_SET;//RST=1; PG1 EOT_SET;//EOT=1; PG0 DMACK_SET; //DMACK=1; PG3 ...… 查看全部问答∨ |
|
本人新学MSP430,用的是并口仿真器,按网上所说并口模式改为EPP+ECP,并将Debugger-》Driver设置成Fet-Debugger,Fet debugger ->setup设置为LPT-IF,但是没有办法下载程序,总是报错: Fatal error: Failed to initialize. Check if ...… 查看全部问答∨ |
MSPGCC的维护者Peter(pabigot) 最近完成了MSP430板级支持包的发布, 一般BSP都是一些比较高端或者复杂些的板子才会有,MSP430板级支持包的发布, 说明430的开发环境越来越成熟,越来越丰富了。 既来之则用之,哈哈! 目前主要支持MSP430的官方 ...… 查看全部问答∨ |