linux驱动编程相关介绍、u-boot的移植与下载

启动过程

linux系统在2440上的启动过程分为三个阶段:

复制代码
启动u-boot
启动linux内核
挂载根文件系统

bootloader介绍

bootloader的本质是一个裸机程序

bootlood专门是为了能够正确地启动linux操作系统,在系统初上电时需要对系统做一些硬件的初始化操作 。例如初始化内存,初始化时钟 等等。最终bootloader会将linux内核(kernel)加载到ram 中,并引导系统去执行linux代码,完成linux的启动。所以不难看出,bootloader在这里起到一个承上启下的作用。

bootloader的任务

很明显,bootloader是系统上电 或者重新启动所执行的第一个程序,那么它主要完成了哪些任务呢?

复制代码
初始化异常向量表;
初始化工作模式;
初始化栈指针寄存器;
初始化时钟;
初始化串口等必要的外设。

这些设置都是裸机程序所必须的。 除了上述耳熟能详的工作外,bootloader为了能够正确启动linux操作系统,还做了以下几个工作:

复制代码
关闭MMU;
关闭DCache;
初始化sdram;
初始化nand flash;
初始化网卡并集成一些必要的协议,如tcp,tftp等;
提供一个类似于linux那样的终端,方便与操作人员互动;
能够设置并保存一些参数;
能够复制linux内核程序到指定的内存空间,并引导系统运行;

bootloader的分类

几乎所有运行大型操作系统的硬件平台在启动操作系统前都需要一个定制化的bootloader 。行业中电脑系统使用的bootloader是cmos 。而嵌入式系统中使用最为广泛的是u-boot 。所以可以简单的理解为u-boot是一种专门为嵌入式系统打造的bootloader 。而接下来我们将着重学习如何移植、下载和使用u-boot

u-boot的启动

在进入移植u-boot之前,我们还需要搞清楚一个问题,那就是u-boot作为系统上电和复位之后运行的第一个程序,2440是在哪里找到并执行它的?为了搞清除这个问题,我们必须先弄明白行业中所说的存储器的分类

存储器的分类

存储器是指保存数组的硬件单元 。广义的分类可简单的分为易失性存储器和非易失性存储器两类
易失性存储器 是指掉电后数据就丢失了的存储器,最常见的就是ram
非易失性存储器 是指掉电后数组不会丢失的存储器,最常见的就是rom

ram的分类

1.sram (static ram)用晶体管存储0、1。速度快,成本高 ,存储密度低。

2.dram (dynamic ram)动态存储,用电容充放电存储0,1。功耗大,需要外接刷新电路,读写速度低于sram 。成本低,存储密度大。

3.sdram (synchronous dram)增加了同步电路,提高dram的数据读写速度

4.ddr ram (全称ddr sdram即double data rate sdram),为sdram的下一代。目前已发展到ddr5。

5.iram (internal ram)注意iram并非是真正意义上的某种ram,通常iram就是sram它通常存在于Soc内部,所以被称为iram

rom的分类

1.rom 非易失性存储器,最早的rom在出场时写入数据,之后无法更改

2.prom (programmable rom)可编程rom。出场后能够让用户写入一次数据 ,例如cdrom

3.eprom (erasable prom)可擦写prom ,出场后可以擦除数据再次写入,但需要特殊的设备。如紫外光 等。

4.eeprom (electically eprom)电可擦写可编程rom,无需专用设备就可以擦写 ,编程。

5.flash 闪存,新一代非易失性存储器。分为:
nor flash :可以被寻址,价格贵;nand flash

启动流程

无论哪种程序都不能存放在ram中,sdram不行,iram也不行。程序必须提前保存在rom中 ,对于Mini2440来说,就只能是nor-flash或者是nand-flash 中了。

2440配置:

复制代码
64MB sdram;
256MB nand-flash;
2MB nor-flash;
s3c2440内部还有4KB iram;

因此对于2440来说,启动过程要分两种情况 ,用nor-flash启动或者用nand-flash启动。在实际项目中,可能二者都有,或者只有其中一种,取决于成本、性能的考量。而启动选择开关本质上是对2440芯片的两个引脚的电平进行的配置。对应引脚OM1:0

图中所示左右两个部分代表当用OM1:0选择了不同的启动方式时,从2440角度看到的地址分布,关键是看左右两张图的最下面,即地址0x00000000出在选择不同方式
启动时的差别

  1. 如果选择的是nor-flash启动 (左图),那么此时nor-flash的首字节地址就是0x00000000,也就是说第一条指令从nor-flash取;
  2. 如果选择的是nand-flash启动 (右图),那么此时内部iram的首字节地址就是0x00000000 ,也就是说第一条指令要从内部iram取。如果是这种情况的话,2440在运行iram中的程序之前,它会自动把nand-flash中的前4KB数据拷贝到iram去 ,这段程序是2440固化好的,称之为**"垫脚石"
    总结一下,那就是如果我们把
    u-boot写入到nor-flash中**,并设置开发板以nor-flash启动,那么自然系统一上电就运行我们写入在nor-flash中的u-boot了
    如果程序在nand-flash中,并设置开发板以nand-flash启动,2440就会把nand-flash中最前面的4KB程序拷贝到iram中执行。而这4KB程序一把都是做搬移工作的,因为u-boot可能会大于4KB。

u-boot的移植

由于u-boot在设计时考虑到要在各种不同平台上以及不同平台搭建的不同板子上运行 ,因此在获得了u-boot源码之后只能按照实际使用的平台和硬件设置做出正确的配置,才能够编译出一个符合我们自己的u-boot程序。

u-boot的下载

下载过程比较简单,按照并启动j-flash打开已经创建好的工程文件s3c2440.jflash 。之后分别连接设备、下载编程即可。注意一定要把启动选择开关拨到nor-flash。

所需要的资源已经上传至资源中。

首先进行连接:

连接成功:

按下F7:

此时就已经下载成功了:

相关推荐
你住过的屋檐4 分钟前
【Nginx】linux上安装nginx
linux·运维·nginx
宵时待雨29 分钟前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
大模型码小白1 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
晓晓_za8986682 小时前
开源 GEO 优化源码二次开发:贴牌改造与业务模块扩展实践
java·运维·服务器·开发语言·性能优化·开源
SCandL1522 小时前
k8s service
linux·容器·kubernetes
云计算DevOps-韩老师2 小时前
【MySQL运维DBA】【SQL基础系列002篇】
运维·mysql·dba
云贝教育-郑老师2 小时前
【麒麟服务器系统交付:一个DBA的六年信创实战笔记】
服务器·笔记·dba
DBA大董3 小时前
TDengine3.0 DBA常用的运维命令和SQL2
运维·数据库·时序数据库·dba·tdengine
会飞的土拨鼠呀3 小时前
Linux的存储使用率应该如何计算
linux·运维·服务器
Elastic 中国社区官方博客4 小时前
OpenTelemetry Java 扩展:无需分叉 agent 即可自定义追踪
java·大数据·运维·开发语言·数据库·人工智能·elasticsearch