ARM开发之三:烧录SD卡,制作bootloader

在此之前,加入一些Linux启动过程和Android启动过程的细分,不想看的可以分级标题跳转到:烧写Uboot实验  部分
 

Linux启动和Android启动的细分

 在嵌入式中
Linux:做工控或者医疗设备使用Linux的多一些

Android:做消费电子,追求用户体验多一些

1)Linux的启动顺序

         先启动Uboot(bootloader)--->启动uImage/zImage(Linux内核)--->rootfs(根文件系统)

        先启动Uboot,Uboot启动之后引导内核,内核启动之后挂载根文件系统(根文件系统在硬盘上<如果是开发板就是EMMC>)

        在EMMC中首先是Uboot,Uboot不在分区里面,uImage可以放在分区也可以不放在分区中

        对于Linux来说EMMC中至少有一个分区,放的是根文件洗系统

未分区空间已分区空间
EMMC(8GB)   Uboot 和 uImagerootfs

2)Android的启动顺序

先启动Uboot(bootloader)--->启动uImage/zImage(安卓内核)--->启动ramdisk(虚拟内存盘)--->对于安卓系统进行简单的初始化--->初始化之后会去挂载

PS:其实ramdisk相当于系统的根(由于其是虚拟内存盘,所以这个根在内存里面)

        在ramdisk(根)目录下有这几个目录文件,需要进行分区挂载,

--->system(只有超级用户可以操作的<系统自带的软件“电话”“短信”等>)

--->data(普通用户可以操作的<相当于是安卓操作系统下的一个家目录,用户自己下载的文件放置在这里>)

--->cache(放的是一些缓存文件)

--->storage(可以存放用户自己的一些文件)

对于安卓系统来说硬盘翻去最少需要这四个

没有Uboot就没有办法进入recovery模式(刷过机的都知道,recovery模式是属于Uboot的一个工具,恢复出厂设置,相当于是格式化data分区)

EMMC(8GB)|Uboot uImage ramdisk | cache | data | storage | system|

看上去分区比Linux麻烦些。

烧写Uboot的实验

        对于我的S5P6818的开发板来说,板子的启动设备有:

  1. 第一启动设备是SD0
  2. 第二启动设备是EMMC
  3. 第三启动设备是USB

我们拿到一个新的开发板之后,EMMC是新的,里面什么都没有

所以我们不能通过EMMC启动,只能从SD0或者USB启动

SD0启动更方便,需要SD卡中有启动代码就是Uboot

所以需要先吧Uboot烧写到SD卡中

需要把Uboot放到SD卡的第513个字节,也就是说SD卡需要在前面空出512个字节

问我原因的话,只能说是S5P6818要求的

1)为啥要第513字节?

        主要是因为S5P6818内部有一块rom,里面存储的三星公司固化好的程序,当S5P6818芯片启动之后先执行ROM中的代码,执行之后获取SD卡中读bootloader。

        把bootloader读到6818内部的RAM中执行bootloader的第一阶段。

        第一阶段的功能就是初始化核心板上的DDR3内存,然后在核心板上的DDR中执行bootloader的第二阶段。

        bootloader必须要放到SD卡的第513个字节上,要不然6818的rom找不到bootloader

2)为啥不放到第0个字节?

        主要是因为SD卡的前512个字节(第一个扇区),存放的是分区表(分区的开始、结束、大小...)

3)如何准确的写入到SD卡的第513个字节?

        可以使用高编学过的知识,在Linux下一切皆文件。使用lseek进行偏移值操作

        SD卡插入到Linux系统中就是一个文件

        是用open close read write lseek

我们是这样给SD卡分区,SD卡开头512byte之后给它预留100MB或者SD卡1/100的空间。(给Uboot和Uimage留的空间)

把分区格式化为FAT32格式

SD卡[512byte + 100MB | ---FAT32--- |]

首先,你需要一张SD卡和Linux操作系统(自行搜索安装虚拟机及乌班图系统),前置硬件准备是必须的

