在适配系统移植后接下来就是对于驱动框架的学习
首先配置下驱动框架开发所需要的环境
驱动编译所需的linux内核的源码树目录,对于在Ubuntu下的内核源码树可以通过shell命令去分配,

KERN_VER = $(shell uname -r)
KERN_DIR = /lib/modules/$(KERN_VER)/build

为对应在Ubuntu下的源码树目录,而对于我们开发板所烧录的linux系统则需要提供内核源码树,原因是我们后面编写的驱动是在对应的系统下去安装的,为了保证可以进行同时避免不同版本的兼容性问题最好选择我们所烧录的内核版本作为其驱动的内核源码树
我这里指定的就是我开发板上烧录的内核源码的目录

KERN_DIR = /home/hawen/zyp_linux/driver_kernel/kernel

简单驱动程序下的Makefile文件

#ubuntu的内核源码树,如果要编译在ubuntu中安装的模块就打开这2个#KERN_VER = $(shell uname -r)
#KERN_DIR = /lib/modules/$(KERN_VER)/build # 开发板的linux内核的源码树目录
KERN_DIR = /home/hawen/zyp_linux/driver_kernel/kernelobj-m += module_test.oall:make -C $(KERN_DIR) M=`pwd` modules cp:cp *.ko /root/porting_x210/rootfs/rootfs/driver_test.PHONY: clean
clean:make -C $(KERN_DIR) M=`pwd` modules clean

然后通过Makefile帮助编译,在通过cp命令将.ko文件拷贝到我们挂载的根文件系统上,接下来就是开发板开机挂载上根目录然后进入到驱动文件目录下去安转驱动文件
insmod module.ko安转驱动模块
lsmod查看已经按装的驱动模块
进入到根目录下的/proc目录下的文件devices通过cat命令可以查看其运行的设备信息
proc目录是系统运行时产生的临时文件存放的目录这里就不在详细说明

cat /proc/devices

可以看到我们所分配的设备信息,主设备号为200,设备名为testchar
卸载驱动模块rmmod 驱动模块名称

附录

