linux OK6410 LED驱动

之前都是做单片机开发,以为转到linux来写驱动程序会轻轻松松,当去真正写的时候才发现不是那么容易,就感觉东西太杂太多。所以还是注册了一个博客来记一下,方便查询。

国嵌给的OK6410内核自带LED驱动,在内核目录的drivers/char/s3c6410_leds.c,他是直接操作的物理地址,而新的教学视频是通过虚拟地址映射来实现的,但是新的教学视频里给的led.c直接貌似不是6410的驱动,好吧那只能在此基础上改了。



里面只有led.c 没有led.h,所以得注释掉,然后自己宏定义


然后就是修改LEDCON和LEDDAT的值,之前是这样的



我们查询一下s3c6410手册,发现这两个地址是GPK的引脚



所以要将其改为6410硬件连接的GPM引脚

 



然后就是led初始化的地方之前因为不知道他接的是哪几个引脚,之前是这样的



而我们用的是GPM0~3,要将其设置为输出就要按照下面的来配置



每4位控制一个引脚,0~3都配置为0001即为输出


换算为16进制为0x4369,所以将open函数里改为换算出的值



好的,到这里这个驱动貌似可以用了耶,写个测试程序试试



这只是点亮了第一个LED的测试程序,但是测试程序编译后好不能直接放板上运行,显然还有很多东西要做,首先写驱动程序的Makefile,如下



然后make一下得到led_sun.ko放到板里,执行



接下来就是需要建立相应的字符设备文件用以下命令看一下刚安装的模块的设备号



好的,我们的led驱动的设备号为252,接下来该建立设备文件了



252为主设备号而次设备号因为我们相同的设备只有一个,所以随便写一个非负值且小于255的就行,这里为0,好的到这里我们的工作就快完成了,编译一下测试程序



将测试程序拷贝到板上测试,由于我的板是通过tftp挂载宿主机的nfs文件系统,只需将led_test拷到/nfsfile/下面,然后运行


咦!输出success了,再看看板上的灯,居然第一个灯奇迹般的点亮了,呵呵。有点意思!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值