历史上的今天
返回首页

历史上的今天

今天是:2025年02月08日(星期六)

正在发生

2020年02月08日 | micro2440 LED驱动(装载和卸载模块)

2020-02-08 来源:eefocus

micro2440所用光盘资料如下:

笔记本系统:fedora 13 (编译内核,配置交叉编译环境,详见手册)


台式机系统:windows XP


1、fedora13中:

2、建立一个C文件,取名为my_leds.c

输入以下代码:

#include

#include

#include

#include

 

 

#define DEVICE_NAME "myleds"

 

static unsigned long led_table [] = {

S3C2410_GPB5,

S3C2410_GPB6,

S3C2410_GPB7,

S3C2410_GPB8,

};

 

static unsigned int led_cfg_table [] = {

S3C2410_GPB5_OUTP,

S3C2410_GPB6_OUTP,

S3C2410_GPB7_OUTP,

S3C2410_GPB8_OUTP,

};

 

static int sbc2440_leds_ioctl(

struct inode *inode, 

struct file *file, 

unsigned int cmd, 

unsigned long arg)

{

switch(cmd) {

case 0:

case 1:

if (arg > 4) {

return -EINVAL;

}

s3c2410_gpio_setpin(led_table[arg], !cmd);

return 0;

default:

return -EINVAL;

}

}

 

static struct file_operations dev_fops = {

.owner = THIS_MODULE,

.ioctl = sbc2440_leds_ioctl,

};

 

static struct miscdevice misc = {

.minor = MISC_DYNAMIC_MINOR,

.name = DEVICE_NAME,

.fops = &dev_fops,

};

 

static int __init dev_init(void)

{

int ret;

 

int i;

for (i = 0; i < 4; i++) {

s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);

s3c2410_gpio_setpin(led_table[i], 0);

}

 

ret = misc_register(&misc);

 

printk (DEVICE_NAME"tinitializedn");

 

return ret;

}

 

static void __exit dev_exit(void)

{

misc_deregister(&misc);

}

 

module_init(dev_init);

module_exit(dev_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("FriendlyARM Inc.");

以上代码其实就是mini2440_leds.c里面的代码,只不过我把那些用不到的头文件删去了一些不明白为什么要用那么多的头文件,咋一看起来真的很头疼,反正删除之后编译没报错(必须不报错,我删一个就编译一次,有错误就还原回来)


3、在Kconfig文件里加入这句话:

4、在Makefile文件里加入:

5、返回到linux根目录,输入make menuconfig;

6、


7、

8、保存配置并退出


9、输入 make modules指令,将生成的my_leds.ko传送到开发板


10、装载模块

11、输入 ls /dev指令查看设备名

12、fedora13下编写测试程序led.c

输入以下代码:

#include

#include

#include

#include

 

int main(int argc, char **argv)

{

int on;

int led_no;

int fd;

if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||

    on < 0 || on > 1 || led_no < 0 || led_no > 3) {

fprintf(stderr, "Usage: leds led_no 0|1n");

exit(1);

}

fd = open("/dev/myleds", 0);

if (fd < 0) {

perror("open device myleds");

exit(1);

}

ioctl(fd, on, led_no);

close(fd);

return 0;

}


13、编写完毕后,输入arm-linux-gcc led.c -o led 指令,将生成的led文件传送到开发板


14、改变led的权限

15、输入指令测试(先点击友善之臂力提供的测试程序,关闭led-player)

16、测试完毕,卸载模块,出现如图所示错误

17、网上搜索问题

18、按网上解答解决问题

推荐阅读

史海拾趣

GainSpan ( Telit)公司的发展小趣事

风华的故事始于1984年,当时广东肇庆风华电子厂成立,最初业务聚焦于收录机装配。一年后,即1985年,国内首条从美国引进的年产1亿只片式多层陶瓷电容器生产线落户风华,标志着公司正式踏入高新技术产业领域。这一举措不仅提升了公司的技术实力,也为后续的发展奠定了坚实基础。

Connector City公司的发展小趣事

随着电子行业的快速发展,连接器技术也在不断更新换代。Connector City公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。因此,公司加大了研发投入,组建了一支高素质的研发团队,专注于连接器技术的创新研究。经过多年的努力,公司成功开发出了一款具有高性能、高可靠性和高稳定性的新型连接器产品,赢得了客户的广泛认可和好评。

Amperite Co公司的发展小趣事

