随笔分类 -  Linux

摘要:嵌入式Linux的启动流程:Bootloader:硬件上电后跳到一个固定位置执行相应代码,初始化相应设备,加载内核代码到内存,跳到内核代码起始位置执行;kernel:内核自解压,初始化静态编译进内核的驱动模块,挂载根文件系统,直接执行第一个用户空间程序;第一个用户空间程序:配置用户环境和执行服务进程。1. 系统的启动和初始化 在基于Intel的系统上,当 loadlin.exe 或 LILO把内核装入到内存并把控制权传递给内核时,内核开始启动。arch/i386/kernel/head.S 进行特定结构的设置,然后跳转到init/main.c的main()例程。2. 内存管理 内存管理的代码主 阅读全文
posted @ 2013-05-09 20:09 雪中飞 阅读(1325) 评论(0) 推荐(1) 编辑
摘要:伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。使用伪目标有两点原因:1.避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一系列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突。2.提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你同样关心。以下就这两个问题我们进行分析讨论:1.如果我们需要书写这样一个规则:规则所定义的命令不是去创建目标文件,而是使用make指定具体的目标来执一些特定的命令。像下边那样:clean:rm*.otem 阅读全文
posted @ 2013-01-24 12:12 雪中飞 阅读(369) 评论(0) 推荐(0) 编辑
摘要:根据网上查的资料和自己的亲身体验,minicom在linux下确实不好用,有时会不通信,我就碰到了这样的问题,minicom连接不上开发板。所以,根据网友的推荐,使用kermit作为超级终端。安装-------------------------------------- # apt-get install ckermit 修改kermit的配置文件配置-------------------------------------- # vi /etc/kermit/kermrc 下面是使用U-Boot和Linux时推荐配置: set line /dev/ttyUSB0 set speed ... 阅读全文
posted @ 2013-01-17 19:02 雪中飞 阅读(832) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。
posted @ 2013-01-17 18:59 雪中飞 阅读(99) 评论(0) 推荐(0) 编辑
摘要:Linux的伙伴算法把所有的空闲页面分为10个块组,每组中块的大小是2的幂次方个页面,例如,第0组中块的大小都为20(1个页面),第1组中块的大小为都为21(2个页面),第9组中块的大小都为29(512个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。伙伴算法把满足以上条件的两个块合并为一个块,该算法是迭代算法,如果合并后的块还可以跟相邻的块进行合并,那么该算法就继续合并。我们通过一个简单的例子来说明该算法的工作原理。假设要求分配的块其大小为128个页面(由多个页面组成的块我们就叫做页面块)。该算法先在块大小为128个页面的链表中查找,看是否有这样一个空闲块。如果有, 阅读全文
posted @ 2013-01-06 21:54 雪中飞 阅读(1385) 评论(2) 推荐(2) 编辑
摘要:存储管理是操作系统的重要组成部分。Linux操作系统采用了请求分页虚拟存储管理的方法。系统为每个进程提供了4G的虚拟内存空间。各个进程的虚拟内存彼此独立。Linux运行在X86架构时,进程的虚拟内存为4GB。进程虚存空间的划分在系统初始化时由GDT确定。Linux的存储管理主要是管理进程虚拟内存的用户区。进程虚拟内存的用户区分为代码段、数据段、堆栈以及进程运行的环境变量、参数传递区域等。每个进程都有一个mm_struct结构体来定义它的虚存用户区。mm_struct结构体首地址在任务结构体task_struct成员项mm中。虚存区域是虚存空间中一个连续的区域,在这个区域中的信息具有相同的操作和 阅读全文
posted @ 2013-01-05 20:49 雪中飞 阅读(795) 评论(0) 推荐(1) 编辑
摘要:操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,提供了各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口。根据操作系统在用户界面的使用环境和功能特征的不同,操作系统一般可分为三种基本类型,即批处理系统、分时 阅读全文
posted @ 2012-12-28 17:40 雪中飞 阅读(3102) 评论(3) 推荐(2) 编辑
摘要:make工程管理器就是一个“自动编译管理器”,“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。用户只需编写一次简单的编译语句即可。它大大提高了项目开发和维护的工作效率,而且几乎所有Linux下的项目编程均会涉及到make管理器。Makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚 阅读全文
posted @ 2012-12-27 15:39 雪中飞 阅读(1964) 评论(1) 推荐(0) 编辑
摘要:GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。它是一种强大的命令行调试工具。一般来说,调试器的功能:能够运行程序,设置所有能影响程序运行的参数;能够让程序在指定条件下停止运行;能够在程序停止时检查所有参数的情况;能够根据指定条件改变程序的运行。gdb调试源代码流程:1)进入GDB #gdb test只需输入GDB和要调试的可执行文件即可,在GDB的启动画面中指出了GDB的版本号、遵循的许可等信息,接下来就进入了由"(gdb)"开头的命令行界面了;2)查看文件 (gdb) l在GDB中键入"l"(list)就可以查看程序的源码了,GDB列 阅读全文
posted @ 2012-12-26 23:52 雪中飞 阅读(3513) 评论(0) 推荐(2) 编辑
摘要:GCC编译器GCC(GNU Compiler Collection)是一套功能强大、性能优越的编程语言编译器,它是GNU计划的代表作品之一。GCC是Linux平台下最常用的编译器,GCC原名为GNU C Compiler,即GNU C语言编译器,它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。它的名称也逐渐变成了GNU Compiler Collection。GCC是GNU项目的编译器组件之一,也是GNU最具有代表性的作品。在GCC设计之初仅仅作为一个C语言的编译器,可是经过十多年的发展,GCC已经 阅读全文
posted @ 2012-12-26 15:36 雪中飞 阅读(1687) 评论(0) 推荐(1) 编辑
摘要:并发与竞态并发(concurrency)指的是多个执行单元同时、并行被执行。竞态因并发的执行单元对共享资源(1.硬件资源如寄存器,2.软件的全局变量、静态变量等)的访问所致。竞态发生的情况:1、对称多处理"(Symmetrical Multi-Processing)系统的多个CPU之间对称多处理"(Symmetrical Multi-Processing)又叫SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。它是相对非对称多处理技术而言的、应用十分广泛的并行技术。2、单CPU内进程与抢占它的进程间虽然CPU只有一个,但是如Lin 阅读全文
posted @ 2012-12-21 16:56 雪中飞 阅读(1043) 评论(0) 推荐(0) 编辑
摘要:Linux内核的Makefile分为5个部分: Makefile 顶层Makefile,它读取.config文件,并负责创建vmlinux(内核镜像)和modules(模块文件)。 .config 内核配置文件,调用make menuconfig或者make xconfig命令等配置 arch/$(ARCH)/Makefile 内核相关,具体架构的Makefile scripts/Makefile.* 公共编译规则定义文件。所有kbuild Makefile的规则,它们包含了定义/规则等。 kbuild Makefiles 每个子目录都有kbuild Makefile,它们负责生成built. 阅读全文
posted @ 2012-12-21 15:22 雪中飞 阅读(1126) 评论(0) 推荐(0) 编辑
摘要:内核的配置与编译Linux的内核是可以配置的,就是说可以根据用户的需要进行配置,正是因为Linux的内核可以自由的配置,自由的裁剪,减小内核的体积,才使得Linux的内核可以移植到arm平台上去。Linux内核配置具体步骤如下:1. 清除临时文件,中间文件和配置文件(为什么要清除呢?在得到一个内核以后会有许多垃圾文件需要清除)$make clean(删除垃圾文件 保留配置文件)$make mrproper(删除垃圾文件 删除配置文件)$make distclean(删除垃圾文件 删除配置文件 删除补丁文件)2. 确定目标系统硬件配置情况,比如cpu的类型,网卡型号,所需支持的网络协议,修改Ma 阅读全文
posted @ 2012-12-19 10:55 雪中飞 阅读(951) 评论(0) 推荐(0) 编辑
摘要:内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而用户态应用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信任,而应用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空间。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。用户空间的应用程序,通过系统调用,进入内核空间。由内核 阅读全文
posted @ 2012-12-19 10:42 雪中飞 阅读(6588) 评论(5) 推荐(4) 编辑
摘要:内核,是一个操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件,一个内核不是一套完整的操作系统。Linux的核心,通常在根目录下,一个叫vmlinuz的文件。我们用这个文件来控制我们的整台PC,包括周边设备和软硬磁盘机、CD-ROM、声卡等。简单地说,核心就是操作系统本身。从程序员的角度来讲,操作系统的内核提供了一个与计算机硬件等价的扩展或虚拟的计算平台。它抽象了许多硬件细节,程序可以以某种统一的方式进行数据处理,而程序员则可以避开许多硬件细节。从另一个角度讲,普通用户则把操作系统 阅读全文
posted @ 2012-12-18 15:42 雪中飞 阅读(1746) 评论(1) 推荐(1) 编辑
摘要:@board/samsung/smdkc100/lowlevel_init.S#include <config.h>#include <version.h>#include <asm/arch/cpu.h>#include <asm/arch/power.h>/** Register usages:** r5 has zero always*/_TEXT_BASE:.wordTEXT_BASE.globl lowlevel_initlowlevel_init:movr9, lr/* r5 has always zero */movr5, #0ld 阅读全文
posted @ 2012-12-10 17:17 雪中飞 阅读(1331) 评论(0) 推荐(0) 编辑
摘要:Bootloader启动大多数都分为两个阶段。第一阶段主要包含依赖于CPU的体系结构硬件初始化的代码,通常都用汇编语言来实现;第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。U-Boot的启动代码分布在start.S、low_level_init.S、 board.c和main.c文件中。start.S 是U-Boot整个程序的入口,该文件使用汇编语言编写,不同体系结构的启动代码是不同的;low_level_init.S 是特定开发板的设置代码;board.c 包含开发板底层设备驱动;main.c 是一个与平台无关的代码,U- Boot应用程序的入口在此文件中 阅读全文
posted @ 2012-12-09 16:00 雪中飞 阅读(6709) 评论(0) 推荐(0) 编辑
摘要:u-boot源码结构 在顶层目录下有18个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,可以分为3类。 第1类目录与处理器体系结构或者开发板硬件直接相关; 第2类目录是一些通用的函数或者驱动程序; 第3类目录是u-boot的应用程序、工具或者文档。u-boot的源码顶层目录说明目 录 特 性 解 释 说 明board 平台依赖 存放开发板相关的目录文件,每一套板子对应一个目录。如RPXlite(mpc8xx)、 fsc100(arm_cortexa8)、sc520_cdp(x86) 等目录,子目录仅存放与开发板相关的c文件和配置文件, 不包含开发板CPU架构通用的实现文 阅读全文
posted @ 2012-12-08 19:21 雪中飞 阅读(5854) 评论(0) 推荐(0) 编辑
摘要:BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。BootLoader的操作模式一般分为自启动模式和交互模式。自启动模式:BootLoaderd从目标机上 阅读全文
posted @ 2012-12-08 13:48 雪中飞 阅读(2398) 评论(6) 推荐(0) 编辑
摘要:1 引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法。与DOS和早期的Windows不同,Unix/Linux系统是真正实现多任务操作的系统,可以说,不使用多进程编程,就不能算是真正的Linux环境下编程。 多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix系统中才引入多线程机制,... 阅读全文
posted @ 2012-11-28 20:27 雪中飞 阅读(389) 评论(0) 推荐(0) 编辑