随笔分类 - linux
linux系统、应用、驱动、工具的学习
摘要:数据结构(/include/linux/leds.h) led_classdev代表led的实例: 注销struct led_classdev: 注销所做的工作和注册相反。 将led挂起:将led的flag设为LED_SUSPENDED,关闭led. 从挂起中恢复: sysfs中的属性文件: 会首先
阅读全文
摘要:1. BSP概述 BSP即Board Support Package,板级支持包。 它来源于嵌入式操作系统与硬件无关的设计思想,操作系统被设计为运行在虚拟的硬件平台上。 对于具体的硬件平台,与硬件相关的代码都被封装在BSP中,由BSP向上提供虚拟的硬件平台,BSP与操作系统通过定义好的接口进行交互。
阅读全文
摘要:程序控制块 1. 程序控制块 从代码上看,程序控制块就是一个结构体.例如: 操作系统可以通过这个结构体控制与之相关联的代码,因此把这种结构叫做程序控制块. 例子: c include include //TCB定义 typedef struct tcb{ char task_name; //任务名字
阅读全文
摘要:位字段(bit field) 在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器)经常需要从字的分值中读取数值. 通常采用的方法是:定义一个于相关位的位置对应的"屏蔽码"集合,如:
阅读全文
摘要:过程调用 1. 栈帧结构 说明: 返回值在相对%ebp偏移量为4的位置; 第一个参数放在相对于%ebp偏移量为8的位置; 支持过程调用和返回的指令: 一个过程调用的整个汇编流程示意:
阅读全文
摘要:Big Endian大端模式和Little Endian小端模式 定义 1. Little Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 2. Big Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 3. 网络字节序:TCP/IP各层协议
阅读全文
摘要:内存对齐 1. 为何要内存对齐 1. 平台原因(移植原因) :不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2. 性能原因 :经过内存对齐后,CPU的内存访问速度大大提升。 2. 内存对齐的规则 许多实际的计算机系统对基本类型
阅读全文
摘要:AT&T汇编指令学习(GCC) 1. 寄存器命名原则: 相比inter语法,AT&T语法格式要求所有的寄存器都必须加上取值符"%". 2. 操作码命令格式: 1. 源/目的操作数顺序: Intel语法格式中命令表示格式为:"opcode dest, src"; "操作码 目标, 源" AT&T语法格
阅读全文
摘要:编译连接 目标文件的格式 可重定位文件: 包含代码和数据 可被用来链接成执行文件或者共享目标文件 linux(.o) windows(.obj) 可执行文件: 包含可以执行的程序 系统可以直接执行的文件 linux (ELF文件,无后缀) windows (.exe) 共享目标文件: 包含代码和数据
阅读全文
摘要:1. 概述 嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之
阅读全文
摘要: 最近研究进程间通信,遇到了idr相关的函数,为了扫清障碍,先研究了linux的idr机制。 IDR(integer ID management)的要完成的任务是给要管理的对象分配一个唯一的ID,于是可以通过这个数字找到要管理的对象。 应用IDR机制时要包含头文件。 介绍完负责工作的部分,下面介
阅读全文
摘要:转自:http://www.cnblogs.com/QJohnson/archive/2011/06/24/2089414.html 1、struct inode──字符设备驱动相关的重要结构介绍 内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。Linux2.6.27内核
阅读全文
摘要:1.在cygwin里访问Windows盘 cd /cygdrive/c cd c: 2.整合cygwin命令到Windows中 假设cygwin安装在d:/develop/cygwin,则将d:/develop/cygwin/bin添加到系统变量PATH中(最好加在windows前面,这样的话,有些
阅读全文
摘要:MIPS汇编 MIPS指令集 MIPS指令集属于精简指令集 MIPS的所有指令都是32位,指令格式简单,而X86的指令长度不是固定的。 简单的指令和格式易于译码和流水线操作,但是代码密度不高,导致二进制文件大 MIPS有32个通用寄存器REG,为什么是32个而不是更多呢? 因为更多的寄存器需要更多的
阅读全文
摘要:main.c中的初始化 head.s在最后部分调用main.c中的start_kernel() 函数,从而把控制权交给了它。 所以启动程序从start_kernel()函数继续执行。这个函数是main.c乃至整个操作系统初始化的最重要的函数,一旦它执行完了,整个操作系统的初始化也就完成了。 如前所述
阅读全文
摘要:实际上,do{…}while(0)的作用远大于美化你的代码。 总结起来这样写主要有以下几点好处: 1. 辅助定义复杂的宏 避免引用的时候出错: 举例来说,假设你需要定义这样一个宏: #define DOSOMETHING()\ foo1();\ foo2(); 这个宏的本意是,当调用DOSOMETH
阅读全文
摘要:问题 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有
阅读全文
摘要:进程是指具有私有空间的任务,线程是指共享空间的任务
阅读全文
摘要:1.简介 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性。 为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理
阅读全文
摘要:简介 Gnu Make主要用于构建和管理程序包。Makefile文件描述了整个工程的编译、连接等规则。其中包括: 工程中的哪些源文件需要编译以及如何编译; 需要创建那些库文件以及如何创建这些库文件; 如何最后产生我们想要得可执行文件。 make是一个命令工具,它解释Makefi...
阅读全文