从.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. ASP.NET防止用户多次登录的方法

    常见的处理方法是,在用户登录时,判断此用户是否已经在Application中存在,如果存在就报错,不存在的话就加到Application中(Application是所有Session共有的,整个web ...

  2. Runtime的用法

    public class RuntimeTest { public static void main(String[] args) { Runtime run =Runtime.getRuntime( ...

  3. 二维码(支持arc,苹果自带扫描,zbar扫描,二维码生成)

    下载地址:http://pan.baidu.com/s/1mgvJzyo

  4. C++引用变量(转)

    引用变量 c++中引用变量的使用: 定义: int rate=80; int  & pt=rate 1.pt 是引用变量,申明引用变量时必须将其初始化.pt 和rate 的值指向相同的内存变量 ...

  5. 深入浅出ES6(十六):模块 Modules

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 早在2007年我刚加入Mozilla的JavaScript团队的时候广为流传一个 ...

  6. light oj 1068 - Investigation 数位DP

    思路:典型的数位DP!!! dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k. 注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0. 这样数组就可以开小点, ...

  7. linux下文件编码的查看与修改

    在Linux中查看文件编码可以通过vim编辑器来查看,在vim命令模式下输入如下命令即可: :set fileencoding //在vim中查看文件编码 如果你只是想查看其它编码格式的文件或者想解决 ...

  8. http://www.cnblogs.com/TankXiao/p/4018219.html

    http://www.cnblogs.com/TankXiao/p/4018219.html

  9. oci.dll文件是用来干嘛的? 如果没有安装ORACLE客户端提示oci.dll未加载

    oracle数据库开发编程中,没有找到oci.dll,一般是系统的 path 设置有问题, 查找oci.dll, 然后加入到系统路径.oci.dll 可下载解压到系统盘的system32目录下.然后打 ...

  10. Project Euler 108:Diophantine reciprocals I 丢番图倒数I

    Diophantine reciprocals I In the following equation x, y, and n are positive integers. For n = 4 the ...