- 博客(20)
- 资源 (11)
- 收藏
- 关注
原创 linux驱动文件操作简单介绍
1、设备号主设备号标识设备对应的驱动程序,次设备号由内核使用,用于确定设备文件所指的设备。通过次设备号获得一个指向内核设备的直接指针,也可将此设备号当作设备本地数组的索引。设备编号用dev_t表示(Linux/types.h 32位,其中12位表示主设备号,20位表示次设备号)。由dev_t获得主设备号或次设备号:MAJOR(dev_t dev); MINOR(dev_t d
2016-10-27 19:00:37 735
原创 ioread32函数有关知识
x86体系和ARM体系的寻址方式是有差别的:在x86下,为了能够满足CPU高速地运行,内存与CPU之间通过北桥相连并通过地址方式访问,而外设通过南桥与CPU相连并通过端口访问。在ARM下也实现了类似的操作,通过两条不同的总线(AHBBUS和APBBUS)来连接不同访问速度的外设。但是它与x86不同,无论是内存还是外设,ARM都是通过地址访问。因为这两种访问方式的不同,linux分出了两
2016-10-26 20:29:05 12852 5
原创 class_create()函数
内核中定义了struct class结构体,一个struct class 结构体类型变量对应一个类,内核同时提供了class_create()函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建了这个类,再调用device_create()函数在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应device_create()函数,去/sysfs下
2016-10-26 19:49:55 3147
原创 struct cdev结构体和cdev_init和cdev_add函数
在Linux内核2.6版本以前,注册一个字符设备的的经典方法是使用register_chrdev,相应的从设备中注销字符设备的方法是unregister_chrdev,而在2.6版本以后,字符设备函数的注册与注销使用的是如下一套方法:#include struct cdev *cdev_alloc(void);//分配一个独立的cdev结构 void cdev_init(struct
2016-10-26 19:14:24 1133
原创 file_operations结构体分析 (设备文件的操作)
linux设备驱动中file_operations结构体分析 struct module *owner第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针. 这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 Linux/module.h> 中定义的宏.loff
2016-10-26 17:55:21 326
原创 主设备号与次设备号以及申请
一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。1.主设备号和
2016-10-26 17:17:25 947
原创 编写linux驱动程序步骤
一、建立Linux驱动框架(装载、卸载Linux驱动) Linux内核在使用驱动时首先要装载驱动,在装载过程中进行一些初始化动作(建立设备文件、分配内存等),在驱动程序中需提供相应函数来处理驱动初始化工作,该函数须使用module_init宏指定;Linux系统在退出是需卸载Linux驱动,卸载过程中进行一些退出工作(删除设备文件、释放内存等),在驱动程序中需提供相应函数来处理退出工作,
2016-10-26 15:39:04 880
原创 SPI通讯协议
SPI:高速同步串行口。是一种标准的四线同步双向串行总线。 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并
2016-10-23 21:13:29 1327
原创 iic通讯协议
IIC总线一般串行数据通讯都有时钟和数据之分,有异步和同步之别.有单线,双线和三线等.I2C肯定是2线的(不算地线).I2C协议确实很科学,比3/4线的SPI要好,当然线多通讯速率相对就快了.I2C的原则是:在SCL=1(高电平)时,SDA千万别忽悠!!!否则,SDA下跳则"判罚"为"起始信号S",SDA上跳则"判罚"为"停止信号P".在SC
2016-10-23 21:11:20 505
原创 C语言笔试题总结
1. 下面这段代码的输出是多少(在32位机上). char *p; // 4 char *q[20]; // 80 char *m[20][20]; // 1600 int (*n)[10]; // 4 struct MyStruct{char dda;double dda1;int
2016-10-23 20:33:30 445
原创 C语言笔试题总结3
4. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9. 全
2016-10-23 20:30:30 3804
原创 c语言笔试题总结2
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)算法的时间复杂度是指_______。A)执行算法程序所需要的时间B)算法程序的长度C)算法执行过程中所需要的基本运算次数D)算法程序中的指令条数答案:C评析:所谓算法的时间复杂度,是指执行算法所需要的计算工作量。
2016-10-23 20:28:15 959
原创 c语言笔试题总结
1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量?
2016-10-23 20:24:11 806
原创 嵌入式常见笔试题总结(6)
一、常识理论题 1、 简述嵌入式操作系统有哪些,你用过哪几种,简述其特点、优势及劣势?(5分) 2、 请描述控制及提高嵌入式软件质量有哪些办法,在开发过程中怎么才能保证嵌入式软件的可靠性?(5分) 3、 你认为在嵌入式开发过程中需要哪些过程控制文档?(5分) 4、 用变量a给出下面的定义。(8分) a) 一个整型数(An integer)
2016-10-22 13:36:32 522
原创 嵌入式常见笔试题总结(5)
1、 如何在C中初始化一个字符数组。这个问题看似很简单,但是我们要将最简单的问题用最严谨的态度来对待。关键的地方:初始化、字符型、数组。最简单的方法是char array[];。这个问题看似解决了,但是在初始化上好像还欠缺点什么,个人认为:char array[5]={'1','2','3','4','5'};或者char array[5]={"12345"};或者char array[2
2016-10-22 13:17:59 396
原创 嵌入式常见笔试题总结(4)
1:用C语言实现大小端的测试 Int CheckCpu() {union{int a;char b;}c;c.a=1;if(c.b==1)printf(“小端”);else printf(“大端”);}2:volatile的作用有哪些?Volatile第一变量相当于告诉编译
2016-10-22 13:15:37 522
原创 嵌入式常见笔试题总结(3)
1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。2:为了向二进制文件尾部增加
2016-10-22 13:11:30 1212
原创 嵌入式常见笔试题总结(2)
预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将
2016-10-22 13:01:16 953
原创 嵌入式常见笔试题总结
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你
2016-10-22 12:51:47 461
原创 arm之mmu原理
实验目的:启用MMU,映射SDRAM的地址空间,操作虚拟地址实现“点灯大法”,借此掌握MMU的使用。实验环境及说明:恒颐S3C2410开发板H2410。H2410核心板扩展有64MB的K4S561632 SDRAM(4M*16bit*4BANK),地址范围是0x30000000~0x33FFFFFF。GPIO端口的地址范围是0x56000000~0X560000B0。实验思路:开发
2016-10-09 21:32:20 1028
Linux多线程服务端编程:使用muduo C++ 网络库.陈硕(详细书签)
2019-03-18
C++多线程编程实战 姜佑译
2019-03-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人