从.net到delplhi
从windows到Linxu
未来有多远?
如何突破自己?
什么是自己?
我从哪里来,要到哪里去?
世界是什么?
是世选择了我,还是我选择了世界?
怎么才能够完成蜕变?
去他妈的,干吧!!!

ARM可执行文件格式
  • ELF:可执行文件格式
  • AFX:ARM的调试文件
  • BIN:可以写到flash或者RAM中直接运行
  加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。代码一般是烧写在NAND里面
 
ARM上电启动
  1. 初始化ARM CPU异常处理向量表
  2. 禁止看门狗???
  3. 禁止中断
  4. 初始化系统时钟,包括CPU主频,系统总线时钟频率,外设总线时钟频率
  5. 初始化SDRAM (SD卡) 控制器
  6. 设置ARM CPU 在各种模式下的栈指针
  7. 设置ARM中断向量表,安装中断处理程序
  8. 搬运可执行文件到RAM中
  9. 跳转到C语言程序的MIAN函数开始执行。
linux内核原码的组织
init    核心初始化代码        该目录下的mian.c中的start_lernel函数式内核运行的第一个C语言函数,相当于内核的mian函数
arch  体系结构的核心代码    不同的CPU不同的指令
MM 独立于CPU体系结构的内存管理代码
kernel 内核核心
drivers 驱动程序
ipc 进程间通信的代码
lib 库代码
...
 
内核裁剪配置图  Kconfig|Kconfig|Kconfig|Kconfig ==>.config|makefile ==>uimage或者zimage
CPU刚上电启动时,一般内存控制器还没有配置过,无法再内存中运行程序。
linux内核要运行CPU还必须满足一些条件
为了初始化CPU以及其他外设,必须要有一个先于内核的程序来配置硬件,这个程序就是BootLoader=BIOS+GRUB=Uboot(严格依赖硬件)
 
CPU内部有一个叫做MMU的内存转换单元,其中有一个页表,用来实现CPU寻址与内存或者其他IO寻址转换。对于不同的操作系统,可以设置不同的内存转换的页表,UBoot可以写不同的内容,将不同的CPU地址分配给不同的硬件设备。比如32位CPU寻址范围为4G,可以只给内存分配1K,给硬件分配3G。这样即使你的内存有4G,CPU也只使用其中的1K。(当然这是作死的节奏)
 
 
 

嵌入式ARM系统开发基础的更多相关文章

  1. 嵌入式Linux系统开发环境搭建

    Linux kernel Complier: http://supportopensource.iteye.com/blog/680483 sudo make mrproper         净化解 ...

  2. ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

    本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...

  3. 嵌入式ARM开发板学习方法步骤

    嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有linux,android. 平台:Cortex-A9开发板 嵌入式技术学习如何入手,从何学起呢, 以下内容简单介绍嵌入式开发的学习步骤及如 ...

  4. 嵌入式linux系统应用开发

    关于嵌入式系统   平时大家说的嵌入式其实范围比较广的,是一种软硬件可裁剪,以应用为中心开发的专用系统,硬件平台可以是单片机,或者以ARM系列的处理器.单片机一般直接裸奔程序,不过现在有了好多基于单片 ...

  5. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  6. Python云端系统开发入门——框架基础

    Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...

  7. Holer实现外网访问ARM嵌入式Linux系统

    公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...

  8. 外网访问ARM嵌入式Linux系统

    外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...

  9. wpf控件开发基础(3) -属性系统(2)

    原文:wpf控件开发基础(3) -属性系统(2) 上篇说明了属性存在的一系列问题. 属性默认值,可以保证属性的有效性. 属性验证有效性,可以对输入的属性进行校验 属性强制回调, 即不管属性有无发生变化 ...

随机推荐

  1. Codeforces Round #247 (Div. 2) C题

    赛后想了想,然后就过了.. 赛后....... 我真的很弱啊!想那么多干嘛? 明明知道这题的原型就是求求排列数,这不就是 (F[N]-B[N]+100000007)%100000007: F[N]是1 ...

  2. 由浅入深了解Thrift之结果封装

    一.thrift返回结果封装 Thrift文件添加版本号,方便对thrift的版本进行控制 服务与返回的数据类型分开定义 在项目中使用Thrift提供RPC服务时,很多情况下我们都会将返回的结果进行封 ...

  3. ExtJs之Panel基本布局

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  4. LINUX输入输出与文件

    1 文件描述符 内核为每个进程维护一个已打开文件的记录表(实现为结构体数组),文件描述符是一个较小的正整数(0-1023)(结构体数组下标),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文 ...

  5. BZOJ 1877: [SDOI2009]晨跑 费用流

    1877: [SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一 ...

  6. 基于ant的jmeter自动化性能测试

    准备工作: 1.java的运行环境正常,及运行java -version.javac -version能正常输出java版本: 2.ant的运行环境正常,使用ant需要配置环境变量,编辑/etc/pr ...

  7. Shell练习 行列转换

    原题:https://leetcode.com/problems/transpose-file/Given a text file file.txt, transpose its content. Y ...

  8. 【Apache运维基础(5)】Apache的Rewrite攻略(2)

    简述 .htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作 ...

  9. PushBackInputStream与PushBackInputStreamReader的用法

    举个例子:获取XX内容 PushBackInputStream pb=new PushBackInputStream(in,4);//4制定缓冲区大小 byte[] buf=new byte[4]; ...

  10. APM (应用性能管理)

    在信息科学和系统控制领域,APM是用来监控和管理应用软件是否有效运行的.APM通过监测和分析应用的表现去保证软件应用的良好运行,APM已经商用. 基本定义 APM = Application Perf ...