历史上的今天
返回首页

历史上的今天

今天是:2024年11月14日(星期四)

正在发生

2019年11月14日 | TQ2440开发板 Linux第一个驱动--点灯

2019-11-14 来源:51hei

我用的是TQ2440开发板,这个程序是参考韦东山的.

4盏LED灯

以下是驱动程序

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include


static struct class *firstdrv_class;

static struct class_device        *firstdrv_class_dev;


volatile unsigned long *gpbcon = NULL;

volatile unsigned long *gpbdat = NULL;



static int first_drv_open(struct inode *inode, struct file *file)

{

        //printk("first_drv_openn");

        /* 配置gpb5,6,7,8为输出 */

        *gpbcon &= ~((0x3<<(5*2)) | (0x3<<(6*2)) | (0x3<<(7*2)) | (0x3<<(8*2)));

        *gpbcon |= ((0x1<<(5*2)) |(0x1<<(6*2)) | (0x1<<(7*2)) | (0x1<<(8*2)));

        return 0;

}


static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)

{

        int val;


        //printk("first_drv_writen");


        copy_from_user(&val, buf, count); //        copy_to_user();


        if (val == 1)

        {

                // 点灯

                *gpbdat &= ~((1<<5) | (1<<6) | (1<<7) | (1<<8));

        }

        else

        {

                // 灭灯

                *gpbdat |= (1<<5) | (1<<6) | (1<<7) | (1<<8);

        }

        

        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");


        firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); /* /dev/xyz */


        gpbcon = (volatile unsigned long *)ioremap(0x56000010, 16); //0x56000010是的GPIOB的

        gpbdat = gpbcon + 1;

        printk("first_drv_init...n");


        return 0;

}


static void first_drv_exit(void)

{

        unregister_chrdev(major, "first_drv"); // 卸载


        class_device_unregister(firstdrv_class_dev);

        class_destroy(firstdrv_class);

        iounmap(gpbcon);

        printk("first_drv_exit...n");

}


module_init(first_drv_init);

module_exit(first_drv_exit);



MODULE_LICENSE("GPL");


以下是测试程序

#include

#include

#include

#include


