zoukankan      html  css  js  c++  java
  • 嵌入式ARM系统开发基础

    从.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。(当然这是作死的节奏)
     
     
     
  • 相关阅读:
    [Audio processing] FFMPEG转音频格式和采样率
    [操作系统] OS X Yosemite U盘制作
    [基础] 广义线性回归
    [基础] 一些英文术语
    [经典] 在未排序数组中返回topK大的数
    [参数方法] 贝叶斯估计(待补充)
    [参数方法] 最小二乘
    [Theano] Theano初探
    font awesome的图标在WP8浏览器下无法显示的问题解决
    SQL 获取各表记录数的最快方法
  • 原文地址:https://www.cnblogs.com/pavkoo/p/3461859.html
Copyright © 2011-2022 走看看