嵌入式ARM系统开发基础
2013-12-06 17:34
246 查看
从.net到delplhi 从windows到Linxu 未来有多远? 如何突破自己? 什么是自己? 我从哪里来,要到哪里去? 世界是什么? 是世选择了我,还是我选择了世界? 怎么才能够完成蜕变? 去他妈的,干吧!!!
ARM可执行文件格式 ELF:可执行文件格式 AFX:ARM的调试文件 BIN:可以写到flash或者RAM中直接运行
加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。代码一般是烧写在NAND里面 ARM上电启动 初始化ARM CPU异常处理向量表 禁止看门狗??? 禁止中断 初始化系统时钟,包括CPU主频,系统总线时钟频率,外设总线时钟频率 初始化SDRAM (SD卡) 控制器 设置ARM CPU 在各种模式下的栈指针 设置ARM中断向量表,安装中断处理程序 搬运可执行文件到RAM中 跳转到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可执行文件格式 ELF:可执行文件格式 AFX:ARM的调试文件 BIN:可以写到flash或者RAM中直接运行
加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。代码一般是烧写在NAND里面 ARM上电启动 初始化ARM CPU异常处理向量表 禁止看门狗??? 禁止中断 初始化系统时钟,包括CPU主频,系统总线时钟频率,外设总线时钟频率 初始化SDRAM (SD卡) 控制器 设置ARM CPU 在各种模式下的栈指针 设置ARM中断向量表,安装中断处理程序 搬运可执行文件到RAM中 跳转到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。(当然这是作死的节奏)
相关文章推荐
- 我的android 第22天 - Uri介绍
- CWnd与HWND的区别与转换
- Python 抓取google链接代码
- 解决windows输入参数控制台程序输出参数是总是第一个字符问题
- 内省 javaBean
- 迪米特法则
- wcf系列学习5天速成——第五天 服务托管
- java中的基本方法类型
- 实现有弹簧的ScrollView方法:自定义ScrollView
- hdu 4302 Holedox Eating
- 软件测试笔试题和面试题
- mongodb语法
- 23种设计模式之--建造者模式
- initWithSpriteFrameName和createWithSpriteFrameName
- 啥都没有,你还不学习?—送给所有上进的孩子,特别是高考研考国考各种考的孩子!你要学习!
- PHP中批量更新数据表中多条记录
- (work and tools)ubuntu lint工具的使用
- 不一样的JavaScript(7)——数组
- [温故知新] IIS GZip
- 查看android应用进程内存分配情况