/* 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 n", argv[0]);

                return 0;

        }


        if (strcmp(argv[1], "on") == 0)

        {

                val  = 1;

        }

        else

        {

                val = 0;

        }

        

        write(fd, &val, 4);

        return 0;

}



推荐阅读

史海拾趣

Hind Rectifiers Ltd公司的发展小趣事

故事一:Hind Rectifiers Ltd.的起源与早期发展

Hind Rectifiers Ltd.成立于1958年,自那时起,它便与Westinghouse、Brake & Signal(英国)等知名企业建立了深厚的合作关系。这家公司在电力半导体、电力电子设备和铁路运输设备的开发、设计、制造与销售方面,迅速积累了丰富的经验和技术实力。早期,Hind Rectifiers通过不断的技术引进与自主研发,逐步确立了其在印度电力电子行业中的领先地位。其产品线逐渐丰富,包括但不限于整流器、逆变器等关键电力电子元件,为印度乃至全球的工业发展提供了重要支持。

故事二:市场拓展与国际化战略

随着印度经济的快速增长和工业化进程的加速,Hind Rectifiers Ltd.积极实施市场拓展战略。公司不仅巩固了在国内市场的地位,还逐步将目光投向了国际市场。通过参加国际展会、建立海外销售网络等方式,Hind Rectifiers的产品远销至多个国家和地区。同时,公司还加强了与国际知名企业的合作,共同研发新技术、新产品,进一步提升了其国际竞争力。

故事三:技术创新与产品升级

技术创新是Hind Rectifiers Ltd.持续发展的核心动力。公司不断加大研发投入,引进先进生产设备和技术人才,致力于电力电子产品的更新换代和技术升级。近年来,Hind Rectifiers成功推出了多款高性能、高效率的电力电子产品,如高效能整流器、智能逆变器等,这些产品不仅满足了市场对高品质电力电子产品的需求,还为公司带来了显著的经济效益和社会效益。

故事四:应对市场波动与供应链管理

面对全球经济的波动和供应链的不确定性,Hind Rectifiers Ltd.展现了其强大的应对能力。公司通过建立多元化的供应链体系、加强与供应商的合作与沟通、优化库存管理等方式,有效降低了市场风险。同时,公司还注重提升内部管理水平,加强成本控制和质量管理,确保了在复杂多变的市场环境中保持稳健发展。

故事五:社会责任与可持续发展

作为一家具有社会责任感的企业,Hind Rectifiers Ltd.始终将可持续发展视为其发展的重要方向。公司积极参与社会公益事业,关注环境保护和能源节约。通过推广绿色制造、节能减排等措施,Hind Rectifiers为印度乃至全球的可持续发展贡献了自己的力量。同时,公司还注重员工培训和职业发展,为员工提供了良好的工作环境和发展平台,促进了企业与员工的共同成长。

Digital Core Design公司的发展小趣事

然而,随着《古墓丽影》系列的不断发展,Core Design也面临了一些挑战。其中最为严重的是版权问题。由于Core Design在后续的一些作品中可能违背了“古墓”的本源,享有Lara Croft和《古墓丽影》版权的游戏发行商Eidos作出了剥夺Core Design《古墓丽影》系列开发权的决定。这一决定对Core Design来说无疑是一个巨大的打击,但也促使其开始寻找新的发展机遇。

Aromat Corp公司的发展小趣事

在电子行业快速发展的背景下,Aromat Corp始终坚持创新引领的发展理念。公司不断投入研发资源,推出了一系列具有创新性的电子产品。这些产品不仅满足了市场的多样化需求,还为公司带来了可观的利润增长。同时,Aromat Corp还注重知识产权保护,积极申请专利,保护公司的创新成果。

昆泰芯微电子(CONNTEK)公司的发展小趣事

随着物联网技术的快速发展,昆泰芯微电子紧跟时代步伐,深度布局物联网应用领域。公司专注于面向物联网应用的传感器芯片研发、生产和销售,致力于成为传感器信号链及物联网芯片的行业领导者。在消费电子、智能制造、智能交通、智能家居以及新能源汽车等多个领域,昆泰芯微电子的产品得到了广泛应用,为这些领域的发展提供了强有力的技术支持。

EM Microelectronic-Marin SA公司的发展小趣事

1995年,Philips Semiconductors收购了Mikron Graz,这一事件标志着EM Microelectronic-Marin与Philips在半导体领域的深度合作。此后,两家公司共同推动了RFID(射频识别)技术的发展,使其逐渐成为电子行业中不可或缺的一部分。EM Microelectronic-Marin凭借其在低功耗技术方面的优势,为RFID技术提供了强有力的支持。

Allied Controls Incorporated公司的发展小趣事

1995年,Philips Semiconductors收购了Mikron Graz,这一事件标志着EM Microelectronic-Marin与Philips在半导体领域的深度合作。此后,两家公司共同推动了RFID(射频识别)技术的发展,使其逐渐成为电子行业中不可或缺的一部分。EM Microelectronic-Marin凭借其在低功耗技术方面的优势,为RFID技术提供了强有力的支持。

问答坊 | AI 解惑

讨厌的VAV (ZT)

我们大厦被投诉最多的是空调,几乎都是VAV。反应慢,可控性差,该出风时不出风,不该出风时狂出...... 最后害得技工不得不在电脑上控制几乎每个VAV,快把人累死。 其实最好的方式是在温控器上能直接控制风阀大小,不要什么VAV,什么PID.....其实 ...…

查看全部问答>

电源滤波器设计与使用原则分析

中心议题: 城市轨道交通控制系统和电源系统需要加装滤波器介绍电源滤波器的基本概念、参数选取以及安装原则等几 个方面分析电源滤波器得出相关结论 解决方案: 安装无源EMI滤波器,减少干扰和衰减采用横截面积较大的磁芯绕制成多匝线圈,得到 ...…

查看全部问答>

求助NandFlash写驱动的问题

能读进去,写却怎么也写不进去 使用的芯片是S3c2440+k9f1208 哪位帮我好好看看吧! 代码如下 /* NAND Flash registers 2440*/ #define NFCONF    (*(volatile unsigned int *)0x4e000000) #define NFCONT    (*(volatile u ...…

查看全部问答>

USB HID minidriver的问题

  我在做一个HID USB设备的minidriver,USB设备总是循环的发送相同的数据,在以中断传输方式读取数据的时候,我不知道该采用怎么样的方式:    1. 根据Walter Oney,HID USB设备的hidMinidriverRegistration.DevicesArePolled ...…

查看全部问答>

RT-Thread的许可证介绍

接触过RT-Thread的都知道RT-Thread的许可证是很宽松的: RT-Thread 0.3.0遵循GPLv2许可证,后期会更改更为宽松的许可证:可能是BSD,也可能是Apache v2。不管是哪个,这两个都是商业化友好的许可证,即在使用的时候的声明有使用相关代码 ...…

查看全部问答>

STM32-Oneday技术讲座

  大家可以通过各种渠道拿到工具了,不知道有没有必要搞一个全国范围的技术讲座,围绕着软件,还有芯片的外围功能和调试技术,做一个入门级的培训。可以送一些书,,,  上海,深圳,北京  拿到工具的人希望讲 ...…

查看全部问答>

关于i2c完全没用,很不可靠

                                 我用i2c读写24c512,好不容易可以读写了,但是不能长期可靠运行.发现一个致命问题,只要外部sda线为0,STM32的I2C就不 ...…

查看全部问答>

ST新主站速度有点慢

                                 建议保留ST老主站,新主站速度慢,加上不熟悉资料放在哪个分类下,找个资料需要很长时间,还没有老主站好用!…

查看全部问答>

信号接入问题

现有 108MHZ的时钟和数据  ,   请问怎么接    使用EP3C25Q240C8N的芯片,  准备时钟接   全局时钟   ,数据不知道接哪?  普通IO? 说明:时钟每一上升沿  ,读一位数据。…

查看全部问答>