基于Linux的--裸机启动流程

驱动学习目标:

    1: 芯片的启动流程

    2: uboot一切的嵌入式设备都是来自uboot的启动)

    3: 内核和文件系统所有的开发板开发的大前提)

    4: 驱动内核的框架

    5: 内核的杂项驱动开发

    6: Linux2.6 内核驱动开发

    7: 多节点 + 文件内核接口

    8: Linux下的中断 等待队列

    9: Linux的定时器和POLL轮询

    10:小任务和工作队列

    11:内核的同步机制

    12:平台设备总线

    13:输入子系统

    14:产品发布

1、裸开发板 --- 7寸 屏幕800*480(32bit)

基于Linux的--裸机启动流程_第1张图片

串口线:

基于Linux的--裸机启动流程_第2张图片

CPU:

    三星的Exynos4412

    四核的CPU

    主频 1.4 GHZ

    内部自带:64KB i_ROM(不丢失)

    内部再带:256KB i_RAM(丢失)

开发板:

    友善之臂的Tiny4412 开发板

开发板的资源:

    * 蜂鸣器

    * 四个用户按键

    * 电源开关(左边拨码开关)

    * 启动方式的拨码开关(右边)

        * 向上拨 内部4GB(emmc)启动

        * 向下伯 外部的SD卡启动

    * UART0--DB9--调试控制串口

    * HDMI + MIC

    * 自带两个USB(自带驱动)

            可以插摄像头

            可以插USB网卡

    * 网口--RJ45--百兆

    * 支持 RTC

    * SPI接口

    * 三个UART接口

    * 四组IIC--但是一个IIC

    * DVP摄像头接口

    * 一大组GPIO口

现在市场上的芯片大部分架构

    一般都是 ARM架构的

    ARM:三大系列

            A系列 (高端芯片)

            M系列 (工控)M0 M3 M4 M7

            R系列 (军工/实时)

A系列的芯片除了芯片的频率高,DSP/解算/AI能力很强,外设是很弱的!它只有一些基本外设,一个SPI ,两个定时器。

裸机:指的是一个没有操作系统的硬件系统!

三个阶段的启动流程

 三星自带了一个 IROM——64KB

    不是让用户用的,这个空间是芯片厂商他预留给自己用的空间已经存储了厂商出场的代码,不可访问不可修改,且加密!它把该空间的代码叫做 irom_code,通常把它称为 BL0  第一个阶段上电就会自动运行的代码!

BL0做了以下操作:(第一阶段运行的是BL0)

    1: 关闭窗口看门狗

    2: 关闭了中断和内存保护单元

    3: 关闭D_CACHE 开启 I_CACHE

    4: 刷新TLB向量表 初始化缓冲

    5: 制作 内核 1 的空闲

    6: 查看是否处于安全模式/睡眠模式

        不是往下走

    7: 初始化 中断和管理员权限的堆栈空间

    8: 初始化 ZI/RW

    9: 注册函数指针

    10:获取复位状态

    11: 设置芯片PLL锁相环以及驱动时钟

    12: 获取开发板的启动方式

            右边的拨码开关决定启动方式

    13: 这段代码该做的事情做完了!

        它就会寻找下一阶段代码去运行,从启动的存储介质的特殊位置下载第二阶段代码,运行到 SRAM(256)空间中。使命结束,开始运行第二阶段代码。

    * 总结两句话 :BL0 开始各种初始化,BL0 引导出了BL1

BL1 SD 卡的第一个扇区

    * 它做了以下操作:

        1: 各种初始化

        2: 判断开发板的启动方式

        3: 搬运下载BL2 代码到SRAM中

            至此它的生命就结束了

    * 因为该阶段的代码也是三星提供的,只提供了一个加密后的二进制文件

BL2阶段:(Uboot--启动文件)

    它SD卡第17扇区处开始

    BL2做了以下操作:

        *在一次初始化堆栈空间

        *设置整体开发板的时钟

        *将CPU的频率推上顶峰

            1.4 GHZ

        * 初始化DRAM(DDR3 RAM--1GB)

          就可以用 1GB 内存空间了

        * 又一次检测开发板的启动方式

        * 为了去搬运操作系统!(内核)

            把内核搬运到DRAM中运行

            这个时候就开始运行操作系统了! 

编译

编译一个代码需要编译器!

编译器:将你写的代码转为汇编再转成二进制代码的软件

安装交叉编译工具

安装:

    1: 解压压缩包

        sudo tar -xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz  -C /

        会在根目录生成 opt 文件夹

        这个就是交叉编译工具

    2: /etc/profile

        传说中 环境变量文件!环境变量可以再此修改!

        在最后一行添加

            export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin

    3: 重启这个文件

        source /etc/profile

        执行

            arm-linux-gcc -v

        执行成功即代表安装成功。

你可能感兴趣的:(基于Linux的驱动学习,linux)