创建SD卡分区

  1. 先把SD卡插入到PC机中
  2. 驱动在Linux系统中识别

    一般来说sda是PC机的硬盘分区,sdb就是SD卡
    /dev/sdb是整个SD卡设备
    /dev/sdb1是SD卡里面的第一个分区
    所以我们要写入bootloader到/dev/sdb文件的513个字节
  3. 确定SD卡是否挂载到了Linux操作系统中
    在Linux命令行中使用mount命令(查询挂载)

    即使没有找到挂载的SD卡分区,也没关系
    因为我们需要重新分区,需要把挂载的分区卸载掉
  4. 卸载挂载的分区
    umount /dev/sdb1 来进行卸载
  5. 去报卸载成功,重新查询一下
  6. 重新建立分区
    需要使用fdisk命令(可用于对磁盘分区的操作)
    1. sudo fdisk /dev/sdb
    2. p 命令(查看sd卡信息)
    3. d 命令(删除分区)
    4. p 命令(再次查看是否已经删除分区)
    5. n 命令(选择分区类型)(然后双回车,默认分区类型为p(主分区),分区号1
    6. 扇区大小 直接/100,例如我的是15728639,则写入157286,然后回车,(如果是新卡,此处没有移除签名选项,如果不是新卡,则有签名选项,Y即可
    7. t 命令,选择分区 1,L (大写)查看所有代码,选择FAT32的,也就是代码 b
    8. p 命令,(再次查看确认类型为 W95 FAT32)
    9. w 命令(同步磁盘,确认分区表)
  7. 给SD卡新创建的出来的分区进行格式化
    在终端命令行输入
    sudo mkfs.vfat -F 32 /dev/sdb1 -n red
    (-n 后是自己想要起的名字,自行决定即可)
  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 现代嵌入式系统大量使用SD卡存储数据,但在大量数据存储在SD卡上时,需要保证SD卡的文件系统稳定压缩。通常,我们使用Bootloader程序实现SD卡Firmware升级功能,该程序支持从SD卡获得启动信息,进而读取Firmware文件更新系统。在本文中,我们将详细介绍STM32F407 SD卡升级Bootloader程序下载。 1. 准备材料:  STM32F407核心板;  USB转串口模块;  SD卡 FAT32文件系统; 2. 确定SD卡Firmware文件格式: Firmware文件应该是整个程序代码和堆栈的BIN文件格式,用于升级整个系统软件。 3. 配置系统引导文件: 使用STMCubeMx或其他软件将Bootloader程序配置为系统引导文件,启动时首先加载它。 4. Bootloader程序下载准备工作: 在F407的SDIO1端口运行Bootloader程序,将Flash扇区1准备成一个Firmware更新的接收数据块。 5. SD卡下载: 从SD卡中打开Firmware文件夹查找Firmware更新程序(含APP压缩包在内),启动STM32F407 Bootloader程序从SD卡中读取整个文件,将文件传输至Flash扇区1。升级过程通常需要等待一段时间。 6. 启动更新程序: 在更新完成后重新启动针对新Firmware更新程序,观察系统是否正常运行,APP程序更新后的状态是否与预期一致。 7. 完整性检查: 确定存储在SD卡上的Firmware文件的大小以进行检查,确认每次更新时文件的大小以及完整性。此外,应检查当前正在运行的Firmware版本,以确认其是Firmware更新后的最新版本。 以上是关于STM32F407 SD卡升级Bootloader程序下载的详细步骤,需要工程师们按照步骤进行升级,以确保整个系统在Firmware更新后的可靠性,有效提升嵌入式系统的稳定性和确保可靠性,同时避免因硬件损坏或数据丢失而造成的混乱和损失。 ### 回答2: STM32F407是一款易于使用的高性能微控制器,可以进行SD卡升级和Bootloader程序下载。在进行升级和下载之前,需要先下载相应的编译器和ST-Link工具。接下来,按照以下步骤进行操作: 1. 在SD卡中添加升级文件,如固件文件。 2. 在ST-Link工具中选择"Firmware Upgrade"选项,点击"Connect"按钮连接STM32F407芯片。 3. 确认芯片型号和FLASH大小并进行擦除。 4. 选择"Program and Verify"选项,并选择升级文件进行下载。 5. 点击"Start"按钮开始下载。 下载完成后,可以进行Bootloader程序的下载。首先需要建立一个新项目,将Bootloader程序添加进去,并进行编译。接下来,将STM32F407芯片连接到ST-Link工具中,选择"Connect"选项,然后点击"Program and Verify"选项进行下载。完成后,可以重启设备并测试Bootloader程序是否正常运行。 总的来说,STM32F407的SD卡升级和Bootloader程序下载过程相对较为简单,只需要按照以上步骤进行操作即可。其中需要注意的是,在下载过程中不能中断电力供应,否则可能会导致芯片损坏。 ### 回答3: 在使用STM32F407微控制器的开发板进行SD卡升级时,需要先将Bootloader程序下载到板子中。Bootloader程序允许在初次启动时进行SD卡升级,这可以利用SD卡来更新控制器的固件,使得系统更稳定、更可靠。 下载Bootloader程序的方法有很多种,可以通过ST-Link V2下载器,也可以通过串口下载程序。使用ST-Link V2下载器可以通过JTAG/SWD接口将Bootloader程序下载到系统中,需要注意的是,在下载时需要选择正确的程序烧录地址。 如果使用串口下载程序,则需要在Bootloader程序中添加一个串口下载器的协议,并将该程序编译到系统中。此时,我们需要将升级文件打包成一个.bin等二进制格式的文件,并通过串口将其发送给Bootloader程序进行升级,具体操作步骤可以参考相应的程序开发文档。 总结来说,SD卡升级Bootloader程序的下载主要有两种方式,一是通过ST-Link V2下载器进行下载,二是通过串口将程序编译到系统中并进行升级。在具体实现过程中,需要注意选择正确的烧录地址,并严格按照开发文档操作,确保升级过程顺利完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值