第四十二天:Tiny4412模块驱动开发

这篇博客介绍了在Tiny4412开发板上进行驱动开发的过程,首先通过裁剪内核移除预加载的LED驱动,然后编写程序控制LED全亮。接着,博主展示了如何检查和裁剪内核中的watchdog驱动,以实现LED的闪烁。通过watchdog中断,每隔一段时间打印信息,并成功注册中断处理函数。最后,博主提到了按键驱动的编写,利用linux内核提供的宏来表示按键。
摘要由CSDN通过智能技术生成
   因为前面写裸板程序的时候,已经详细的叙述过LED灯的控制,按键的控制,以及watchdog的配置,这里就不赘述了,主要是说明模块如何控制底层硬件的。

  第一个程序是模块程序控制LED灯全亮。 

  因为友善之臂将LED灯的驱动默认加载到内核中,编写模块驱动程序前就要先把原先的LED灯驱动裁剪掉。

  首先进入linux源码目录。执行 make menuconfig 

  进入Device Drivers  --->

      Character devices  --->

   

   将LED Support for FriendlyARM Tiny4412 GPIO LEDs前的去掉。
    保存退出后执行make 重新编译内核,用重新生成的内核镜像启动Tiny4412.
   编写裸板驱动和编写模块驱动的区别在于,裸板程序直接操作的是物理内存,而模块程序操作的是虚拟内存,模块程序要操作硬件,肯定是要通过物理地址来操作相应的寄存器的值。这时候,就是要通过ioremap()函数,实现物理地址(IO地址空间)到虚拟地址的转换。下面是具体程序:插入模块时灯全亮。
 1 #include <linux/init.h>
 2 #include <linux/module.h>
 3 #include <asm/io.h>
 4 
 5 MODULE_LICENSE("GPL");
 6 MODULE_AUTHOR("BUNFLY");
 7 
 8 unsigned long gpio_virt;
 9 unsigned long *gpm4con, *gpm4dat;
10 
11 int test_init()
12 {
13     gpio_virt = ioremap(0x110002e0 & ~0xfff, SZ_4K);//映射4k空间
14     gpm4con = gpio_virt + (0x110002e0 & 0xfff);
15     gpm4dat = gpio_virt + (0x110002e4 & 0xfff);
16     
17     *gpm4con = 0x1111;
18     *gpm4dat = 0;
19 
20     return 0;
21 }
22 
23 void tes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值