- 博客(37)
- 资源 (36)
- 收藏
- 关注
原创 int i2c_probe()
1.i2c驱动涉及到的数据结构: struct i2c_adapter { struct module *owner; unsigned int id; unsigned int class; // 适配器支持的类型,如传感器,eeprom等 const struct i2c_algor
2017-03-29 23:58:57 2923
转载 二维数组和二级指针
对于如下程序void fun(int **data,int row,int column){ for(int i = 0;i for(int j = 0;j cout "\t"; cout endl; }}int main(){ int data[2][3] = {{3,8,4},{4,5,6}}; fun(data,2,3); return 0;}
2017-03-29 23:44:01 1814
原创 C语言指针数组和数组指针
一、指针数组和数组指针的内存布局初学者总是分不出指针数组与数组指针的区别。其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面到底哪个是数组指针,哪个是指针数
2017-03-29 23:36:38 1307
转载 浅谈Linux内存管理机制
linux内存特性在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于Windows的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时, 才为
2017-03-29 00:18:56 1213
转载 浅谈Linux的内存管理机制
一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内
2017-03-29 00:18:29 1097
转载 Linux 虚拟内存和物理内存的理解
首先,让我们看下虚拟内存: 第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存
2017-03-28 23:56:45 1150
转载 进程地址空间与虚拟存储空间的理解
以windows为例子:在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。一 早期的内存分配机制在 早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物
2017-03-28 23:47:59 1117
转载 ARM MMU工作原理剖析
一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成
2017-03-28 22:29:53 1061
原创 int register_chrdev()
在i2c的static int at24cxx_detect(struct i2c_adapter *adapter, int address, int kind)中有一句,major = register_chrdev(0, "at24cxx", &at24cxx_fops);进去内核中:1 int register_chrdev(unsigned int major, const
2017-03-26 23:01:14 1270
原创 结构体指针数组
struct h{BTNode *TQ;int level; ?}a[100],b,*c[3],*d; a是一个结构体数组,已经有100个节点了。不需要再分配空间了。b是一个结构体变量,也已经有空间了,就和int b;已经有空间了一样。c是一个指针数组,c也已经有空间了,有3个元素,但是这三个元素是还没有分配空间的指针,所以要用malloc分别为他们分配内存。d是一个结构体
2017-03-26 22:05:30 10011 1
转载 Linux设备模型分析之device_driver(基于3.10.1内核)
一、device定义device结构体定义在include/linux/device.h文件中:[cpp] view plain copy 598/** 599 * struct device - The basic device structure 600 * @parent: The device's "parent" device, the device to which it is
2017-03-26 14:07:45 1278
转载 Linux设备模型分析之device(基于3.10.1内核)
一、device定义device结构体定义在include/linux/device.h文件中:[cpp] view plain copy 598/** 599 * struct device - The basic device structure 600 * @parent: The device's "parent" device, the device to which it is
2017-03-26 14:06:25 1353
转载 Linux设备模型分析之kset(基于3.10.1内核)
一、kset结构定义kset结构体定义在include/linux/kobject.h文件中,其内容如下:[cpp] view plain copy 142/** 143 * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. 144 * 145 * A kset de
2017-03-26 13:53:15 1264
转载 Linux设备模型分析之kobject(基于3.10.1内核)
一、kobject结构定义kobject是Linux设备模型的最底层数据结构,它代表一个内核对象。kobject结构体定义在include/linux/kobject.h文件中:[cpp] view plain copy60struct kobject { 61 const char *name; 62
2017-03-26 13:48:45 1413
转载 Linux设备模型分析之bus
前面我们分析了Linux设备模型中kobject、kset以及ktype的使用,它们是设备模型的最基础部分,在其上有更高级一层的bus、device和driver。在这一篇文章中,我们来看一下bus的用法。 一、相关数据结构首先,我们列出本文涉及的相关数据结构。[cpp] view plain copy 51struct bus_type { 52 const char
2017-03-26 13:41:52 1114
转载 Linux设备模型分析之kset
上一篇博客我们分析了Linux设备模型中kobject的注册和使用,在这一篇文章中,我们来看一下kset的用法。首先我们看一个使用kset的例子,代码如下:[cpp] view plain copy #include #include #include #include #include #include #include MODULE_AUTHOR("h
2017-03-26 13:36:07 1189
转载 Linux设备模型分析之kobject
一、kobject应用举例Linux设备模型最基本的组成元素是kobject,我们先来看一个kobject的应用例子,该程序在Ubuntu 10.10, 2.6.32-38-generic-pae内核上调试通过。[cpp] view plain copy #include #include #include #include #include #include #i
2017-03-26 12:54:05 1163
原创 Linux fcntl函数详解
功能描述:根据文件描述词来操作文件的特性。文件控制函数 fcntl -- file control头文件:#include #include 函数原型: int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg); in
2017-03-23 22:45:25 1204
转载 signal_pending函数解析
经常我们在睡眠的代码中 会看到这样的例子: if (signal_pending(current)) { ret = -ERESTARTSYS; return ret; } 关于 -ERESTARTSYS 到底是什么意思? -ERESTARTSYS表示信号函数处理完毕后重新执行信号函数前的某个系统
2017-03-23 22:07:34 6670
转载 面试中常问的关于链表的题目
链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文对链表相关的面试题做了较为全面的整理,希望能对找工作的同学有所帮助。链表结点声明如下:struct ListNode{ int m_nKey
2017-03-23 22:02:42 1036
原创 Wait Queue等待队列
驱动中使用等待队列来实现阻塞进程的唤醒,它以队列为基础数据结构,与进程调度机制紧密结合。定义等待队列头部wait_queue_head_t my_queue;初始化“等待队列头部”init_waiatqueue_head(&my_queue);(PS:下面的宏可以作为定义并初始化等待队列头部的快捷方式DECLARE_WAIT_QUEUE_HEAD(n
2017-03-23 21:13:30 1648
原创 安卓系统分层
安卓系统一共分为五层:内核层(Linux Kernel)硬件抽象层(HAL)运行时库层(Runtime)应用程序框架层(Application Framework)应用层层(Application)
2017-03-23 18:00:12 1774
转载 ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach
2017-03-21 00:58:07 1382
转载 Framebuffer原理、使用、测试
Framebuffer的配置及应用*一、FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出 FrameBuffer这 个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显
2017-03-20 00:07:31 2029
转载 图解kset,kobject,subsys
linux设备模型方面是驱动中比较高级的一块内容,对于刚开始学习驱动开发人员来说开始必须掌握驱动模型的编写框架和常用函数,当设备模型框架熟悉之 后,就可以进入研究设备模型的实现。进入设备之前,我们必须搞清楚subsys,kset,kobject等概念。理清楚它们的结构,整个设备模型就了然 了。 学习前的须知: Linux设备模型的目的是:为内核
2017-03-19 23:35:37 2887
转载 Kobject相关
kobjec是linux在2.6中新引进的统一的设备管理模型,他的主要目的就是对linux的2.6系统所有的设备进行统一的管理,在以前的内核中并没有独立的数据结构让内核对整体的系统做配置和管理。尽管缺乏此类的信息,但是很多时候系统还是能正常工作,然后随着设备越来越多,系统越来越复杂,以及需要支持更多诸如电源管理等新的特征需要,新的内核版本明确提出了需要统一管理设备的要求:需要有一个对系统结构整体统
2017-03-19 21:59:35 1068
转载 try_module_get和module_put
try_module_get注解: 1>位置:/linux/kernel/module.c 2>声明:static inline int try_module_get(structmodule *module) 3>功能:判断module模块是否处于活动状态,然后通过local_inc()宏将该模块的引用计数加1
2017-03-19 02:15:11 1696
转载 c语言中的的内联(inline)函数
c/c++中的inline,使用在函数声明处,表示程序员请求编译器在此函数的被调用处将此函数实现插入,而不是像普通函数那样生成调用代码(申请是否有效取决于编译器)。一般地说,这样作的优点是省掉了调用函数的开销;缺点则是可能会增加代所生成目标代码的尺寸(二班的除外,二班情况下,inline函数甚至会返过来降低程序的性能)。实际上,即使没有手工指定inline函数,编译器一般还会选择一些代码量
2017-03-18 14:47:27 1317
转载 谈EXPORT_SYMBOL使用
EXPORT_SYMBOL只出现在2.6及以上内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。 1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码
2017-03-18 14:01:07 1427
转载 ABI EABI
ABI和API是不一样的,ABI是强调的是B,也就是二进制级别的兼容。P是编程。I是接口。应该是关于I的设计问题,我不太理解,应该很深刻。想不到编译器竟然这么有学问。1。什么是ABIABI,application binary interface (ABI),应用程序二进制接口。既然是 接口,那就是某两种东西之间的沟通桥梁,此处有这些种情况:A。应用程序
2017-03-14 01:19:51 1199
转载 内核Kconfig 与 Makefile 文件分析
一.内核构造系统简介 内核是个复杂庞大的系统,对它进行配置、裁剪、编译原本非常地复杂和困难,但现在却只需要简单的两个命令:(1)make menuconfig ;(2)make uImage 就搞定了,原因是在其背后有一个设计精巧的内核构造系统帮助我们精确的完成了各项任务。内核构造系统最关键的组成元素就是各个目录下的Kconfig 文件和 Makefile文件,本节将对
2017-03-12 00:50:07 1156
原创 ARM处理器基础
1.处理器工作模式 用户(usr):正常ARM程序执行状态 快中断(fiq):为支持数据传输或通道处理设计 中断(irq):用于一般用途的中断处理 管理(svc):操作系统保护模式 中止(abt): 数据或指令预取中止后进入 系统(sys):操作系统的特权用户模式 未定义(und):执行了一个未定义指令时进入 除用户模式以外,其他的所有6种模式称之为
2017-03-09 20:54:09 1194
原创 sizeof计算结构体长度
sizeof在计算变量所占的空间大小时所选取的机制:1.结构体满足的三个条件结构体的大小等于结构体内最大成员大小的整数倍;结构体内的成员相对于首地址的偏移量是当前成员大小的整数倍,如有需要会在成员之间填充字节;(结构体变量的首地址能被其最大成员大小所整除。)如:struct A { char a; int b; };大小1(char)+3(
2017-03-08 13:14:42 3752
转载 结构体中定义函数指针
结构体指针变量的定义,定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct结构体标识符{成员变量列表;…};struct 结构体标识符 *指针变量名;变量初始化一:struct结构体标识符 变量名={初始化值1,初始化值2,…, 初始化值n };形式2:在定义类型的同时定义变量struct结构体标识符{成员变量列
2017-03-06 23:34:22 6836
原创 busybox安装根文件系统
1.交叉编译busyboxmake ARCH=arm CROSS_COMPILE=arm-Linux- CONFIG_PREFIX=/work/rootfs install2.移植lib库(安装glibc)cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* /work/rootfs/lib -d
2017-03-05 15:13:19 1240
转载 ubuntu下安装nfs服务器
Ubuntu下nfs服务器的配置过程:1、安装nfs服务器和客户端sudo apt-get install nfs-kernel-server nfs-common portmap2、配置portmap 两种方式任选一种(1)sudo vim /etc/default/portmap 去掉 -i 127.0.0.1(2)sudo dpkg-rec
2017-03-04 13:07:45 1315
原创 ubuntu下多个gcc编译器的安装及切换
1.安装多个版本的gcc下载gcc-4.3.2.tar.bz2 到目录 /usr/loca/arm/4.3.2 ,并切换当前目录为/usr/loca/arm/4.3.2 :cd /usr/loca/arm/4.3.2 解压缩: tar -jxvf gcc-4.3.2.tar.bz22. 修改环境变量,把交叉编译器的路径加入到PATH方法一:修改/etc/bash.ba
2017-03-02 01:00:44 3150
stm32f103超声波测距
2017-12-22
VMwareTools-9.6.0-1294478.tar.gz
2017-10-16
mkbooting和unpackbootimg适用于ubuntu
2017-10-11
dragon board 410c 中文开发文档
2017-10-11
tiny4412内核补丁dm9621
2017-08-31
qemu内核调试环境文件系统
2018-07-25
vim配置for ubuntu
2018-07-22
keil5——51
2018-03-22
STM32F103VET6 usart demo
2018-03-10
Micrium_STM32xxx_uCOS-II
2018-03-08
Cortex™ -A Series Version: 3.0 Programmer’s Guide
2018-03-08
i2c-tools-distrotech-i2c-tools
2018-03-07
2440根文件系统
2018-02-07
glibc-2.23.tar.bz2
2018-02-05
QEMU使用手册
2018-02-03
jz2440 u'boot
2018-01-21
工程文件....
2018-01-13
jz2440使用的kernel
2018-01-13
Jz2440v2对应的uboot
2018-01-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人