![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式实验
文章平均质量分 73
LDan508
这个作者很懒,什么都没留下…
展开
-
file_operation结构体详解
第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针.这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 中定义的宏.这个宏比较复杂,在进行简单学习操作的时候,一般初始化为THIS_MODULE。loff_t (*llseek) (struct file转载 2016-01-15 21:26:06 · 1860 阅读 · 0 评论 -
设备驱动简介
设备驱动程序: 使某个特定硬件响应一个定义良好的内部变成接口,用户操作通过一组标准化的调用执行,而这些调用是和特定的驱动程序无关的.将这些调用映射到作用于实际硬件的设备的特有操作上,则是设备驱动程序的任务.control+h显示隐藏文件.编程问题实际上分为两大部分:机制(需要提供什么功能),策略(如何使用这些功能) (1)TCP/IP网原创 2015-12-25 18:31:20 · 583 阅读 · 0 评论 -
LED驱动程序的makefile文件
#make //编译驱动模块由于make没有指定选项和目标,将默认使用Makefile文件,并且先去执行all下的文件Makefile的内容: KERN_DIR =/opt/workspace/linux-3.2.0-psp04.06.00.10///KERN_DIR表示内核源码目录,这种方式适用于嵌入式开发的交叉编译,KERN_DIR目原创 2015-12-25 15:33:37 · 1147 阅读 · 0 评论 -
为设备添加以太网(如何查看设置地址,子网掩码,网关)
本方法实验过且成功,实验平台Ubuntu14.04.1具体操作步骤: 1.首先将网线和设备与电脑连接好 2.在无线网连接中选择编辑连接 3.选择“添加” 4.选择“IPv4"->方法”手动“->地址”添加“ 5.现在要手动输入地址,子网掩码和网关,如果不知道按原创 2016-01-08 17:35:12 · 5864 阅读 · 0 评论 -
字符设备驱动程序的设计
【字符设备驱动程序的组成】 字符设备驱动程序包含5个部分:头文件、file_operation结构体变量、接口函数、加载函数以及卸载函数。 头文件的部分包含进数据结构以及内核函数要用到的头文件。file_operation结构体变量部分定义file_operation结构体的变量,该结构体声明了驱动程序所有的接口函数。接口函数部分包含字符驱动设备驱动程序与内核应用程序交互原创 2016-01-22 17:27:45 · 1461 阅读 · 0 评论 -
file结构
file结构是设备驱动程序所使用的另一个重要的数据结构,它代表一个“打开的文件”,是应用程序在进行open()调用时由内核创建的,在进行close()调用时作为参数传递给函数以关闭相应的文件。在文件关闭后,内核释放这个数据结构。file结构也在include/linux/fs.h中定义。 include/linux/fs.h519 struct file{520原创 2016-01-20 14:26:06 · 460 阅读 · 0 评论 -
嵌入式实验(一)
ARM的实验:实验一和实验二主要是要搭建环境,为后续的实验着好准备,首先,我需要了解一下我们安装的这些东西是什么作用的: 实验一:交叉编译工具:就是为了编译、链接、处理和调试跨平台体系结构的程序代码。每次执行工具链软件时,通过带有不同的参数,可以实现编译、链接、处理或者调试等不同的功能。从工具链的组成上来说,它一般由多个程序构成,分别对应着各个功原创 2015-12-18 19:41:53 · 1516 阅读 · 0 评论 -
使用printk()函数调试设备驱动程序
当程序代码编写好时很少不会出错误,这个时候就要用printk()函数来调试了。该函数的功能与printf()差不多,但是,它只能由内核例程来调试,该函数在kernel/printk.c中实现,原型如下:int printk(const char *fmt,…);printk()函数的使用方法与printf()基本相同,但参数的第一个位置可以使用表示信息重原创 2016-01-19 19:35:23 · 763 阅读 · 0 评论 -
内核空间和用户空间的数据交换
对设备的读操作是将数据从Linux的内核空间复制到用户空间;写操作是将数据从Linux的用户空间复制到内核空间。因为Linux的内核空间和用户空间是隔离的,所以要实现数据的拷贝就要使用专门的内核函数。可以在内核空间和用户空间进行数据复制的函数在中定义,其原型如下:unsigned longcopy_to_user(void_usr *to,con原创 2016-01-19 18:50:33 · 1566 阅读 · 0 评论 -
信号量
【设备驱动程序中的并发控制】在驱动程序中,当多个线程同时访问像全局变量这样的共享资源时,会引发“竞态”,需要对共享资源进行控制。Linux内核中解决并发控制的最常用方法是信号量与自旋锁。信号量是一种睡眠锁,如果有一个任务试图获得一个已经被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠,这时候处理器获得自由去执行其他代码。当持有信号量的进程释放信号量之后,在等待队列中的一原创 2016-01-19 17:33:10 · 1382 阅读 · 0 评论 -
模块(加载函数和卸载函数)
Linux模块是一些代码的集成,可以在启动系统后动态链接到内核的一部分,一旦载入之后就和内核没有什么区别,可以使内核崩溃。当不需要这些模块时,又可以断开链接将其删除。Linux的模块可以用C语言来编写,用gcc来编译生成目标文件(不进行链接,作为*.o文件存在),为此需要在gcc命令里加入-c的参数。由于不进行链接,gcc只允许一个输入文本,因此一个模块的所有部分都必须在一个文件中实现原创 2016-01-18 10:56:53 · 2778 阅读 · 0 评论 -
中断的禁止和使能以及处理例程
【中断处理例程】中断处理器例程即中断处理函数,其作用是根据被服务的中断的含义进行适当的操作,通常是读、写数据。中断处理例程与普通C函数没有什么差别,但是中断处理装置有以下限制:中断处理装置不能与用户空间传递数据,因为它不在进程上下文执行;中断处理程序也不能做任何可能休眠的事情,例如,调用wait_event(),除了使用GFP_ATOMIC之外的任何东西来分配内存,或者锁住原创 2016-01-19 15:36:20 · 6395 阅读 · 0 评论 -
中断的注册和释放
大多数设备驱动程序都要使用中断,因此有必要了解linux的中断管理机制,Linux的中断管理机制包含中断服务例程的注册。【中断的注册】Linux使用request_irq()函数为中断服务例程分配一个硬件中断号并登记相应的中断程序处理例程,即所谓的注册中断,该函数在include/linux/sched.h里声明,request_irq()函数原型如下: Int r原创 2016-01-19 10:54:18 · 2738 阅读 · 0 评论 -
I/O端口的访问
Linux中的任何设备驱动程序都可对I/O端口进行操作,这样很容易引起混乱,因此Linux提供了三个宏check_region(start,n)、request_region(start,n,name)、release_region(start,n)来对端口使用情况进行控制,它们在include/linux/ioport.h中进行了定义。 check_r原创 2016-01-18 15:35:21 · 941 阅读 · 0 评论 -
make命令与描述文件
make命令需要通过描述文件来描述文件之间的相互关系并且自动维护编译工作。 描述文件是一个文本形式的数据库文件,其中包含一些规则来告诉make命令处理哪些文件以及如何处理这些文件。 描述文件的基本结构: 一个描述文件包含一系列规则,但是每一条规则都包含的一些内容,如下: 一个target:即make原创 2016-01-16 11:36:38 · 749 阅读 · 0 评论 -
file结构
file结构file结构是设备驱动程序所使用的另一个重要的数据结构,它代表一个“打开的文件”,是应用程序在进行open()调用时由内核创建的,在进行close()调用时作为参数传递给函数以关闭相应的文件。在文件关闭后,内核释放这个数据结构。file结构也在include/linux/fs.h中定义。 include/linux/fs.h519 struct file{5转载 2016-02-28 19:59:17 · 825 阅读 · 0 评论