摘要:
嵌入式Linux的启动流程:Bootloader:硬件上电后跳到一个固定位置执行相应代码,初始化相应设备,加载内核代码到内存,跳到内核代码起始位置执行;kernel:内核自解压,初始化静态编译进内核的驱动模块,挂载根文件系统,直接执行第一个用户空间程序;第一个用户空间程序:配置用户环境和执行服务进程。1. 系统的启动和初始化 在基于Intel的系统上,当 loadlin.exe 或 LILO把内核装入到内存并把控制权传递给内核时,内核开始启动。arch/i386/kernel/head.S 进行特定结构的设置,然后跳转到init/main.c的main()例程。2. 内存管理 内存管理的代码主 阅读全文
摘要:
伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。使用伪目标有两点原因:1.避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一系列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突。2.提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你同样关心。以下就这两个问题我们进行分析讨论:1.如果我们需要书写这样一个规则:规则所定义的命令不是去创建目标文件,而是使用make指定具体的目标来执一些特定的命令。像下边那样:clean:rm*.otem 阅读全文
摘要:
S5PC100的RISC微处理器支持多主机I2C总线串行接口。一个专用的串行数据线(SDA)和一个串行时钟线(SCL)在总线主机和连接到I2C总线的外围设备之间传递信息。SDA和SCL线是双向的。 在多主机i2c总线模式中,多个微处理器发送到从机设备或从从机设备接收。主机S5PC100启动和终止一个在I2C总线上的数据传输。S5PC100上的I2C总线使用标准总线仲裁程序。 为了控制多主机I2C总线操作,值必须写到一下寄存器: 多主机I2C控制寄存器 I2CCON 多主机I2C控制/状态寄存器 I2CSTAT 多主机I2C发送/接收转换寄存器 I2CDS 多主机I2C地址寄存器... 阅读全文
摘要:
根据网上查的资料和自己的亲身体验,minicom在linux下确实不好用,有时会不通信,我就碰到了这样的问题,minicom连接不上开发板。所以,根据网友的推荐,使用kermit作为超级终端。安装-------------------------------------- # apt-get install ckermit 修改kermit的配置文件配置-------------------------------------- # vi /etc/kermit/kermrc 下面是使用U-Boot和Linux时推荐配置: set line /dev/ttyUSB0 set speed ... 阅读全文
只有注册用户登录后才能阅读该文。 阅读全文
摘要:
C和汇编的混合编程优势C和汇编很容易的混合 可实现在C中无法实现的处理器功能 使用新的或不支持的指令 产生更高效的代码直接链接变量和程序 确定符合程序调用规范 输入/输出相关的符号编译器也可保留内嵌汇编 大多数arm指令都可实现 内嵌汇编代码可由编译器的优化器来传递ATPCS(arm/thumb程序调用规范)ATPCS即ARM-THUMB procedure call standard的简称。PCS规定了应用程序的函数可以如何分开地写,分开地编译,最后将它们连接在一起,所以它实际上定义了一套有关过程(函数)调用者与被调用者之间的协议。PCS强制实现如下约定:调用函数如何传递参数(... 阅读全文
摘要:
Linux的伙伴算法把所有的空闲页面分为10个块组,每组中块的大小是2的幂次方个页面,例如,第0组中块的大小都为20(1个页面),第1组中块的大小为都为21(2个页面),第9组中块的大小都为29(512个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。伙伴算法把满足以上条件的两个块合并为一个块,该算法是迭代算法,如果合并后的块还可以跟相邻的块进行合并,那么该算法就继续合并。我们通过一个简单的例子来说明该算法的工作原理。假设要求分配的块其大小为128个页面(由多个页面组成的块我们就叫做页面块)。该算法先在块大小为128个页面的链表中查找,看是否有这样一个空闲块。如果有, 阅读全文
摘要:
存储管理是操作系统的重要组成部分。Linux操作系统采用了请求分页虚拟存储管理的方法。系统为每个进程提供了4G的虚拟内存空间。各个进程的虚拟内存彼此独立。Linux运行在X86架构时,进程的虚拟内存为4GB。进程虚存空间的划分在系统初始化时由GDT确定。Linux的存储管理主要是管理进程虚拟内存的用户区。进程虚拟内存的用户区分为代码段、数据段、堆栈以及进程运行的环境变量、参数传递区域等。每个进程都有一个mm_struct结构体来定义它的虚存用户区。mm_struct结构体首地址在任务结构体task_struct成员项mm中。虚存区域是虚存空间中一个连续的区域,在这个区域中的信息具有相同的操作和 阅读全文
摘要:
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,提供了各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口。根据操作系统在用户界面的使用环境和功能特征的不同,操作系统一般可分为三种基本类型,即批处理系统、分时 阅读全文
摘要:
make工程管理器就是一个“自动编译管理器”,“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。用户只需编写一次简单的编译语句即可。它大大提高了项目开发和维护的工作效率,而且几乎所有Linux下的项目编程均会涉及到make管理器。Makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚 阅读全文