系统引导的过程一般包括如下几步: 【 】_DSP bootloader程序引导开发指南(一)—— 初识Bootloader...

f164932e649eb6c3ad34ee6fc0ae7274.png

1 初识Bootloader

Bootloader定义 · DSP上电引导过程


Bootloader即引导程序,一般指DSP上电复位后负责程序跳转至应用程序之前的出厂程序;也范指将程序数据由指定接口(如CAN)装载到固定区域的过程,包括一次Bootloader和二次Bootloader。

1.1 一次Bootloader

DSP上电复位后,会触发RESET中断,中断指向固化在片内ROM中的Bootloader代码。这是出厂就存在的引导程序,不可修改。它实现的功能是查询Bootloader模式,初始化接口,并从该接口中读取“固定大小”内的源程序并搬移到RAM中执行。这个过程叫一次引导。注意此时的Bootloader不会初始化与模式无关的外设。

1.2 二次Bootloader

对于小程序,只需要一次引导,但一般程序规模大于“固定大小(一般64K或1K)”,这时需要在一次Bootloader的基础上编写一个新的引导程序,这个引导程序不超过“固定大小”,而源程序则放在另外一处,这样在新的Bootloader程序中实现搬移源程序的工作。当系统复位时,一次引导把接口中的二次引导程序复制到RAM中执行,复位结束后,在RAM中执行二次引导,将目的源程序复制到FLASH中执行。即第二次引导实现真正的代码搬移,一次引导是二次引导的引导。

以上是常规意义的二次引导,另外一种方案是仅使用一次引导的程序跳转功能,不使用一次引导复制程序,而程序复制与装载由位于FLASH区的新编写的引导程序完成,实现真正的代码搬移,这里的二次Bootloader具有二次开发的意思。

1.3 DSP上电引导过程

当CPU上电时,会引起上电复位RESET。

RESET向量位于固化在boot ROM中的CPU Vector Table。TMS320x2803x的CPU Vector Table位于地址0x3F E000 - 0x3F FFFF。

9b0db769b0bb2a3c82bbcbf3e5757b9f.png
(图:TMS320x2803x Piccolo Boot ROM Reference Guide)

CPU Vector Table内容如下图,其中唯一可被正常响应的向量就是位于0x3F FFC0的RESET向量。RESET向量出厂固化为指向InitBoot函数,InitBoot函数位于上图中的Bootloader functions区域。

efcfd9e3f8e01352bb2275d3ef52437a.png
(图:TMS320x2803x Piccolo Boot ROM Reference Guide)

进入InitBoot函数后,开始执行Bootloader模式查询过程,并根据查询选择的模式根据需求判断是否调用接口函数(如CAN、SCI、I2C等)读取“固定大小”内的源程序并搬移到RAM中执行,或者直接进入入口地址(如FLASH启动,地址为FLASH用户可用区域的最后2字的位置),TMS320x2803x FLASH入口地址为0x3F 7FF6。至此,完成一次Bootloader过程。

b4d40383f26515f436e2015893a9cc5e.png
(图:TMS320x2803x Piccolo Boot ROM Reference Guide)

当仅使用一次引导的程序跳转功能,不使用一次引导复制程序时,上图中条件判断“Call Get_Mode()?”和“Call Boot Loader?”将不被满足,从而执行“No”分支,最终默认配置将进入FLASH区域的BEGIN区(地址0x3F 7FF6)。

对于BEGIN区,查看CMD文件中的MEMORY指令,如下图。BEGIN位于PAGE 0,起始地址为0x3F 7FF6,长度为0x00 0002。(注:该地址恰好位于FLSAH用户可用区的末尾,且长度刚好可以存放一条长跳转语句)

3012df509ce6f407d762879c322f5072.png

对于BEGIN区内存放的程序段,查看CMD文件中的SECTION指令,如下图。可以看出程序段“codestart”将被存放于此。

ad4f4c315666c454827b7a6d93b7ecf2.png

那么“codestart”程序段里又是什么?查看工程中的“xxx_CodeStartBranch.asm”汇编源文件,如下图,BEGIN区将存放一条长跳转指令,该指令默认指向c_int00。

8a62920bc47553d801b52e6088f6c76b.png

c_int00是C/C++程序的入口地址,用于完成C运行环境的初始化,最终跳转到main函数,开始运行应用程序。

