linux驱动学习总结一
来源:互联网 发布:preg_match php.net 编辑:程序博客网 时间:2024/05/24 05:42
这是我第一次写博客。希望把自己学习的知识进行总结,不断的督促自己多总结多思考,更希望路过的大神进行指正和纠错,共同进步。
刚接触linux驱动开发,自己对u-boot、内核、根文件系统在驱动开发中所起到的作用,还有驱动程序和应用程序两者的关系不是特别清楚,在学习后有如下的总结。
一. u-boot:是一种boot loader(系统引导)主要用于嵌入式系统中。它的主要作用就是启动内核。
内核:内核是操作系统中最基本的部分。它主要负责四种功能:系统的内存管理、软件程序管理、硬件设备管理、文件系统管理。在驱动开发中,内核用来启动应用程序。
根文件系统:根文件系统是内核启动后第一个挂载的文件系统,是用户和内核交互的工具。
二. 驱动程序和应用程序的关系
写一个应用程序使用的是标准的接口函数,这些标准的接口函数是由c库提供的。实际上调用SWI异常处理进入内核通过system call interface ,调用驱动程序。实现应用程序---->内核---->驱动程序的过程。
一个驱动程序就有基本的框架。
应用程序中有标准的open 、read、write函数,例如:对应于驱动的led_open、led_read、led_write。
①写出led_open、led_write
//first_drv_open(struct inode *inode, struct file *file) first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
②通过定义一个文件操作的结构体来告诉内核 static struct file_operations first_drv_fops这个结构体中就包括open和write。
③注册字符设备,让设备号和文件操作的结构体相联系 register_chrdev,相当于一个入口函数,写成xxx_Init(),再经过修饰入口函数,让内核确定调用入口函数module_init()
④注销字符设备,这里和注册相对应unregister_chrdev,出口函数写成xxx_exit,同样需要修饰module_exit()
⑤一个.c的程序需要头文件,加上所必须的头文件。
这就是一个最简单的驱动程序框架。
三.完成一个驱动程序的过程
1.编译需要在linux服务器上编译。在每次编译之前都需要对内核进行编译,这里我不是很清楚,如果不编译在编译驱动程序时会报错。
2.把编译到的.ko文件放在/work/nfs的目录下。然后在开发板上实现挂载
手动挂载方法:mount -t nfs -o nolock,vers=2 192.168.xxx.xxx:/work/nfs /mnt
3.insmod进行加载 insmod xxx.ko
4.设备号,可以手动指定设备号,通过使用命令cat /proc/devices查看驱动程序的设备号后,使用mknod xxx c 主设备号 次设备号 常见设备文件 在/dev目录下可以看到所创建的设备文件。也可以使用程序自动生成设备文件。
5.应用程序测试,写一个应用程序在服务器上交叉编译,arm-linux-gcc -o 执行文件 .c文件 将执行文件拷到/work/nfs目录下 然后执行程序实现应用程序对驱动程序的测试。
第一次总结就这么多,有错的地方,请大家指正。
- linux驱动学习总结一
- linux驱动学习一
- Linux驱动学习总结
- linux驱动学习总结(一)——对linux驱动的几点思考
- LINUX驱动学习笔记一
- Linux设备驱动学习总结
- Linux DMA 驱动学习总结
- linux学习总结一
- Linux 学习总结 (一)
- Linux驱动开发笔记总结(一)
- 基于mini6410的linux驱动学习总结(一 驱动程序介绍)
- Linux内核与驱动开发学习总结:DMA与中断(一)
- linux驱动学习(一) Makefile基础
- linux设备驱动开发学习笔记一
- linux块设备驱动学习(一)
- linux驱动开发学习有感(一)
- linux驱动学习(一) Makefile基础
- [linux驱动]proc学习笔记(一)
- Latex的常见错误
- 图片显示 ImageView 要和显示的图一样大小
- Advanced REST Client 的安装
- 从上往下打印二叉树
- 超星慕课德国史网络选修答案
- linux驱动学习总结一
- Android 缓存目录 Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
- Ubuntu安装ssh
- Spring核心框架结构
- NOIP2016 提高组 复赛 day1 toy 玩具谜题
- cf 753A Santa Claus and Candies
- ubuntu14.04 vncserver
- 北理工考研总结
- test