一:led内核驱动

  (1)在编写led内核驱动时,我们首先要进行内核裁剪,因为友善之臂将LED灯的驱动默认加载到内核中,所以编写模块驱动程序前就要先把原先的LED灯驱动裁剪掉;

  led驱动在源码里面的Device Drivers /Character devices目录下,进行完裁剪之后重新编译linux源码;

  

  (2)ioremap()

  define ioremap(cookie,size)        __arm_ioremap((cookie), (size), MT_DEVICE)

  编写裸板驱动和编写模块驱动的区别在于,裸板程序直接操作的是物理内存,而模块程序操作 的是虚拟内存,模块程序要操作硬件,肯定是要通过物理地址来操作相应的寄存器的值。这时候,就是要通过ioremap()函数,实现物理地址(IO地址空 间)到虚拟地址的转换。

  下面代码实现的是插入模块是:led灯全亮

 #include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/io.h>
#include <linux/gpio.h>
#include <linux/kernel.h>
#include <linux/miscdevice.h>
#include <asm/uaccess.h>
#include <linux/ioport.h> MODULE_LICENSE("GPL");
MODULE_AUTHOR("bunfly"); unsigned long gpio_virt;
unsigned long gpm4con;
unsigned long gpm4dat; int bunfly_init()
{
//0x110002e0 0x110002e4
void __iomem *p;
p = request_mem_region(0x11000000, SZ_4K, "gpio");//注册内存的映射信息
if(NULL == p) {
printk("request faliure\n");
return ;
} gpio_virt = ioremap(0x11000000, SZ_4K);//led物理地址到虚拟地址的映射
gpm4con = gpio_virt + 0x02e0 ;
gpm4dat = gpio_virt + 0x02e4; *(unsigned long *)gpm4con &= ~0xffff;
*(unsigned long *)gpm4con |= 0x1111;
*(unsigned long *)gpm4dat = 0x0; printk("this is bunfly_init\n"); return ;
} void bunfly_exit()
{
printk("this is bunfly_exit\n");
iounmap(gpio_virt);
release_mem_region(0x11000000, SZ_4K);//注销映射的虚拟内存
} module_init(bunfly_init);
module_exit(bunfly_exit);

  今天的重点内容就是ioremap()函数,理解模块驱动跟裸板驱动的不同,掌握物理内存到虚拟内存的映射关系;

最新文章

  1. 内网透过公网nginx和vpn实现微信接口调试
  2. sql server 复制需要有实际的服务器名称才能连接到服务器(转载)
  3. 《WPF程序设计指南》读书笔记——第7章 Canvas
  4. 使用 Azure Site Recovery 将内部部署虚拟化工作负荷迁移至 Azure
  5. Android UI开发第三十二篇——Creating a Navigation Drawer
  6. Asp.net的IP地址屏蔽功能设计
  7. strpos 返回0时 ,比较false 不能加单引号
  8. 补充一下 sizeof
  9. 洛谷 P1054 等价表达式 解题报告
  10. python--yield and generator(生成器)简述
  11. centos6.5网络虚拟化技术
  12. luogu1525 [NOIp2011]关押罪犯 (并查集)
  13. 机器学习--boosting家族之XGBoost算法
  14. Qss 样式表的尝试
  15. 数制转换-栈的应用(C++实现)
  16. win7下hadoop编程eclipse的配置
  17. prototype.js中Function.prototype.bind方法浅解
  18. 重构Java代码的既有设计-影片出租店
  19. c# winform实现同时只允许账号在一台电脑登录的功能
  20. [19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)

热门文章

  1. Android应用---基于NDK的samples例程hello-jni学习NDK开发
  2. 为什么选择Nginx
  3. java http缓存
  4. 手持机设备公司(WINCE/ANDROID/LINUX)
  5. 【网站建设】Linux上安装MySQL - 12条命令搞定MySql
  6. LeetCode之“动态规划”:Maximum Subarray
  7. 自动生成材质Material(Unity3D开发之十九)
  8. boost::this_thread::sleep_for()死锁
  9. Oracle与Mysql时间格式化
  10. mq常用命令