f59e356fca7f720e24fd16d3aa8ccbb8.png
(图:TMS320C28x Assembly Language Tools v18.1.0.LTS User's Guide)

欢迎关注微信公众号: iFTrue未来已来

| 公众号后台回复 bootloader译文 等获取电力电子相关的文章

| 公众号后台回复 交流群 加入技术讨论群

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux操作系统 一、单项选择题 1. 关于Linux内核版本的说法,以下错误的是()。 A.表示为主版本号.次版本号.修正号 B.1.2.3表示稳定的发行版 C.1.3.3表示稳定的发行版 D.2.2.5表示对内核2.2的第5次修正 2. 系统引导过程一般包括如下几步: a.MBR中的引导装载程序启动; b.用户登录; c.Linux内核运行; d.BIOS自检。 正确的顺序是()。 A.d,b,c,a B.d,a,c,b C.b,d,c,a D.a,d,c,b 3. 字符界面下使用shutdown命令重启计算机时所用的参数是()。 A.-h B.-t C.-k D.-r 4. 下面哪个不是桌面环境软件? A.KDE B.twm C. Gnome D.CDE 5. 在UNIX/Linux系统添加新用户的命令是() A. groupadd B. usermod C. userdel D. useradd 6. Android系统是基于Linux操作系统开发的手机系统,因此在进行刷机、删除系统自带软件时需要获得管理员账户( )的权限。 A.administrator B.admin C.root D.liveuser 7.已知当前系统umask的值为022,请问这时新建目录文件的权限为()。 A. 755 B. 644 C.775 D.664 8.已知用户sarwar在虚拟终端1和虚拟终端2及图形用户界面下登录,请问sarwar在虚拟终端1中执行ls >tty2后,命令输出到哪里?() A.虚拟终端1 B.虚拟终端2 C.图形终端 D.无输出 二、填空题(每空1分,共15分) 1. Linux系统中有三种基本的文件类型:普通文件、目录文件和 设备文件 。 2. 在超级用户下显示Linux系统中正在运行的全部进程,应使用的命令及参数是 ps -aux 。 3. 将前一个命令的标准输出作为后一个命令的标准输入,称之为 管道 。 4. /sbin 目录用来存放系统管理员使用的管理程序。 5. 安装Linux系统对硬盘分区时,必须有两种分区类型: 文件系统分区 和 交换分区 。 11.将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式__ __tar -czvf wang.tar.gz /home/stud1/wang_ 三、判断题(每题1分,共10分) 1. Ubuntu LINUX安装时自动创建了根用户。( T ) 2. LINUX中的超级用户为root,登陆时不需要口令。( F ) 3. Linux不可以与MS-DOS、OS/2、Windows等其他操作系统共存于同一台机器上。( F ) 4. Linux的特点之一是它是一种开放、免费的操作系统。 ( T ) 5. RedHat系统中,默认情况下根口令没有字符长短的的限制,但是必须把口令输入两次;如果两次输入的口令不一样,安装程序将会提示用户重新输入口令。 ( F ) 四、问答题\应用操作题(每题5分,共25分) 1. Linux内核主要由哪几部分组成?每部分的作用? Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时, 由调度程序选择最值得运行的进程; 内存管理(MM)允许多个进程安全的共享主内存区域; 虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统; 网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持; 进程间通讯(IPC) 支持进程间各种通信机制。 2. vi编辑器有哪几种工作模式?如何在这几种工作模式之间转换? Vi的工作模式有三种:命令模式、输入模式、末行模式。 在命令模式下输入a、A、i、I、o、O等命令之一可以进入输入模式, 在输入模式下按Esc键回到命令模式; 在命令模式下输入:进入末行模式,末行命令执行完后回到命令模式。 3.假设你是系统管理员,需要增加一个新的用户账号u1,为新用户设置始密码,锁定用户账号u2,并删除用户账号u3。请写出完成本题所述功能的命令序列 useradd u1 -添加用户u1 passwd 123456 -为用户添加密码123456 passwd -l u2 -锁定用户账号u2 userdel u3 -删除用户账号u3 4.写出将/abc目录中所有文件及目录打包压缩成文件abc.tar.gz的命令。 tar -zcvf abc.tar.gz /bc 5.创建一个用户,用户名为user02,所属私有组和标准组为group01,用户主目录为/home/user02,用户登录shell为/bin/bash。 useradd -g group01 –G group01 –d /home/user02 -s /bin/bash user02 五、综合题(1题10分,1题10分,共20分) 1、已知管理员用户的主目录结构如图2所示: (1)管理员用户目前在/R/B/T4/S0中,分别写出执行以下命令后,管理员在目录系统中的位置。 cd /R cd .. /R/B/T4 cd ../.. /R/B cd / / cd ~ /R (2)写出删除目录C的两种办法。 1.rm -rf /root/C 2.rm /root/T3 rm /root/T4 rmdik/root/C (3)已知管理员用户在/R目录中,分别用绝对路径和相对路径方式写出将目录/R/C/T3/S0中的文件复制到/R/D/T5目录中的方法。 cp /R/C/T3/S0 /R/D/T5 cp /C/T3/S0 /D/T5 2、设计一个shell程序计算n的阶乘。要求: (1) 从命令行接收参数n; (2) 在程序开始后立即判断n的合法性,即是否有参数,若有是否为正整数,若非法请给错误提示; (3) 最后输出计算的结果。 #!/bin/sh echo “please input your number n:” read n #if(( ! -n “$n”)); then if test -z “$”; then echo “n is no data !” exit 1 else if(( $n<=));then echo -e “$n is no zhengzhengshu.\n”; exit 1 fi fi fact=1;tmp=1 while[$tmp -le $n ] do fact=$((fact*tmp));tmp=$((++tmp)); done echo "fact=$fact"

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值