#include <linux/module.h>      // module_init  module_exit
#include <linux/init.h>           // __init   __exit
#include <linux/fs.h>#define MYMAJOR      200
#define MYNAME      "testchar"static int test_chrdev_open(struct inode *inode, struct file *file)
{// 这个函数中真正应该放置的是打开这个设备的硬件操作代码部分// 但是现在暂时我们写不了这么多,所以用一个printk打印个信息来做代表。printk(KERN_INFO "test_chrdev_open\n");return 0;
}static int test_chrdev_release(struct inode *inode, struct file *file)
{printk(KERN_INFO "test_chrdev_release\n");return 0;
}// 自定义一个file_operations结构体变量,并且去填充
static const struct file_operations test_fops = {.owner        = THIS_MODULE,             // 惯例,直接写即可.open     = test_chrdev_open,            // 将来应用open打开这个设备时实际调用的.release = test_chrdev_release,     // 就是这个.open对应的函数
};// 模块安装函数
static int __init chrdev_init(void)
{   int ret = -1;printk(KERN_INFO "chrdev_init helloworld init\n");// 在module_init宏调用的函数中去注册字符设备驱动ret = register_chrdev(MYMAJOR, MYNAME, &test_fops);if (ret){printk(KERN_ERR "register_chrdev fail\n");return -EINVAL;}printk(KERN_INFO "register_chrdev success...\n");return 0;
}// 模块下载函数
static void __exit chrdev_exit(void)
{printk(KERN_INFO "chrdev_exit helloworld exit\n");// 在module_exit宏调用的函数中去注销字符设备驱动unregister_chrdev(MYMAJOR, MYNAME);}module_init(chrdev_init);
module_exit(chrdev_exit);// MODULE_xxx这种宏作用是用来添加模块描述信息
MODULE_LICENSE("GPL");                // 描述模块的许可证
MODULE_AUTHOR("");                // 描述模块的作者
MODULE_DESCRIPTION("module test");    // 描述模块的介绍信息
MODULE_ALIAS("alias xxx");            // 描述模块的别名信息

就先记录到这里吧,算半只脚踏入入门阶段。

X210驱动框架学习和实践相关推荐

  1. linux用户空间flash驱动,全面掌握Linux驱动框架——字符设备驱动、I2C驱动、总线设备驱动、NAND FLASH驱动...

    原标题:全面掌握Linux驱动框架--字符设备驱动.I2C驱动.总线设备驱动.NAND FLASH驱动 字符设备驱动 哈~ 这几天都在发图,通过这种方式,我们希望能帮大家梳理学过的知识,全局的掌握Li ...

  2. RPC - 如何动手实现一个简单RPC框架 - 学习/实践

    1.应用场景 主要用于学习RPC的原理,工作流程,拆解和组装一个简单的RPC框架. 2.学习/操作 1.文档阅读 31 | 动手实现一个简单的RPC框架(一):原理和程序的结构-极客时间 32 | 动 ...

  3. 驱动框架6——linux内核的gpiolib学习

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 八.linux内核的gpiolib学习1 1.gpiolib学习重点(主线) (1)主线一:gpiolib的建立过 ...

  4. 深入学习Linux摄像头(二)v4l2驱动框架

    深入学习Linux摄像头系列 深入学习Linux摄像头(一)v4l2应用编程 深入学习Linux摄像头(二)v4l2驱动框架 深入学习Linux摄像头(三)虚拟摄像头驱动分析 深入学习Linux摄像头 ...

  5. 从零开始学习linux的I2C设备驱动框架——写一个简单的SHT20驱动

    目录 0.测试环境说明 1.设备树的修改 2.设备驱动框架 3.I2C数据传输过程 3.1 struct i2c_msg 3.2 SHT20的数据收发 4.I2C适配器超时等待时间的修改 本文资源 参 ...

  6. 演讲实录:百度大规模深度学习应用实践和开源AI框架PaddlePaddle

    导语:本文根据PaddlePaddle技术负责人.百度NLP技术委员会主席于佃海在今年英特尔人工智能大会上的演讲--<百度大规模深度学习应用实践和开源AI框架PaddlePaddle>整理 ...

  7. 【转载】演讲实录:百度大规模深度学习应用实践和开源AI框架PaddlePaddle

    导语:本文根据PaddlePaddle技术负责人.百度NLP技术委员会主席于佃海在今年英特尔人工智能大会上的演讲--<百度大规模深度学习应用实践和开源AI框架PaddlePaddle>整理 ...

  8. 驱动学习----字符设备驱动框架

    字符设备驱动框架 1.字符设备驱动简介 2.file_operations 3.驱动模块的加载和卸载 4.字符设备的注册与注销 5.实现设备具体操作函数 6.添加LICENSE和作者信息 7.linu ...

  9. 驱动学习之LED驱动框架

    一:什么是驱动框架   (1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的.标准的.典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开 ...

最新文章

  1. 利用csc.exe 手动编译C#程序
  2. Eclipse技巧:1.定制toString()模版
  3. Altium Designer09解决局域网冲突问题
  4. timm 笔记:数据集
  5. 长春理工大学第十四届程序设计竞赛
  6. 20190403vim编辑器week1_day3
  7. basemap安装_【我是解决安装问题系列_1】Mac python basemap安装
  8. c语言编程函数补充上机题,2011年计算机二级C语言上机操作题及答案(10)
  9. Java什么是重用_深度解析:java必须掌握的知识点——类的重用
  10. matlab源代码 语义相似度计算,如何计算两个句子之间的相似度(句法和语义)...
  11. UVALive 7276 Wooden Signs (DP)
  12. hdu 5150 Sit sit sit
  13. python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(7)中期检查报告
  14. c语言编译题a b,C语言考试试题A卷.doc
  15. java excel 冻结_Java 冻结、解除冻结 Excel 的行和列
  16. Flex + BlazeDS 学习笔记 (一) --- BlazeDS的功能原理及配置实例
  17. HTML5的学习资料(开发设计原则)
  18. 自我实现tcmalloc的项目简化版本
  19. Linux运行python文件出现以下错误:terminate called after throwing an instance of ‘std::runtime_error‘
  20. 大数据真的很牛B吗?不不不,10分钟让你读懂它

热门文章

  1. 蚂蚁市值25万亿?互联网的“后棚”买卖,你我都逃不过
  2. 无人机学习笔记之电机篇
  3. MS9132 USB 3.0转HDMI 输出投屏芯片
  4. 黑泽明 之 生之欲;
  5. 一文说透 MySQL JSON 数据类型
  6. C4top-排座位(并查集)
  7. aws 认证_如何在家工作时获得任何AWS认证
  8. 获取微信公众号openID,code
  9. java常用压测工具_几款常用压测工具推荐
  10. 编辑距离_Leetcode, 远景智能笔试题