摘要:
<内核模块代码> 1)内核模块内有main()函数 2)首先编写没内核模块相应的函数功能 3)内核模块的入口由一个宏(module_init(),module_exit()),来加载和卸载(实际是指明加载函数和卸载函数,这样内核才会认识) 4)头文件:<linux/init.h><linux/mod 阅读全文
摘要:
《进程要素》 <进程与程序的区别> 程序: 存放在硬盘上一些列代码和数据的可执行映像,是一个静止的实体 进程: 是一个执行中的程序,是动态的实体 <进程4要素> 1)有一段程序供其执行,这段程序不一定是某个进程所专有,可以与其他进程所共用。 2)有进程所专用的内核空间堆栈 3)在内核中有task_s 阅读全文
摘要:
<模块申明> MODULE_LICENSE (): 声明该模块遵守的许可证协议,如“GPL”“GPL V2” MODULE_AUTHOR(“姓名”) MODULE_DESCREPTION(“功能描述”) MODULE_VERSION(“版本号”) <使用方式> #include<linux/init 阅读全文
摘要:
嵌入式软件的层次: bootloader +boot_parameter+kernel+ boot filesystem <uboot的编译> 1)将uboot压缩文件拷贝到 linux系统中并解压 2)解压后会得到一个uboot文件 3)进入uboot文件 4)vim Makefile 找到需要配 阅读全文
摘要:
<const 关键字> 在嵌入式系开发中,const关键字就是“只读”的意思 <为什么要ARM需要进行C语言环境的初始化> 在汇编情况下,指令的跳转,保护现场需要保存的数据很少,并且可以直接访问寄存器,但是到了C语言环境中,函数的调用。 (1)无时无刻都需要保护现场,(2)并且无法直接访问寄存器,( 阅读全文
摘要:
<总线模型概述> 随着技术的发展,系统的拓扑结构也越来越复杂,对热插拔。跨平台移植性的要求越来越高,从Linux2.6内核开始提供全新的设备模型。将所有的驱动挂载到计算机的总线上(比如USB总线),当有设备连接到总线上的时候,总线能够感知到,这时系统就会把挂载到总线上是所有驱动和设备匹配。通过不同的 阅读全文
摘要:
《《字符设备驱动程序》》 《设备控制理论》 <作用> 大部分驱动除了对外部设备提供读和写的基本功能以外,还需要对设备进行控制。 <应用程序接口> 在用户空间使用ioctl()系统调用来控制设备。 函数原型: int ioctl (int fd,unsigned long cmd,........) 阅读全文
摘要:
全局描述符表GDT(Global Descriptor Table): (1)在整个系统中,全局描述符表(注意这里是表,表只有一张)GDT只有一张(一个处理器对应一个GDT)。 (2)GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄 阅读全文
摘要:
<作用介绍> linux 系统可以分为内核空间和用户空间,当用户空间的一个函数的实现既不是在C库,也不是自己实现,而是在内核空间,这就是系统调用 实现体是内核空间,使用者是用户空间。 <流程分析> 从用户空间,到内核空间,并找到函数执行体。 软中断: 当用户空间使用系统调用的时候就会触发软中断。当要 阅读全文
摘要:
《《混杂设备驱动模型》》 《混杂设设备的描述》 <混在设备的概念> 在linux系统中,存在一类字符设备,他们拥有相同的主设备号(10),但是次设备号不同,称这类设备为混在设备(missdevice),所有的混杂设备形成一个链表,对设备进行访问,根据次设备号在链表中查找相应的混杂设备。 注意:混杂设 阅读全文