随着国内市场的饱和,Connector City公司开始寻求海外市场的发展机遇。公司制定了详细的国际化战略,积极开拓海外市场,加强与国外客户的合作与交流。同时,公司还注重本土化运营,根据不同国家和地区的市场需求和文化差异,灵活调整产品设计和营销策略。通过不断拓展海外市场,公司的销售业绩实现了快速增长。

艾华集团(AISHI)公司的发展小趣事

1985年,艾立华和王安安怀揣着3700元的全部家当,毅然决然地踏上了创业之路。他们租下了两间不到50平方米的废弃小平房,与几名工人一起,手工制作铝电解电容器。由于资金、技术和市场的限制,艾华集团最初只能接一些其他企业不愿意做的、用量很少但又刚需的项目。然而,即便是在这样的困境中,艾立华和王安安也始终坚持对产品品质的精益求精,他们深知,只有高品质的产品才能在市场上立足。

eLED.com Corp公司的发展小趣事

作为一家致力于LED行业的公司,eLED.com Corp深知LED产品对于节能减排的重要性。因此,公司始终将绿色环保理念贯穿于产品的研发、生产和销售过程中。通过采用环保材料和节能技术,eLED.com Corp的产品不仅具有出色的性能,还具备较低的能耗和较长的使用寿命。此外,公司还积极参与各类环保公益活动,推动LED行业向更加绿色、环保的方向发展。

Altitude Technology公司的发展小趣事

Altitude Technology公司成立于一个科技迅猛发展的时代,创始人李华怀揣着对电子技术的热爱和对未来科技的憧憬,决定创立一家专注于高度集成和智能化电子产品研发的公司。初期,公司面临着资金短缺、人才匮乏等重重困难,但李华凭借对技术的深刻理解和敏锐的市场洞察力,带领团队开发出了一款具有划时代意义的智能手环,这款产品以其出色的性能和人性化的设计迅速在市场上获得了认可,为Altitude Technology公司赢得了第一桶金。

问答坊 | AI 解惑

今天上班遇到的郁闷事

原本在公司最后一天了,把工作交接好,就安安稳稳地离职了。大家也算缘分一场,好聚好散吧! 可是,来到公司以后,发现网线被拔走了,电脑也被锁住了,我只能傻傻地坐在电脑前,看看杂志。…

查看全部问答>

征集单片机创意

想参加一个比赛,但想了半天都想不出来做什么。所以来看一下大家都有什么好的想法,学习,做做!…

查看全部问答>

基础display controller问题

The Overlay/Display controller consists of logic for transferring image data from a local bus of the POST Processor or a video buffer located in system memory to an external LCD driver interface. what\'s the meaning of Overlay? ...…

查看全部问答>

ARM嵌入式入门

我以前作过51和AVR单片机的开发工作,对VC++也有了解,想学习ARM体系开发,LINUX一点不懂,感觉难学,WINCE方向是否容易掌握,怎样入门? …

查看全部问答>

wince 盘符显示问题

WINCE系统使用中文时,磁盘显示为“硬盘”字样。如何使它显示“Hard disk\"呢??…

查看全部问答>

ADC 状态寄存器

ADC 状态寄存器能软件清除吗,手册上写的是软件清除,我在操作的时候却发现没有清除,软件、硬件仿真都显示没有清除…

查看全部问答>

学习DSP从哪里学起?

各位大神帮帮忙,介绍下你们的学习经验啊! 老师让学DSP,给的是5416的开发箱,学了一段时间感觉没有什么实质性的进展啊,就是熟悉了下CCS软件使用,然后把附带的程序在开发箱上跑了跑看看效果。至于里面的程序啊算法啊,基本不怎么懂啊,迷迷 ...…

查看全部问答>

易电源试用帖第一贴

易电源试用帖第一贴: 收到易电源套装几天了,今天把图嗮出来: 看看这两个模块,多精致啊!不错,还有两个模块没有字,不知道啥意思。 看看这个圆盘的选型手册,实在是用心啊。 输入3.3V输出0.8~2.8,输入5V输出0.8~3.6, 输入9V输出0.8~6V ...…

查看全部问答>

这样写按键控制数码管动态显示,能不能称作“任务调度”

下是电路,我要的功能很简单,按键第按一次,数码管后两位显示加1,到100后回头,看这样写能不能称作“任务调度”,如果是,那么这种方式比较好处理,因为程序执行的间隔时间都是固定的,但对于有些交互式外设,如AD,DA,LCD,必须从对方读取数据,时 ...…

查看全部问答>

关于单片机程序的执行

#include #include #define uint unsigned int #define uchar unsigned char #define TX_ADR_WIDTH    5           // 5 uints TX address width #define RX_ADR_WIDTH    5   & ...…

查看全部问答>